@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.
- package/CHANGELOG.md +44 -0
- package/LICENSE +21 -0
- package/README.md +109 -0
- package/dist/receipt-html-to-pdf.min.js +39 -0
- package/dist/receipt-html-to-pdf.min.js.map +7 -0
- package/examples/lit.js +52 -0
- package/examples/react.jsx +56 -0
- package/examples/vanilla.html +55 -0
- package/package.json +82 -0
- package/src/font/cid.js +187 -0
- package/src/font/parse.js +336 -0
- package/src/font/registry.js +168 -0
- package/src/font/subset.js +211 -0
- package/src/index.js +239 -0
- package/src/page.js +429 -0
- package/src/paginate.js +119 -0
- package/src/pdf/compress.js +30 -0
- package/src/pdf/content.js +192 -0
- package/src/pdf/image.js +33 -0
- package/src/pdf/writer.js +253 -0
- package/src/renderer.js +328 -0
- package/src/units.js +127 -0
- package/src/walker/image.js +264 -0
- package/src/walker/text.js +199 -0
- package/src/walker/walk.js +670 -0
- package/types/font/cid.d.ts +40 -0
- package/types/font/parse.d.ts +113 -0
- package/types/font/registry.d.ts +63 -0
- package/types/font/subset.d.ts +26 -0
- package/types/index.d.ts +198 -0
- package/types/page.d.ts +64 -0
- package/types/paginate.d.ts +59 -0
- package/types/pdf/compress.d.ts +13 -0
- package/types/pdf/content.d.ts +65 -0
- package/types/pdf/image.d.ts +9 -0
- package/types/pdf/writer.d.ts +125 -0
- package/types/renderer.d.ts +55 -0
- package/types/units.d.ts +53 -0
- package/types/walker/image.d.ts +72 -0
- package/types/walker/text.d.ts +38 -0
- package/types/walker/walk.d.ts +150 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PDF テキスト文字列。ASCII のみならリテラル文字列、そうでなければ UTF-16BE (BOM 付き) の 16 進文字列。
|
|
3
|
+
* @param {string} s
|
|
4
|
+
* @returns {Raw}
|
|
5
|
+
*/
|
|
6
|
+
export function pdfString(s: string): Raw;
|
|
7
|
+
/**
|
|
8
|
+
* PDF 日付文字列 (D:YYYYMMDDHHmmSS+HH'mm')
|
|
9
|
+
* @param {Date} d
|
|
10
|
+
* @returns {Raw}
|
|
11
|
+
*/
|
|
12
|
+
export function pdfDate(d: Date): Raw;
|
|
13
|
+
/**
|
|
14
|
+
* @typedef {number|string|boolean|null|Ref|Name|Raw|PdfArray|PdfDict} PdfValue
|
|
15
|
+
*/
|
|
16
|
+
/** @typedef {PdfValue[]} PdfArray */
|
|
17
|
+
/** @typedef {{[key: string]: PdfValue}} PdfDict */
|
|
18
|
+
/**
|
|
19
|
+
* 値を PDF 構文にシリアライズする。
|
|
20
|
+
* - number → 数値、boolean → true/false、null → null
|
|
21
|
+
* - string → 名前 (/Foo)。テキスト文字列は pdfString() で Raw にして渡す
|
|
22
|
+
* - 配列 → [ ... ]、プレーンオブジェクト → << /Key value ... >>
|
|
23
|
+
* @param {PdfValue} v
|
|
24
|
+
* @returns {string}
|
|
25
|
+
*/
|
|
26
|
+
export function serialize(v: PdfValue): string;
|
|
27
|
+
/**
|
|
28
|
+
* @param {Uint8Array[]} chunks
|
|
29
|
+
* @returns {Uint8Array}
|
|
30
|
+
*/
|
|
31
|
+
export function concat(chunks: Uint8Array[]): Uint8Array;
|
|
32
|
+
/** 間接オブジェクト参照 */
|
|
33
|
+
export class Ref {
|
|
34
|
+
/** @param {number} id */
|
|
35
|
+
constructor(id: number);
|
|
36
|
+
id: number;
|
|
37
|
+
toString(): string;
|
|
38
|
+
}
|
|
39
|
+
/** PDF 名前オブジェクト(/Name) */
|
|
40
|
+
export class Name {
|
|
41
|
+
/** @param {string} name */
|
|
42
|
+
constructor(name: string);
|
|
43
|
+
name: string;
|
|
44
|
+
toString(): string;
|
|
45
|
+
}
|
|
46
|
+
/** バイト列そのまま(既にシリアライズ済みの断片) */
|
|
47
|
+
export class Raw {
|
|
48
|
+
/** @param {string} text */
|
|
49
|
+
constructor(text: string);
|
|
50
|
+
text: string;
|
|
51
|
+
toString(): string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* @typedef {object} PdfObject
|
|
55
|
+
* @property {PdfValue} value
|
|
56
|
+
* @property {Uint8Array} [stream]
|
|
57
|
+
*/
|
|
58
|
+
export class PdfWriter {
|
|
59
|
+
/**
|
|
60
|
+
* @param {{compress?: boolean, version?: string}} [options]
|
|
61
|
+
*/
|
|
62
|
+
constructor(options?: {
|
|
63
|
+
compress?: boolean;
|
|
64
|
+
version?: string;
|
|
65
|
+
});
|
|
66
|
+
/** @type {(PdfObject|null)[]} 0 番はフリーオブジェクト */
|
|
67
|
+
objects: (PdfObject | null)[];
|
|
68
|
+
compress: boolean;
|
|
69
|
+
version: string;
|
|
70
|
+
/**
|
|
71
|
+
* 間接オブジェクトを予約する(後で set で中身を入れる)。
|
|
72
|
+
* @returns {Ref}
|
|
73
|
+
*/
|
|
74
|
+
reserve(): Ref;
|
|
75
|
+
/**
|
|
76
|
+
* @param {Ref} ref
|
|
77
|
+
* @param {PdfValue} value
|
|
78
|
+
* @param {Uint8Array} [stream]
|
|
79
|
+
*/
|
|
80
|
+
set(ref: Ref, value: PdfValue, stream?: Uint8Array): void;
|
|
81
|
+
/**
|
|
82
|
+
* @param {PdfValue} value
|
|
83
|
+
* @returns {Ref}
|
|
84
|
+
*/
|
|
85
|
+
add(value: PdfValue): Ref;
|
|
86
|
+
/**
|
|
87
|
+
* ストリームオブジェクトを追加する。compress が有効なら FlateDecode を試みる。
|
|
88
|
+
* @param {{[key: string]: PdfValue}} dict
|
|
89
|
+
* @param {Uint8Array} bytes
|
|
90
|
+
* @param {{compress?: boolean}} [opts]
|
|
91
|
+
* @returns {Promise<Ref>}
|
|
92
|
+
*/
|
|
93
|
+
addStream(dict: {
|
|
94
|
+
[key: string]: PdfValue;
|
|
95
|
+
}, bytes: Uint8Array, opts?: {
|
|
96
|
+
compress?: boolean;
|
|
97
|
+
}): Promise<Ref>;
|
|
98
|
+
/**
|
|
99
|
+
* @param {Ref} ref
|
|
100
|
+
* @param {{[key: string]: PdfValue}} dict
|
|
101
|
+
* @param {Uint8Array} bytes
|
|
102
|
+
* @param {{compress?: boolean}} [opts]
|
|
103
|
+
*/
|
|
104
|
+
setStream(ref: Ref, dict: {
|
|
105
|
+
[key: string]: PdfValue;
|
|
106
|
+
}, bytes: Uint8Array, opts?: {
|
|
107
|
+
compress?: boolean;
|
|
108
|
+
}): Promise<void>;
|
|
109
|
+
/**
|
|
110
|
+
* ドキュメント全体を組み立てる。
|
|
111
|
+
* @param {Ref} rootRef /Catalog への参照
|
|
112
|
+
* @param {Ref} [infoRef] /Info への参照
|
|
113
|
+
* @returns {Uint8Array}
|
|
114
|
+
*/
|
|
115
|
+
build(rootRef: Ref, infoRef?: Ref): Uint8Array;
|
|
116
|
+
}
|
|
117
|
+
export type PdfValue = number | string | boolean | null | Ref | Name | Raw | PdfArray | PdfDict;
|
|
118
|
+
export type PdfArray = PdfValue[];
|
|
119
|
+
export type PdfDict = {
|
|
120
|
+
[key: string]: PdfValue;
|
|
121
|
+
};
|
|
122
|
+
export type PdfObject = {
|
|
123
|
+
value: PdfValue;
|
|
124
|
+
stream?: Uint8Array<ArrayBufferLike> | undefined;
|
|
125
|
+
};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 非表示 iframe に HTML を描画し、レイアウト計測可能な Document を用意する。
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* @typedef {object} RenderedDocument
|
|
6
|
+
* @property {HTMLIFrameElement} iframe
|
|
7
|
+
* @property {Document} doc
|
|
8
|
+
* @property {Window} win
|
|
9
|
+
* @property {HTMLElement} root 走査の起点(body)
|
|
10
|
+
* @property {() => void} destroy
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* @param {import('./index.js').ConvertInput} input
|
|
14
|
+
* @param {{widthPx: number, stylesheets: 'inherit'|'none'|string[], mediaPrint: boolean, baseUrl?: string, warn?: (w: import('./index.js').ConversionWarning) => void}} opts
|
|
15
|
+
* @returns {Promise<RenderedDocument>}
|
|
16
|
+
*/
|
|
17
|
+
export function renderDocument(input: import("./index.js").ConvertInput, opts: {
|
|
18
|
+
widthPx: number;
|
|
19
|
+
stylesheets: "inherit" | "none" | string[];
|
|
20
|
+
mediaPrint: boolean;
|
|
21
|
+
baseUrl?: string;
|
|
22
|
+
warn?: (w: import("./index.js").ConversionWarning) => void;
|
|
23
|
+
}): Promise<RenderedDocument>;
|
|
24
|
+
/**
|
|
25
|
+
* `@media print { ... }` ブロックを通常ルールとして展開し、`@media screen { ... }` を除去する。
|
|
26
|
+
* 単純な括弧の対応で処理する(ネストした @media は想定しない)。
|
|
27
|
+
* @param {string} css
|
|
28
|
+
* @returns {string}
|
|
29
|
+
*/
|
|
30
|
+
export function expandPrintMediaCss(css: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* ::before / ::after を実体の <span> に置き換える。
|
|
33
|
+
* 擬似要素は DOM ノードを持たず Range で計測できないため、computed style をすべて写した span を
|
|
34
|
+
* 同じ位置に挿入し、元の擬似要素は content: none で消す。文字列 content のみ対応(counter / url は警告)。
|
|
35
|
+
* @param {Document} doc
|
|
36
|
+
* @param {(w: import('./index.js').ConversionWarning) => void} warn
|
|
37
|
+
*/
|
|
38
|
+
export function materializePseudoElements(doc: Document, warn: (w: import("./index.js").ConversionWarning) => void): void;
|
|
39
|
+
/**
|
|
40
|
+
* computed content 値('"※ "' / '"a" "b"' / 'counter(x)' …)から文字列を取り出す。
|
|
41
|
+
* 文字列以外のトークンが含まれる場合は null。
|
|
42
|
+
* @param {string} value
|
|
43
|
+
* @returns {string|null}
|
|
44
|
+
*/
|
|
45
|
+
export function parseContentString(value: string): string | null;
|
|
46
|
+
export type RenderedDocument = {
|
|
47
|
+
iframe: HTMLIFrameElement;
|
|
48
|
+
doc: Document;
|
|
49
|
+
win: Window;
|
|
50
|
+
/**
|
|
51
|
+
* 走査の起点(body)
|
|
52
|
+
*/
|
|
53
|
+
root: HTMLElement;
|
|
54
|
+
destroy: () => void;
|
|
55
|
+
};
|
package/types/units.d.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CSS 長さ文字列('15mm', '1in', '12pt', '100px', '2cm')を pt に変換する。
|
|
3
|
+
* 単位なしの数値は px とみなす。
|
|
4
|
+
* @param {string|number} value
|
|
5
|
+
* @returns {number}
|
|
6
|
+
*/
|
|
7
|
+
export function lengthToPt(value: string | number): number;
|
|
8
|
+
/** @param {number} pt @returns {number} */
|
|
9
|
+
export function ptToPx(pt: number): number;
|
|
10
|
+
/**
|
|
11
|
+
* getComputedStyle が返す px 文字列('12px')を数値にする。
|
|
12
|
+
* @param {string} value
|
|
13
|
+
* @returns {number}
|
|
14
|
+
*/
|
|
15
|
+
export function cssPx(value: string): number;
|
|
16
|
+
/**
|
|
17
|
+
* @typedef {{r: number, g: number, b: number, a: number}} Rgba 各成分 0〜1
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* getComputedStyle の色文字列('rgb(34, 34, 34)' / 'rgba(0, 0, 0, 0.5)' / 'transparent'
|
|
21
|
+
* / 'color(srgb ...)')をパースする。パースできない場合は null。
|
|
22
|
+
* @param {string} value
|
|
23
|
+
* @returns {Rgba|null}
|
|
24
|
+
*/
|
|
25
|
+
export function parseColor(value: string): Rgba | null;
|
|
26
|
+
/**
|
|
27
|
+
* PDF 用に数値を丸めて文字列化する(小数第 3 位まで、末尾ゼロ除去)。
|
|
28
|
+
* @param {number} n
|
|
29
|
+
* @returns {string}
|
|
30
|
+
*/
|
|
31
|
+
export function num(n: number): string;
|
|
32
|
+
/**
|
|
33
|
+
* 単位・色の変換ユーティリティ。
|
|
34
|
+
* 内部座標は CSS px(ブラウザ計測値)で持ち、PDF 出力時に pt へ変換する。
|
|
35
|
+
*/
|
|
36
|
+
/** 1 CSS px = 0.75 pt(96dpi 基準) */
|
|
37
|
+
export const PX_TO_PT: 0.75;
|
|
38
|
+
/** 1 mm = 72 / 25.4 pt */
|
|
39
|
+
export const MM_TO_PT: number;
|
|
40
|
+
/** @type {Record<string, {width: number, height: number}>} 用紙サイズ(pt) */
|
|
41
|
+
export const PAGE_SIZES: Record<string, {
|
|
42
|
+
width: number;
|
|
43
|
+
height: number;
|
|
44
|
+
}>;
|
|
45
|
+
/**
|
|
46
|
+
* 各成分 0〜1
|
|
47
|
+
*/
|
|
48
|
+
export type Rgba = {
|
|
49
|
+
r: number;
|
|
50
|
+
g: number;
|
|
51
|
+
b: number;
|
|
52
|
+
a: number;
|
|
53
|
+
};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param {string} url 絶対 URL(img.currentSrc または background-image の url())
|
|
3
|
+
* @param {(w: import('../index.js').ConversionWarning) => void} warn
|
|
4
|
+
* @param {Element} [element]
|
|
5
|
+
* @returns {Promise<DecodedImage|null>}
|
|
6
|
+
*/
|
|
7
|
+
export function loadImage(url: string, warn: (w: import("../index.js").ConversionWarning) => void, element?: Element): Promise<DecodedImage | null>;
|
|
8
|
+
/**
|
|
9
|
+
* JPEG の SOF マーカーから寸法と成分数を読む。
|
|
10
|
+
* @param {Uint8Array} b
|
|
11
|
+
* @returns {{width: number, height: number, components: number}|null}
|
|
12
|
+
*/
|
|
13
|
+
export function jpegDimensions(b: Uint8Array): {
|
|
14
|
+
width: number;
|
|
15
|
+
height: number;
|
|
16
|
+
components: number;
|
|
17
|
+
} | null;
|
|
18
|
+
/**
|
|
19
|
+
* computed background-image の `url("...")` を取り出す。複数指定・グラデーションは null。
|
|
20
|
+
* @param {string} value
|
|
21
|
+
* @returns {string|null}
|
|
22
|
+
*/
|
|
23
|
+
export function parseBackgroundUrl(value: string): string | null;
|
|
24
|
+
/**
|
|
25
|
+
* background-size / background-position / object-fit / object-position から描画矩形を計算する。
|
|
26
|
+
* @param {{x: number, y: number, w: number, h: number}} box 描画領域(px)
|
|
27
|
+
* @param {number} iw 画像の固有幅
|
|
28
|
+
* @param {number} ih
|
|
29
|
+
* @param {string} size 'auto' | 'cover' | 'contain' | '<w> <h>'(computed 値、px または %)
|
|
30
|
+
* @param {string} position '0% 0%' | '50% 50%' | '10px 20px' …(computed 値、2 値)
|
|
31
|
+
* @returns {{x: number, y: number, w: number, h: number}}
|
|
32
|
+
*/
|
|
33
|
+
export function fitImage(box: {
|
|
34
|
+
x: number;
|
|
35
|
+
y: number;
|
|
36
|
+
w: number;
|
|
37
|
+
h: number;
|
|
38
|
+
}, iw: number, ih: number, size: string, position: string): {
|
|
39
|
+
x: number;
|
|
40
|
+
y: number;
|
|
41
|
+
w: number;
|
|
42
|
+
h: number;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* object-fit を background-size 相当の値に変換する。
|
|
46
|
+
* @param {string} fit
|
|
47
|
+
* @returns {string}
|
|
48
|
+
*/
|
|
49
|
+
export function objectFitToSize(fit: string): string;
|
|
50
|
+
export type DecodedImage = {
|
|
51
|
+
/**
|
|
52
|
+
* 重複排除キー(URL)
|
|
53
|
+
*/
|
|
54
|
+
key: string;
|
|
55
|
+
/**
|
|
56
|
+
* ピクセル
|
|
57
|
+
*/
|
|
58
|
+
width: number;
|
|
59
|
+
height: number;
|
|
60
|
+
/**
|
|
61
|
+
* JPEG の生バイト列(DCTDecode)
|
|
62
|
+
*/
|
|
63
|
+
jpeg: Uint8Array | null;
|
|
64
|
+
/**
|
|
65
|
+
* 幅×高さ×3
|
|
66
|
+
*/
|
|
67
|
+
rgb: Uint8Array | null;
|
|
68
|
+
/**
|
|
69
|
+
* 幅×高さ(完全不透明なら null)
|
|
70
|
+
*/
|
|
71
|
+
alpha: Uint8Array | null;
|
|
72
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param {Text} node
|
|
3
|
+
* @param {CSSStyleDeclaration} style
|
|
4
|
+
* @param {MeasureOptions} o
|
|
5
|
+
* @returns {MeasuredLine[]}
|
|
6
|
+
*/
|
|
7
|
+
export function measureText(node: Text, style: CSSStyleDeclaration, o: MeasureOptions): MeasuredLine[];
|
|
8
|
+
export type MeasuredLine = {
|
|
9
|
+
font: import("../font/registry.js").RegisteredFont;
|
|
10
|
+
/**
|
|
11
|
+
* ベースライン y(ビューポート座標 px)
|
|
12
|
+
*/
|
|
13
|
+
baseline: number;
|
|
14
|
+
/**
|
|
15
|
+
* 行内グリフ矩形の上端
|
|
16
|
+
*/
|
|
17
|
+
top: number;
|
|
18
|
+
/**
|
|
19
|
+
* 行内グリフ矩形の下端
|
|
20
|
+
*/
|
|
21
|
+
bottom: number;
|
|
22
|
+
glyphs: import("./walk.js").Glyph[];
|
|
23
|
+
};
|
|
24
|
+
export type MeasureOptions = {
|
|
25
|
+
registry: import("../font/registry.js").FontRegistry;
|
|
26
|
+
families: string[];
|
|
27
|
+
fallback: string[];
|
|
28
|
+
primary: import("../font/registry.js").RegisteredFont;
|
|
29
|
+
weight: number;
|
|
30
|
+
fstyle: "normal" | "italic";
|
|
31
|
+
/**
|
|
32
|
+
* px
|
|
33
|
+
*/
|
|
34
|
+
size: number;
|
|
35
|
+
textMeasure: "font" | "measure" | "auto";
|
|
36
|
+
warn: (w: import("../index.js").ConversionWarning) => void;
|
|
37
|
+
element: Element;
|
|
38
|
+
};
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param {HTMLElement} root
|
|
3
|
+
* @param {WalkContext} ctx
|
|
4
|
+
* @returns {Promise<WalkResult>}
|
|
5
|
+
*/
|
|
6
|
+
export function walk(root: HTMLElement, ctx: WalkContext): Promise<WalkResult>;
|
|
7
|
+
/**
|
|
8
|
+
* computed transform('matrix(a, b, c, d, e, f)')を解析する。none / 3D は null。
|
|
9
|
+
* @param {string} value
|
|
10
|
+
* @returns {[number, number, number, number, number, number]|null}
|
|
11
|
+
*/
|
|
12
|
+
export function parseTransform(value: string): [number, number, number, number, number, number] | null;
|
|
13
|
+
export type Rgba = import("../units.js").Rgba;
|
|
14
|
+
/**
|
|
15
|
+
* [左上, 右上, 右下, 左下] px
|
|
16
|
+
*/
|
|
17
|
+
export type Radius = [number, number, number, number];
|
|
18
|
+
export type Box = {
|
|
19
|
+
x: number;
|
|
20
|
+
y: number;
|
|
21
|
+
w: number;
|
|
22
|
+
h: number;
|
|
23
|
+
radius?: Radius;
|
|
24
|
+
};
|
|
25
|
+
export type RectItem = {
|
|
26
|
+
type: "rect";
|
|
27
|
+
x: number;
|
|
28
|
+
y: number;
|
|
29
|
+
w: number;
|
|
30
|
+
h: number;
|
|
31
|
+
color: Rgba;
|
|
32
|
+
radius?: Radius;
|
|
33
|
+
z: number;
|
|
34
|
+
seq: number;
|
|
35
|
+
};
|
|
36
|
+
export type LineItem = {
|
|
37
|
+
type: "line";
|
|
38
|
+
x1: number;
|
|
39
|
+
y1: number;
|
|
40
|
+
x2: number;
|
|
41
|
+
y2: number;
|
|
42
|
+
width: number;
|
|
43
|
+
color: Rgba;
|
|
44
|
+
dash: number[] | null;
|
|
45
|
+
z: number;
|
|
46
|
+
seq: number;
|
|
47
|
+
};
|
|
48
|
+
export type StrokeRRectItem = {
|
|
49
|
+
type: "stroke-rrect";
|
|
50
|
+
x: number;
|
|
51
|
+
y: number;
|
|
52
|
+
w: number;
|
|
53
|
+
h: number;
|
|
54
|
+
radius: Radius;
|
|
55
|
+
width: number;
|
|
56
|
+
color: Rgba;
|
|
57
|
+
dash: number[] | null;
|
|
58
|
+
z: number;
|
|
59
|
+
seq: number;
|
|
60
|
+
};
|
|
61
|
+
export type ImageItem = {
|
|
62
|
+
type: "image";
|
|
63
|
+
x: number;
|
|
64
|
+
y: number;
|
|
65
|
+
w: number;
|
|
66
|
+
h: number;
|
|
67
|
+
image: import("./image.js").DecodedImage;
|
|
68
|
+
clip: Box | null;
|
|
69
|
+
alpha: number;
|
|
70
|
+
z: number;
|
|
71
|
+
seq: number;
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* advance は px
|
|
75
|
+
*/
|
|
76
|
+
export type Glyph = {
|
|
77
|
+
gid: number;
|
|
78
|
+
cp: number;
|
|
79
|
+
x: number;
|
|
80
|
+
advance: number;
|
|
81
|
+
};
|
|
82
|
+
export type TextItem = {
|
|
83
|
+
type: "text";
|
|
84
|
+
x: number;
|
|
85
|
+
y: number;
|
|
86
|
+
top: number;
|
|
87
|
+
bottom: number;
|
|
88
|
+
size: number;
|
|
89
|
+
color: Rgba;
|
|
90
|
+
font: import("../font/registry.js").RegisteredFont;
|
|
91
|
+
glyphs: Glyph[];
|
|
92
|
+
z: number;
|
|
93
|
+
seq: number;
|
|
94
|
+
};
|
|
95
|
+
export type GroupItem = {
|
|
96
|
+
type: "group";
|
|
97
|
+
matrix: [number, number, number, number, number, number];
|
|
98
|
+
origin: {
|
|
99
|
+
x: number;
|
|
100
|
+
y: number;
|
|
101
|
+
};
|
|
102
|
+
items: DisplayItem[];
|
|
103
|
+
top: number;
|
|
104
|
+
bottom: number;
|
|
105
|
+
z: number;
|
|
106
|
+
seq: number;
|
|
107
|
+
};
|
|
108
|
+
/**
|
|
109
|
+
* overflow: hidden
|
|
110
|
+
*/
|
|
111
|
+
export type ClipItem = {
|
|
112
|
+
type: "clip";
|
|
113
|
+
box: Box;
|
|
114
|
+
items: DisplayItem[];
|
|
115
|
+
top: number;
|
|
116
|
+
bottom: number;
|
|
117
|
+
z: number;
|
|
118
|
+
seq: number;
|
|
119
|
+
};
|
|
120
|
+
export type DisplayItem = RectItem | LineItem | StrokeRRectItem | ImageItem | TextItem | GroupItem | ClipItem;
|
|
121
|
+
/**
|
|
122
|
+
* ページ境界を跨いではいけない縦範囲(行・表の行・画像・break-inside: avoid)
|
|
123
|
+
*/
|
|
124
|
+
export type Atom = {
|
|
125
|
+
top: number;
|
|
126
|
+
bottom: number;
|
|
127
|
+
};
|
|
128
|
+
export type TableInfo = {
|
|
129
|
+
top: number;
|
|
130
|
+
bottom: number;
|
|
131
|
+
headTop: number;
|
|
132
|
+
headBottom: number;
|
|
133
|
+
headItems: DisplayItem[];
|
|
134
|
+
footTop: number;
|
|
135
|
+
footBottom: number;
|
|
136
|
+
footItems: DisplayItem[];
|
|
137
|
+
};
|
|
138
|
+
export type WalkResult = {
|
|
139
|
+
items: DisplayItem[];
|
|
140
|
+
atoms: Atom[];
|
|
141
|
+
breaks: number[];
|
|
142
|
+
tables: TableInfo[];
|
|
143
|
+
height: number;
|
|
144
|
+
};
|
|
145
|
+
export type WalkContext = {
|
|
146
|
+
registry: import("../font/registry.js").FontRegistry;
|
|
147
|
+
fontFallback: string[];
|
|
148
|
+
warn: (w: import("../index.js").ConversionWarning) => void;
|
|
149
|
+
textMeasure: "font" | "measure" | "auto";
|
|
150
|
+
};
|