@hidemikimura/receipt-html-to-pdf 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,40 @@
1
+ /** @param {number} n */
2
+ export function hex4(n: number): string;
3
+ /**
4
+ * PDF に埋め込む 1 フォント分の使用状況。
5
+ * 走査中に addGlyph でグリフを集め、最後に embed で PDF オブジェクトを生成する。
6
+ */
7
+ export class EmbeddedFont {
8
+ /**
9
+ * @param {import('./parse.js').ParsedFont} font
10
+ * @param {string} resourceName ページリソース名(F1 など)
11
+ */
12
+ constructor(font: import("./parse.js").ParsedFont, resourceName: string);
13
+ font: import("./parse.js").ParsedFont;
14
+ resourceName: string;
15
+ /** @type {Map<number, number>} 旧 GID → 代表コードポイント(ToUnicode 用) */
16
+ usedGids: Map<number, number>;
17
+ /** @type {import('./subset.js').SubsetResult|null} */
18
+ subset: import("./subset.js").SubsetResult | null;
19
+ /**
20
+ * @param {number} gid 旧 GID
21
+ * @param {number} codePoint
22
+ */
23
+ addGlyph(gid: number, codePoint: number): void;
24
+ /**
25
+ * 旧 GID を PDF 上の CID(サブセット後 GID)へ変換する。embed 後にのみ有効。
26
+ * @param {number} gid
27
+ * @returns {number}
28
+ */
29
+ cid(gid: number): number;
30
+ /**
31
+ * サブセット化を確定させる。以後 cid() が使える。
32
+ */
33
+ finalize(): import("./subset.js").SubsetResult;
34
+ /**
35
+ * PDF オブジェクト群を書き込み、Type0 フォント辞書への参照を返す。
36
+ * @param {import('../pdf/writer.js').PdfWriter} writer
37
+ * @returns {Promise<import('../pdf/writer.js').Ref>}
38
+ */
39
+ embed(writer: import("../pdf/writer.js").PdfWriter): Promise<import("../pdf/writer.js").Ref>;
40
+ }
@@ -0,0 +1,113 @@
1
+ /**
2
+ * TrueType (sfnt / glyf アウトライン) フォントの最小パーサー。
3
+ * サブセット化と PDF 埋め込みに必要なテーブルだけを読む。
4
+ */
5
+ /**
6
+ * @typedef {object} ParsedFont
7
+ * @property {Uint8Array} data
8
+ * @property {Map<string, {offset: number, length: number}>} tables
9
+ * @property {number} unitsPerEm
10
+ * @property {number} indexToLocFormat
11
+ * @property {[number, number, number, number]} bbox xMin yMin xMax yMax (font units)
12
+ * @property {number} ascender hhea
13
+ * @property {number} descender hhea(負値)
14
+ * @property {number} lineGap
15
+ * @property {number} numGlyphs
16
+ * @property {Uint16Array} advances グリフごとの advance width (font units)
17
+ * @property {Uint32Array} loca numGlyphs + 1 要素
18
+ * @property {Map<number, number>} cmap コードポイント → GID
19
+ * @property {number} capHeight OS/2 sCapHeight(なければ ascender * 0.7)
20
+ * @property {number} italicAngle
21
+ * @property {boolean} useTypoMetrics OS/2 fsSelection bit 7
22
+ * @property {number} typoAscender
23
+ * @property {number} typoDescender
24
+ * @property {number} winAscent
25
+ * @property {number} winDescent
26
+ * @property {string} postScriptName
27
+ * @property {boolean} bold
28
+ * @property {boolean} italic
29
+ * @property {boolean} variable fvar テーブルを持つ可変フォントか
30
+ */
31
+ /**
32
+ * @param {ArrayBuffer|Uint8Array} buffer
33
+ * @returns {ParsedFont}
34
+ */
35
+ export function parseFont(buffer: ArrayBuffer | Uint8Array): ParsedFont;
36
+ /**
37
+ * グリフの生バイト列を返す(空グリフは長さ 0)。
38
+ * @param {ParsedFont} font
39
+ * @param {number} gid
40
+ * @returns {Uint8Array}
41
+ */
42
+ export function glyphData(font: ParsedFont, gid: number): Uint8Array;
43
+ /**
44
+ * 複合グリフが参照するコンポーネント GID を返す(単純グリフなら空)。
45
+ * @param {Uint8Array} g
46
+ * @returns {number[]}
47
+ */
48
+ export function componentGids(g: Uint8Array): number[];
49
+ /**
50
+ * ブラウザが行ボックス計算に使うアセント/ディセントに近い値(font units)を返す。
51
+ * Chrome/Firefox は OS/2 USE_TYPO_METRICS が立っていれば typo、そうでなければ hhea を使う。
52
+ * @param {ParsedFont} font
53
+ * @returns {{ascent: number, descent: number}} descent は正値
54
+ */
55
+ export function browserMetrics(font: ParsedFont): {
56
+ ascent: number;
57
+ descent: number;
58
+ };
59
+ export type ParsedFont = {
60
+ data: Uint8Array;
61
+ tables: Map<string, {
62
+ offset: number;
63
+ length: number;
64
+ }>;
65
+ unitsPerEm: number;
66
+ indexToLocFormat: number;
67
+ /**
68
+ * xMin yMin xMax yMax (font units)
69
+ */
70
+ bbox: [number, number, number, number];
71
+ /**
72
+ * hhea
73
+ */
74
+ ascender: number;
75
+ /**
76
+ * hhea(負値)
77
+ */
78
+ descender: number;
79
+ lineGap: number;
80
+ numGlyphs: number;
81
+ /**
82
+ * グリフごとの advance width (font units)
83
+ */
84
+ advances: Uint16Array;
85
+ /**
86
+ * numGlyphs + 1 要素
87
+ */
88
+ loca: Uint32Array;
89
+ /**
90
+ * コードポイント → GID
91
+ */
92
+ cmap: Map<number, number>;
93
+ /**
94
+ * OS/2 sCapHeight(なければ ascender * 0.7)
95
+ */
96
+ capHeight: number;
97
+ italicAngle: number;
98
+ /**
99
+ * OS/2 fsSelection bit 7
100
+ */
101
+ useTypoMetrics: boolean;
102
+ typoAscender: number;
103
+ typoDescender: number;
104
+ winAscent: number;
105
+ winDescent: number;
106
+ postScriptName: string;
107
+ bold: boolean;
108
+ italic: boolean;
109
+ /**
110
+ * fvar テーブルを持つ可変フォントか
111
+ */
112
+ variable: boolean;
113
+ };
@@ -0,0 +1,63 @@
1
+ /**
2
+ * @param {string} family
3
+ * @returns {string}
4
+ */
5
+ export function normalizeFamily(family: string): string;
6
+ /**
7
+ * getComputedStyle().fontFamily('"BIZ UDPGothic", sans-serif')をリストに分割する。
8
+ * @param {string} value
9
+ * @returns {string[]}
10
+ */
11
+ export function splitFamilies(value: string): string[];
12
+ /**
13
+ * getComputedStyle().fontWeight('400' / '700' / 'bold')を数値にする。
14
+ * @param {string} value
15
+ * @returns {number}
16
+ */
17
+ export function parseWeight(value: string): number;
18
+ /**
19
+ * @typedef {object} RegisteredFont
20
+ * @property {string} family 正規化済み(小文字・引用符なし)
21
+ * @property {string} displayFamily
22
+ * @property {number} weight
23
+ * @property {'normal'|'italic'} style
24
+ * @property {import('./parse.js').ParsedFont} parsed
25
+ */
26
+ export class FontRegistry {
27
+ /** @type {RegisteredFont[]} */
28
+ fonts: RegisteredFont[];
29
+ /**
30
+ * @param {import('../index.js').FontSource} source
31
+ * @returns {Promise<RegisteredFont>}
32
+ */
33
+ register(source: import("../index.js").FontSource): Promise<RegisteredFont>;
34
+ /** @param {string} family */
35
+ hasFamily(family: string): boolean;
36
+ /**
37
+ * CSS の指定に最も近い登録フォントを返す。
38
+ * @param {string[]} families font-family リスト(優先順)
39
+ * @param {number} weight
40
+ * @param {'normal'|'italic'} style
41
+ * @param {number} [codePoint] 指定するとこの文字のグリフを持つフォントに限定する
42
+ * @returns {RegisteredFont|null}
43
+ */
44
+ match(families: string[], weight: number, style: "normal" | "italic", codePoint?: number): RegisteredFont | null;
45
+ /**
46
+ * 登録済みの全ファミリーの中から、指定文字のグリフを持つものを探す(最終フォールバック)。
47
+ * @param {number} codePoint
48
+ * @param {number} weight
49
+ * @param {'normal'|'italic'} style
50
+ * @returns {RegisteredFont|null}
51
+ */
52
+ anyWithGlyph(codePoint: number, weight: number, style: "normal" | "italic"): RegisteredFont | null;
53
+ }
54
+ export type RegisteredFont = {
55
+ /**
56
+ * 正規化済み(小文字・引用符なし)
57
+ */
58
+ family: string;
59
+ displayFamily: string;
60
+ weight: number;
61
+ style: "normal" | "italic";
62
+ parsed: import("./parse.js").ParsedFont;
63
+ };
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @typedef {object} SubsetResult
3
+ * @property {Uint8Array} data サブセット化されたフォントファイル
4
+ * @property {Map<number, number>} gidMap 旧 GID → 新 GID
5
+ * @property {number[]} oldGids 新 GID 順に並んだ旧 GID
6
+ */
7
+ /**
8
+ * @param {import('./parse.js').ParsedFont} font
9
+ * @param {Iterable<number>} usedGids
10
+ * @returns {SubsetResult}
11
+ */
12
+ export function subsetFont(font: import("./parse.js").ParsedFont, usedGids: Iterable<number>): SubsetResult;
13
+ export type SubsetResult = {
14
+ /**
15
+ * サブセット化されたフォントファイル
16
+ */
17
+ data: Uint8Array;
18
+ /**
19
+ * 旧 GID → 新 GID
20
+ */
21
+ gidMap: Map<number, number>;
22
+ /**
23
+ * 新 GID 順に並んだ旧 GID
24
+ */
25
+ oldGids: number[];
26
+ };
@@ -0,0 +1,198 @@
1
+ /**
2
+ * フォントを登録する。同じ family/weight/style を再登録した場合は上書きする。
3
+ * パース結果はモジュール内にキャッシュされ、以降の htmlToPdf 呼び出しで再利用される。
4
+ *
5
+ * @param {FontSource} font
6
+ * @returns {Promise<void>}
7
+ */
8
+ export function registerFont(font: FontSource): Promise<void>;
9
+ /**
10
+ * 登録済みフォントの一覧(デバッグ用)。
11
+ * @returns {{family: string, weight: number, style: string, glyphs: number}[]}
12
+ */
13
+ export function listFonts(): {
14
+ family: string;
15
+ weight: number;
16
+ style: string;
17
+ glyphs: number;
18
+ }[];
19
+ /**
20
+ * HTML を PDF に変換する。
21
+ *
22
+ * @param {ConvertInput} input
23
+ * @param {ConvertOptions} [options]
24
+ * @returns {Promise<Blob|Uint8Array|string>} options.output に応じた PDF
25
+ */
26
+ export function htmlToPdf(input: ConvertInput, options?: ConvertOptions): Promise<Blob | Uint8Array | string>;
27
+ /**
28
+ * 生成した PDF をブラウザでダウンロードさせる補助関数。
29
+ *
30
+ * @param {Blob|Uint8Array} pdf
31
+ * @param {string} filename
32
+ * @returns {void}
33
+ */
34
+ export function downloadPdf(pdf: Blob | Uint8Array, filename: string): void;
35
+ export { expandPrintMediaCss } from "./renderer.js";
36
+ /**
37
+ * 登録するフォントの定義。
38
+ * `src` は TrueType アウトライン(glyf)を持つ静的 TTF のみ対応。
39
+ *
40
+ * @typedef {object} FontSource
41
+ * @property {string} family CSS の font-family と一致させる名前
42
+ * @property {number} [weight=400] 100〜900
43
+ * @property {'normal'|'italic'} [style='normal']
44
+ * @property {string|ArrayBuffer|Uint8Array} src URL または フォントファイルのバイト列
45
+ */
46
+ /**
47
+ * 用紙サイズ。既定名か、幅・高さを CSS 長さ('80mm' など)で指定する。
48
+ *
49
+ * @typedef {'A3'|'A4'|'A5'|'B4'|'B5'|'Letter'|'Legal'|{width: string, height: string}} PageSize
50
+ */
51
+ /**
52
+ * @typedef {object} PageOptions
53
+ * @property {PageSize} [size='A4']
54
+ * @property {'portrait'|'landscape'} [orientation='portrait']
55
+ * @property {string|{top: string, right: string, bottom: string, left: string}} [margin='15mm']
56
+ */
57
+ /**
58
+ * @typedef {object} PdfMetadata
59
+ * @property {string} [title]
60
+ * @property {string} [author]
61
+ * @property {string} [subject]
62
+ * @property {string} [keywords]
63
+ * @property {string} [creator]
64
+ * @property {Date} [creationDate]
65
+ */
66
+ /**
67
+ * 変換中に発生した非致命的な問題。例外にはせず onWarning に流す。
68
+ *
69
+ * @typedef {object} ConversionWarning
70
+ * @property {'unsupported-css'|'missing-font'|'missing-glyph'|'image-failed'|'other'} code
71
+ * @property {string} message
72
+ * @property {Element} [element]
73
+ * @property {string} [property] unsupported-css のときの CSS プロパティ名
74
+ * @property {string} [text] missing-glyph のときの該当文字
75
+ */
76
+ /**
77
+ * @typedef {object} ConvertOptions
78
+ * @property {PageOptions} [page]
79
+ * @property {string[]} [fontFallback] 未登録ファミリーが要求されたときに試す family の順序
80
+ * @property {'inherit'|'none'|string[]} [stylesheets='inherit'] 親文書のスタイルを継承するか、URL/CSS テキストを明示するか
81
+ * @property {boolean} [mediaPrint=false] `@media print` ルールを通常ルールとして適用する
82
+ * @property {boolean} [compress=true] CompressionStream が使えれば FlateDecode を適用する
83
+ * @property {PdfMetadata} [metadata]
84
+ * @property {string|null} [header=null] 各ページ上部の HTML テンプレート。{{pageNumber}} {{totalPages}} を置換する
85
+ * @property {string|null} [footer=null] 各ページ下部の HTML テンプレート。同上
86
+ * @property {'font'|'measure'|'auto'} [textMeasure='auto'] グリフ位置の決め方(現在は常に実測)
87
+ * @property {'blob'|'uint8array'|'dataurl'} [output='blob']
88
+ * @property {string} [baseUrl] 相対 URL(フォント・画像)の基準。既定は現在の文書
89
+ * @property {(warning: ConversionWarning) => void} [onWarning]
90
+ */
91
+ /**
92
+ * 変換の入力。DOM 要素、または HTML 文字列。
93
+ * @typedef {Element|string} ConvertInput
94
+ */
95
+ /** ライブラリのバージョン(package.json と同期) */
96
+ export const version: "0.1.0";
97
+ /**
98
+ * 登録するフォントの定義。
99
+ * `src` は TrueType アウトライン(glyf)を持つ静的 TTF のみ対応。
100
+ */
101
+ export type FontSource = {
102
+ /**
103
+ * CSS の font-family と一致させる名前
104
+ */
105
+ family: string;
106
+ /**
107
+ * 100〜900
108
+ */
109
+ weight?: number | undefined;
110
+ style?: "normal" | "italic" | undefined;
111
+ /**
112
+ * URL または フォントファイルのバイト列
113
+ */
114
+ src: string | ArrayBuffer | Uint8Array;
115
+ };
116
+ /**
117
+ * 用紙サイズ。既定名か、幅・高さを CSS 長さ('80mm' など)で指定する。
118
+ */
119
+ export type PageSize = "A3" | "A4" | "A5" | "B4" | "B5" | "Letter" | "Legal" | {
120
+ width: string;
121
+ height: string;
122
+ };
123
+ export type PageOptions = {
124
+ size?: PageSize | undefined;
125
+ orientation?: "portrait" | "landscape" | undefined;
126
+ margin?: string | {
127
+ top: string;
128
+ right: string;
129
+ bottom: string;
130
+ left: string;
131
+ } | undefined;
132
+ };
133
+ export type PdfMetadata = {
134
+ title?: string | undefined;
135
+ author?: string | undefined;
136
+ subject?: string | undefined;
137
+ keywords?: string | undefined;
138
+ creator?: string | undefined;
139
+ creationDate?: Date | undefined;
140
+ };
141
+ /**
142
+ * 変換中に発生した非致命的な問題。例外にはせず onWarning に流す。
143
+ */
144
+ export type ConversionWarning = {
145
+ code: "unsupported-css" | "missing-font" | "missing-glyph" | "image-failed" | "other";
146
+ message: string;
147
+ element?: Element | undefined;
148
+ /**
149
+ * unsupported-css のときの CSS プロパティ名
150
+ */
151
+ property?: string | undefined;
152
+ /**
153
+ * missing-glyph のときの該当文字
154
+ */
155
+ text?: string | undefined;
156
+ };
157
+ export type ConvertOptions = {
158
+ page?: PageOptions | undefined;
159
+ /**
160
+ * 未登録ファミリーが要求されたときに試す family の順序
161
+ */
162
+ fontFallback?: string[] | undefined;
163
+ /**
164
+ * 親文書のスタイルを継承するか、URL/CSS テキストを明示するか
165
+ */
166
+ stylesheets?: string[] | "inherit" | "none" | undefined;
167
+ /**
168
+ * `@media print` ルールを通常ルールとして適用する
169
+ */
170
+ mediaPrint?: boolean | undefined;
171
+ /**
172
+ * CompressionStream が使えれば FlateDecode を適用する
173
+ */
174
+ compress?: boolean | undefined;
175
+ metadata?: PdfMetadata | undefined;
176
+ /**
177
+ * 各ページ上部の HTML テンプレート。{{pageNumber}} {{totalPages}} を置換する
178
+ */
179
+ header?: string | null | undefined;
180
+ /**
181
+ * 各ページ下部の HTML テンプレート。同上
182
+ */
183
+ footer?: string | null | undefined;
184
+ /**
185
+ * グリフ位置の決め方(現在は常に実測)
186
+ */
187
+ textMeasure?: "font" | "measure" | "auto" | undefined;
188
+ output?: "blob" | "uint8array" | "dataurl" | undefined;
189
+ /**
190
+ * 相対 URL(フォント・画像)の基準。既定は現在の文書
191
+ */
192
+ baseUrl?: string | undefined;
193
+ onWarning?: ((warning: ConversionWarning) => void) | undefined;
194
+ };
195
+ /**
196
+ * 変換の入力。DOM 要素、または HTML 文字列。
197
+ */
198
+ export type ConvertInput = Element | string;
@@ -0,0 +1,64 @@
1
+ /**
2
+ * @typedef {object} PageGeometry
3
+ * @property {number} width pt
4
+ * @property {number} height pt
5
+ * @property {number} top pt 上余白
6
+ * @property {number} right pt
7
+ * @property {number} bottom pt 下余白
8
+ * @property {number} left pt
9
+ */
10
+ /**
11
+ * @typedef {object} PageDecoration ヘッダー/フッター(ページごとに描画済みの走査結果)
12
+ * @property {number} heightPx
13
+ * @property {(pageNumber: number, totalPages: number) => Promise<import('./walker/walk.js').WalkResult>} render
14
+ */
15
+ /**
16
+ * @param {import('./index.js').PageOptions|undefined} page
17
+ * @returns {PageGeometry}
18
+ */
19
+ export function resolvePage(page?: import("./index.js").PageOptions | undefined): PageGeometry;
20
+ /**
21
+ * @param {import('./walker/walk.js').WalkResult} body
22
+ * @param {PageGeometry} geo
23
+ * @param {{compress: boolean, metadata?: import('./index.js').PdfMetadata, header?: PageDecoration|null, footer?: PageDecoration|null}} opts
24
+ * @returns {Promise<Uint8Array>}
25
+ */
26
+ export function buildPdf(body: import("./walker/walk.js").WalkResult, geo: PageGeometry, opts: {
27
+ compress: boolean;
28
+ metadata?: import("./index.js").PdfMetadata;
29
+ header?: PageDecoration | null;
30
+ footer?: PageDecoration | null;
31
+ }): Promise<Uint8Array>;
32
+ export type PageGeometry = {
33
+ /**
34
+ * pt
35
+ */
36
+ width: number;
37
+ /**
38
+ * pt
39
+ */
40
+ height: number;
41
+ /**
42
+ * pt 上余白
43
+ */
44
+ top: number;
45
+ /**
46
+ * pt
47
+ */
48
+ right: number;
49
+ /**
50
+ * pt 下余白
51
+ */
52
+ bottom: number;
53
+ /**
54
+ * pt
55
+ */
56
+ left: number;
57
+ };
58
+ /**
59
+ * ヘッダー/フッター(ページごとに描画済みの走査結果)
60
+ */
61
+ export type PageDecoration = {
62
+ heightPx: number;
63
+ render: (pageNumber: number, totalPages: number) => Promise<import("./walker/walk.js").WalkResult>;
64
+ };
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Paginator — 走査結果(アトム・強制改ページ・テーブル)から各ページの縦範囲を決める。
3
+ *
4
+ * 方針: 命令は動かさず、ページごとに「この y 範囲を描く」と決めるだけにする。
5
+ * 境界は、アトム(テキスト行・表の行・画像・break-inside: avoid)を跨がない位置まで上へ戻す。
6
+ * テーブルが次ページへ続くときは thead を各ページ先頭で繰り返し、その高さ分だけ本文を下げる。
7
+ */
8
+ /**
9
+ * @typedef {object} RepeatedHead
10
+ * @property {import('./walker/walk.js').TableInfo} table
11
+ * @property {number} shift このページで thead を描く位置(ページ先頭からの px オフセット)
12
+ *
13
+ * @typedef {object} PageRange
14
+ * @property {number} start 本文の描き始め y(ドキュメント px)
15
+ * @property {number} end 本文の描き終わり y(この値未満を描く)
16
+ * @property {RepeatedHead[]} heads ページ先頭で繰り返す thead
17
+ * @property {number} headShift 繰り返し thead の合計高さ(本文はこの分だけ下がる)
18
+ * @property {RepeatedHead[]} feet ページ末尾で繰り返す tfoot(表が次ページへ続くとき)
19
+ * @property {number} footShift 繰り返し tfoot の合計高さ(本文領域はこの分だけ縮む)
20
+ */
21
+ /**
22
+ * @param {import('./walker/walk.js').WalkResult} walk
23
+ * @param {number} pageHeightPx 本文領域の高さ(px)
24
+ * @returns {PageRange[]}
25
+ */
26
+ export function paginate(walk: import("./walker/walk.js").WalkResult, pageHeightPx: number): PageRange[];
27
+ export type RepeatedHead = {
28
+ table: import("./walker/walk.js").TableInfo;
29
+ /**
30
+ * このページで thead を描く位置(ページ先頭からの px オフセット)
31
+ */
32
+ shift: number;
33
+ };
34
+ export type PageRange = {
35
+ /**
36
+ * 本文の描き始め y(ドキュメント px)
37
+ */
38
+ start: number;
39
+ /**
40
+ * 本文の描き終わり y(この値未満を描く)
41
+ */
42
+ end: number;
43
+ /**
44
+ * ページ先頭で繰り返す thead
45
+ */
46
+ heads: RepeatedHead[];
47
+ /**
48
+ * 繰り返し thead の合計高さ(本文はこの分だけ下がる)
49
+ */
50
+ headShift: number;
51
+ /**
52
+ * ページ末尾で繰り返す tfoot(表が次ページへ続くとき)
53
+ */
54
+ feet: RepeatedHead[];
55
+ /**
56
+ * 繰り返し tfoot の合計高さ(本文領域はこの分だけ縮む)
57
+ */
58
+ footShift: number;
59
+ };
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Web 標準 CompressionStream による zlib (FlateDecode) 圧縮。
3
+ * 未対応環境では null を返し、呼び出し側は無圧縮で出力する。
4
+ */
5
+ /**
6
+ * @returns {boolean}
7
+ */
8
+ export function canCompress(): boolean;
9
+ /**
10
+ * @param {Uint8Array} bytes
11
+ * @returns {Promise<Uint8Array|null>} zlib 形式(PDF の FlateDecode が期待する形式)
12
+ */
13
+ export function deflate(bytes: Uint8Array): Promise<Uint8Array | null>;
@@ -0,0 +1,65 @@
1
+ export class ContentStream {
2
+ /** @type {string[]} */
3
+ ops: string[];
4
+ depth: number;
5
+ save(): this;
6
+ restore(): this;
7
+ /** @param {number} a @param {number} b @param {number} c @param {number} d @param {number} e @param {number} f */
8
+ transform(a: number, b: number, c: number, d: number, e: number, f: number): this;
9
+ /** @param {string} gsName ExtGState リソース名 */
10
+ setGState(gsName: string): this;
11
+ /** @param {number} r @param {number} g @param {number} b */
12
+ fillColor(r: number, g: number, b: number): this;
13
+ /** @param {number} r @param {number} g @param {number} b */
14
+ strokeColor(r: number, g: number, b: number): this;
15
+ /** @param {number} w */
16
+ lineWidth(w: number): this;
17
+ /** @param {number[]} pattern @param {number} [phase] */
18
+ dash(pattern: number[], phase?: number): this;
19
+ /** @param {0|1|2} cap */
20
+ lineCap(cap: 0 | 1 | 2): this;
21
+ /** @param {number} x @param {number} y @param {number} w @param {number} h */
22
+ rect(x: number, y: number, w: number, h: number): this;
23
+ /** @param {number} x @param {number} y */
24
+ moveTo(x: number, y: number): this;
25
+ /** @param {number} x @param {number} y */
26
+ lineTo(x: number, y: number): this;
27
+ /**
28
+ * 3 次ベジェ曲線
29
+ * @param {number} x1 @param {number} y1 @param {number} x2 @param {number} y2 @param {number} x3 @param {number} y3
30
+ */
31
+ curveTo(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number): this;
32
+ closePath(): this;
33
+ /**
34
+ * 角丸矩形のパスを追加する(PDF 座標: y 上向き、(x, y) は左下)。
35
+ * @param {number} x @param {number} y @param {number} w @param {number} h
36
+ * @param {[number, number, number, number]} r [左上, 右上, 右下, 左下] の半径(pt)。CSS の順序
37
+ */
38
+ roundedRect(x: number, y: number, w: number, h: number, r: [number, number, number, number]): this;
39
+ /**
40
+ * 画像 XObject を (x, y) を左下として w×h で描く。
41
+ * @param {string} name @param {number} x @param {number} y @param {number} w @param {number} h
42
+ */
43
+ image(name: string, x: number, y: number, w: number, h: number): this;
44
+ fill(): this;
45
+ stroke(): this;
46
+ /** 現在のパスでクリップして新しいパスを開始する */
47
+ clip(): this;
48
+ /** @param {number} x @param {number} y @param {number} w @param {number} h */
49
+ fillRect(x: number, y: number, w: number, h: number): this;
50
+ /**
51
+ * テキストを描画する。
52
+ * @param {string} fontName リソース名(F1 など)
53
+ * @param {number} size フォントサイズ (pt)
54
+ * @param {number} x ベースライン始点 x (pt)
55
+ * @param {number} y ベースライン y (pt)
56
+ * @param {Array<string|number>} tj TJ 配列。文字列は 16 進 CID 列(<...> なし)、数値は 1/1000 単位の位置調整
57
+ * @param {{charSpacing?: number, rise?: number}} [opts]
58
+ */
59
+ text(fontName: string, size: number, x: number, y: number, tj: Array<string | number>, opts?: {
60
+ charSpacing?: number;
61
+ rise?: number;
62
+ }): this;
63
+ /** @returns {Uint8Array} */
64
+ toBytes(): Uint8Array;
65
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * デコード済み画像を PDF の Image XObject として書き出す。
3
+ */
4
+ /**
5
+ * @param {import('../pdf/writer.js').PdfWriter} writer
6
+ * @param {import('../walker/image.js').DecodedImage} img
7
+ * @returns {Promise<import('../pdf/writer.js').Ref>}
8
+ */
9
+ export function embedImage(writer: import("../pdf/writer.js").PdfWriter, img: import("../walker/image.js").DecodedImage): Promise<import("../pdf/writer.js").Ref>;