@hidemikimura/receipt-html-to-pdf 0.2.0 → 0.3.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.
@@ -47,6 +47,42 @@ export function fitImage(box: {
47
47
  * @returns {string}
48
48
  */
49
49
  export function objectFitToSize(fit: string): string;
50
+ /**
51
+ * `background-repeat` の computed 値を軸ごとに分ける。
52
+ * `repeat-x` / `repeat-y` は 2 値表記に展開する。
53
+ * @param {string} value
54
+ * @returns {['repeat'|'no-repeat'|'space'|'round', 'repeat'|'no-repeat'|'space'|'round']}
55
+ */
56
+ export function splitRepeat(value: string): ["repeat" | "no-repeat" | "space" | "round", "repeat" | "no-repeat" | "space" | "round"];
57
+ /**
58
+ * 1 軸ぶんのタイル位置を求める。
59
+ *
60
+ * - `repeat`: 指定位置を基準に、描画領域を覆うまで両方向へ並べる
61
+ * - `no-repeat`: 指定位置に 1 枚
62
+ * - `round`: 描画領域に整数個収まるようタイルの大きさを調整して並べる(大きさが変わる)
63
+ * - `space`: 整数個を等間隔に置き、余りを隙間に配る。1 枚しか入らないなら先頭に 1 枚
64
+ *
65
+ * @param {'repeat'|'no-repeat'|'space'|'round'} mode
66
+ * @param {number} start 指定位置(background-position の結果)
67
+ * @param {number} size タイルの大きさ
68
+ * @param {number} areaStart 描画領域の開始
69
+ * @param {number} areaEnd 描画領域の終わり
70
+ * @returns {{positions: number[], size: number}}
71
+ */
72
+ export function tileAxis(mode: "repeat" | "no-repeat" | "space" | "round", start: number, size: number, areaStart: number, areaEnd: number): {
73
+ positions: number[];
74
+ size: number;
75
+ };
76
+ /**
77
+ * 埋め込みが済んだ画像のピクセルデータを手放す。
78
+ * デコード結果(RGB・アルファ・JPEG のバイト列)は元画像より桁違いに大きいので、
79
+ * PDF に書き出したあとも抱えていると大きな文書でピーク使用量が跳ね上がる。
80
+ *
81
+ * キャッシュからも外すので、次の変換では読み直しになる(速度よりメモリを優先する)。
82
+ *
83
+ * @param {DecodedImage} img
84
+ */
85
+ export function releasePixels(img: DecodedImage): void;
50
86
  export type DecodedImage = {
51
87
  /**
52
88
  * 重複排除キー(URL)
@@ -0,0 +1,31 @@
1
+ /**
2
+ * SVG のパスデータと基本図形を、PDF に出せる形(絶対座標の M / L / C / Z)へ正規化する。
3
+ *
4
+ * 円弧(A)は 3 次ベジェへ、二次ベジェ(Q / T)も 3 次へ変換する。
5
+ * 座標は要素のユーザー単位のまま(変換行列は描画時に cm で適用する)。
6
+ */
7
+ /**
8
+ * @typedef {['M', number, number]|['L', number, number]|['C', number, number, number, number, number, number]|['Z']} PathSeg
9
+ */
10
+ /**
11
+ * `d` 属性を絶対座標の M / L / C / Z 列にする。
12
+ * @param {string} d
13
+ * @returns {PathSeg[]}
14
+ */
15
+ export function parsePathData(d: string): PathSeg[];
16
+ /**
17
+ * 楕円円弧を 3 次ベジェ列にする(SVG 仕様 F.6 の実装)。
18
+ * @param {number} x1 @param {number} y1 @param {number} x2 @param {number} y2
19
+ * @param {number} rx @param {number} ry @param {number} rotDeg
20
+ * @param {boolean} large @param {boolean} sweep
21
+ * @returns {PathSeg[]}
22
+ */
23
+ export function arcToCurves(x1: number, y1: number, x2: number, y2: number, rx: number, ry: number, rotDeg: number, large: boolean, sweep: boolean): PathSeg[];
24
+ /**
25
+ * 基本図形をパスにする。対応しない要素は null。
26
+ * @param {Element} el
27
+ * @param {(name: string) => string} attr 属性値(プレゼンテーション属性は computed style を優先しない純粋な幾何属性)
28
+ * @returns {PathSeg[]|null}
29
+ */
30
+ export function shapeToPath(el: Element, attr: (name: string) => string): PathSeg[] | null;
31
+ export type PathSeg = ["M", number, number] | ["L", number, number] | ["C", number, number, number, number, number, number] | ["Z"];
@@ -33,6 +33,10 @@ export type MeasureOptions = {
33
33
  */
34
34
  size: number;
35
35
  textMeasure: "font" | "measure" | "auto";
36
+ /**
37
+ * ブラウザが有効にしている OpenType 機能タグ(GSUB の単一置換を再現する)
38
+ */
39
+ features: string[];
36
40
  warn: (w: import("../index.js").ConversionWarning) => void;
37
41
  element: Element;
38
42
  };
@@ -117,7 +117,43 @@ export type ClipItem = {
117
117
  z: number;
118
118
  seq: number;
119
119
  };
120
- export type DisplayItem = RectItem | LineItem | StrokeRRectItem | ImageItem | TextItem | GroupItem | ClipItem;
120
+ /**
121
+ * linear-gradient(box はグラデーションの基準領域、clip は描画範囲)
122
+ */
123
+ export type GradientItem = {
124
+ type: "gradient";
125
+ box: Box;
126
+ clip: Box;
127
+ gradient: import("./gradient.js").LinearGradient;
128
+ alpha: number;
129
+ z: number;
130
+ seq: number;
131
+ };
132
+ export type PathStroke = {
133
+ color: Rgba;
134
+ width: number;
135
+ cap: 0 | 1 | 2;
136
+ join: 0 | 1 | 2;
137
+ miter: number;
138
+ dash: number[] | null;
139
+ dashOffset: number;
140
+ };
141
+ /**
142
+ * インライン SVG の図形(matrix はユーザー単位 → ドキュメント px)
143
+ */
144
+ export type PathItem = {
145
+ type: "path";
146
+ segs: import("./svg-path.js").PathSeg[];
147
+ matrix: [number, number, number, number, number, number];
148
+ fill: Rgba | null;
149
+ evenOdd: boolean;
150
+ stroke: PathStroke | null;
151
+ top: number;
152
+ bottom: number;
153
+ z: number;
154
+ seq: number;
155
+ };
156
+ export type DisplayItem = RectItem | LineItem | StrokeRRectItem | ImageItem | TextItem | GroupItem | ClipItem | GradientItem | PathItem;
121
157
  /**
122
158
  * ページ境界を跨いではいけない縦範囲(行・表の行・画像・break-inside: avoid)
123
159
  */
@@ -135,10 +171,19 @@ export type TableInfo = {
135
171
  footBottom: number;
136
172
  footItems: DisplayItem[];
137
173
  };
174
+ /**
175
+ * break-before/after: avoid — [start, end] に境界を置かず、置きそうなら pullTo まで戻す
176
+ */
177
+ export type Join = {
178
+ start: number;
179
+ end: number;
180
+ pullTo: number;
181
+ };
138
182
  export type WalkResult = {
139
183
  items: DisplayItem[];
140
184
  atoms: Atom[];
141
185
  breaks: number[];
186
+ joins: Join[];
142
187
  tables: TableInfo[];
143
188
  height: number;
144
189
  };
@@ -147,4 +192,8 @@ export type WalkContext = {
147
192
  fontFallback: string[];
148
193
  warn: (w: import("../index.js").ConversionWarning) => void;
149
194
  textMeasure: "font" | "measure" | "auto";
195
+ /**
196
+ * 長い走査で途中イベントループへ戻すための譲渡
197
+ */
198
+ pacer?: import("../pacer.js").Pacer | undefined;
150
199
  };