pdf-fox 1.2.0 → 1.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.
- package/README.md +8 -0
- package/dist/cli.js +16 -2
- package/dist/cli.js.map +1 -1
- package/dist/converter.d.ts.map +1 -1
- package/dist/converter.js +20 -0
- package/dist/converter.js.map +1 -1
- package/dist/types.d.ts +11 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -37,10 +37,17 @@ Options:
|
|
|
37
37
|
-b, --background <color> Background color (default: white)
|
|
38
38
|
-f, --font <name=path> Substitute font for a non-embedded font (repeatable)
|
|
39
39
|
--no-system-fonts Disable automatic CJK system-font fallback
|
|
40
|
+
--bold <px> Thicken text by this width in px (e.g. 0.6; default: 0)
|
|
40
41
|
-h, --help Show help
|
|
41
42
|
-V, --version Show version
|
|
42
43
|
```
|
|
43
44
|
|
|
45
|
+
### Text looks too thin?
|
|
46
|
+
|
|
47
|
+
PDF.js renders glyph outlines faithfully, so text can look lighter than in a
|
|
48
|
+
browser, which applies extra font smoothing on macOS. Thicken it with `--bold`
|
|
49
|
+
(or the `stemDarkening` option), e.g. `--bold 0.6`.
|
|
50
|
+
|
|
44
51
|
### Non-embedded fonts
|
|
45
52
|
|
|
46
53
|
If a PDF references a font without embedding it, those glyphs would render as
|
|
@@ -89,6 +96,7 @@ const rendered = await convertPdfToPng(pdf, {
|
|
|
89
96
|
| `background` | `string` | `"white"` | Background color (any CSS color string) |
|
|
90
97
|
| `fonts` | `Record<string, string>` | `{}` | Substitute fonts for non-embedded fonts, mapping the PDF's font name to a local font file path |
|
|
91
98
|
| `systemFontFallback` | `boolean` | `true` | Point `serif`/`sans-serif` at an available CJK system font so non-embedded CJK text renders. Disable for font-independent output |
|
|
99
|
+
| `stemDarkening` | `number` | `0` | Thicken text by stroking glyph outlines with this width in output pixels, approximating browser font smoothing. `0` disables; try `0.5`–`1.0` |
|
|
92
100
|
|
|
93
101
|
## Requirements
|
|
94
102
|
|
package/dist/cli.js
CHANGED
|
@@ -24,6 +24,7 @@ Options:
|
|
|
24
24
|
-f, --font <name=path> PDF が埋め込んでいないフォントの代替を指定
|
|
25
25
|
(複数指定可。name は PDF 内のフォント名)
|
|
26
26
|
--no-system-fonts CJK システムフォントへの自動フォールバックを無効化
|
|
27
|
+
--bold <px> テキストを太らせる幅 px(例: 0.6。デフォルト: 0=無効)
|
|
27
28
|
-h, --help ヘルプを表示
|
|
28
29
|
-V, --version バージョンを表示
|
|
29
30
|
|
|
@@ -44,6 +45,7 @@ function parseCliArgs() {
|
|
|
44
45
|
background: { type: "string", short: "b" },
|
|
45
46
|
font: { type: "string", short: "f", multiple: true },
|
|
46
47
|
"no-system-fonts": { type: "boolean" },
|
|
48
|
+
bold: { type: "string" },
|
|
47
49
|
help: { type: "boolean", short: "h" },
|
|
48
50
|
version: { type: "boolean", short: "V" },
|
|
49
51
|
},
|
|
@@ -70,6 +72,10 @@ function parseCliArgs() {
|
|
|
70
72
|
if (isNaN(dpi) || dpi <= 0) {
|
|
71
73
|
exitWithError("--dpi は正の数を指定してください");
|
|
72
74
|
}
|
|
75
|
+
const stemDarkening = values.bold !== undefined ? Number(values.bold) : 0;
|
|
76
|
+
if (isNaN(stemDarkening) || stemDarkening < 0) {
|
|
77
|
+
exitWithError("--bold は 0 以上の数を指定してください");
|
|
78
|
+
}
|
|
73
79
|
return {
|
|
74
80
|
inputPath: positionals[0],
|
|
75
81
|
outputOption: values.output,
|
|
@@ -78,6 +84,7 @@ function parseCliArgs() {
|
|
|
78
84
|
background: values.background ?? "white",
|
|
79
85
|
fonts: parseFontMappings(values.font),
|
|
80
86
|
systemFontFallback: !values["no-system-fonts"],
|
|
87
|
+
stemDarkening,
|
|
81
88
|
};
|
|
82
89
|
}
|
|
83
90
|
// Parses repeated `--font name=path` values into a name → path map.
|
|
@@ -127,7 +134,7 @@ function exitWithError(message) {
|
|
|
127
134
|
process.exit(1);
|
|
128
135
|
}
|
|
129
136
|
async function run() {
|
|
130
|
-
const { inputPath, outputOption, page, dpi, background, fonts, systemFontFallback } = parseCliArgs();
|
|
137
|
+
const { inputPath, outputOption, page, dpi, background, fonts, systemFontFallback, stemDarkening } = parseCliArgs();
|
|
131
138
|
const scale = dpi / PDF_BASE_DPI;
|
|
132
139
|
let pdfBuffer;
|
|
133
140
|
try {
|
|
@@ -145,6 +152,7 @@ async function run() {
|
|
|
145
152
|
background,
|
|
146
153
|
fonts,
|
|
147
154
|
systemFontFallback,
|
|
155
|
+
stemDarkening,
|
|
148
156
|
});
|
|
149
157
|
}
|
|
150
158
|
catch (err) {
|
|
@@ -155,7 +163,13 @@ async function run() {
|
|
|
155
163
|
}
|
|
156
164
|
let pages;
|
|
157
165
|
try {
|
|
158
|
-
pages = await convertPdfToPng(pdfBuffer, {
|
|
166
|
+
pages = await convertPdfToPng(pdfBuffer, {
|
|
167
|
+
scale,
|
|
168
|
+
background,
|
|
169
|
+
fonts,
|
|
170
|
+
systemFontFallback,
|
|
171
|
+
stemDarkening,
|
|
172
|
+
});
|
|
159
173
|
}
|
|
160
174
|
catch (err) {
|
|
161
175
|
exitWithError(err instanceof Error ? err.message : String(err));
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAClF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGlE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAEtE,MAAM,YAAY,GAAG,EAAE,CAAC;AACxB,MAAM,WAAW,GAAG,GAAG,CAAC;AAExB,MAAM,IAAI,GAAG;;;;;;;;;;6CAUgC,WAAW
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAClF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGlE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAEtE,MAAM,YAAY,GAAG,EAAE,CAAC;AACxB,MAAM,WAAW,GAAG,GAAG,CAAC;AAExB,MAAM,IAAI,GAAG;;;;;;;;;;6CAUgC,WAAW;;;;;;;;;;;;;;;;CAgBvD,CAAC;AAkBF,SAAS,YAAY;IACnB,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC;QACxC,OAAO,EAAE;YACP,MAAM,EAAM,EAAE,IAAI,EAAE,QAAQ,EAAG,KAAK,EAAE,GAAG,EAAE;YAC3C,IAAI,EAAQ,EAAE,IAAI,EAAE,QAAQ,EAAG,KAAK,EAAE,GAAG,EAAE;YAC3C,GAAG,EAAS,EAAE,IAAI,EAAE,QAAQ,EAAG,KAAK,EAAE,GAAG,EAAE;YAC3C,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAG,KAAK,EAAE,GAAG,EAAE;YAC3C,IAAI,EAAQ,EAAE,IAAI,EAAE,QAAQ,EAAG,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC3D,iBAAiB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YACtC,IAAI,EAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC9B,IAAI,EAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;YAC3C,OAAO,EAAK,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;SAC5C;QACD,gBAAgB,EAAE,IAAI;KACvB,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACvD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;QAChE,aAAa,CAAC,2BAA2B,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IACxE,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QAC3B,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,IAAI,KAAK,CAAC,aAAa,CAAC,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QAC9C,aAAa,CAAC,0BAA0B,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO;QACL,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;QACzB,YAAY,EAAE,MAAM,CAAC,MAAM;QAC3B,IAAI;QACJ,GAAG;QACH,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,OAAO;QACxC,KAAK,EAAE,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC;QACrC,kBAAkB,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC;QAC9C,aAAa;KACd,CAAC;AACJ,CAAC;AAED,oEAAoE;AACpE,SAAS,iBAAiB,CAAC,MAA4B;IACrD,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,KAAK,MAAM,KAAK,IAAI,MAAM,IAAI,EAAE,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YACnB,aAAa,CAAC,qCAAqC,KAAK,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,sDAAsD;AACtD,SAAS,WAAW,CAAC,IAAY;IAC/B,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,iBAAiB,CAAC,SAAiB,EAAE,YAAgC;IAC5E,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;IACjE,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAEvC,oCAAoC;IACpC,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QAC7F,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;IAC9C,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,eAAe,CAAC,IAAgB,EAAE,UAAkB;IAC3D,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,SAAS,CAAC,UAAkB,EAAE,IAAa;IAClD,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,aAAa,CAAC,OAAe;IACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,OAAO,IAAI,CAAC,CAAC;IAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,GAAG;IAChB,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,GAChG,YAAY,EAAE,CAAC;IACjB,MAAM,KAAK,GAAG,GAAG,GAAG,YAAY,CAAC;IAEjC,IAAI,SAAiB,CAAC;IACtB,IAAI,CAAC;QACH,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,aAAa,CAAC,iBAAiB,SAAS,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,UAAU,GAAG,iBAAiB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAE9D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,mBAAmB,CAAC,SAAS,EAAE,IAAI,EAAE;gBAClD,KAAK;gBACL,UAAU;gBACV,KAAK;gBACL,kBAAkB;gBAClB,aAAa;aACd,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,aAAa,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAClE,CAAC;QACD,SAAS,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;QAClE,OAAO;IACT,CAAC;IAED,IAAI,KAAgB,CAAC;IACrB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE;YACvC,KAAK;YACL,UAAU;YACV,KAAK;YACL,kBAAkB;YAClB,aAAa;SACd,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,aAAa,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,UAAU,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnD,aAAa,CACX,SAAS,KAAK,CAAC,MAAM,yBAAyB;YAC9C,mCAAmC,CACpC,CAAC;IACJ,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,SAAS,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAClB,aAAa,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAClE,CAAC,CAAC,CAAC"}
|
package/dist/converter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"converter.d.ts","sourceRoot":"","sources":["../src/converter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"converter.d.ts","sourceRoot":"","sources":["../src/converter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAkH1D,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,GAAG,UAAU,EAC1B,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,OAAO,CAAC,CAIlB;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,GAAG,UAAU,EAC1B,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,OAAO,EAAE,CAAC,CAYpB"}
|
package/dist/converter.js
CHANGED
|
@@ -64,6 +64,7 @@ async function renderPageToPng(pdfData, pageNumber, options) {
|
|
|
64
64
|
const context = canvas.getContext("2d");
|
|
65
65
|
context.fillStyle = options.background;
|
|
66
66
|
context.fillRect(0, 0, viewport.width, viewport.height);
|
|
67
|
+
applyStemDarkening(context, options.stemDarkening);
|
|
67
68
|
// canvasContext only (canvas: null) — PDF.js uses the provided 2D context
|
|
68
69
|
// directly without trying to call canvas.getContext() internally.
|
|
69
70
|
await page.render({
|
|
@@ -108,8 +109,27 @@ function resolveOptions(options) {
|
|
|
108
109
|
return {
|
|
109
110
|
scale: options?.scale ?? DEFAULT_SCALE,
|
|
110
111
|
background: options?.background ?? DEFAULT_BACKGROUND,
|
|
112
|
+
stemDarkening: Math.max(0, options?.stemDarkening ?? 0),
|
|
111
113
|
};
|
|
112
114
|
}
|
|
115
|
+
function applyStemDarkening(context, width) {
|
|
116
|
+
if (width <= 0)
|
|
117
|
+
return;
|
|
118
|
+
const nativeFill = context.fill.bind(context);
|
|
119
|
+
context.fill = ((path) => {
|
|
120
|
+
nativeFill(path);
|
|
121
|
+
if (!path)
|
|
122
|
+
return;
|
|
123
|
+
const transform = context.getTransform();
|
|
124
|
+
const scale = Math.hypot(transform.a, transform.b) || 1;
|
|
125
|
+
const { strokeStyle, lineWidth } = context;
|
|
126
|
+
context.strokeStyle = context.fillStyle;
|
|
127
|
+
context.lineWidth = width / scale;
|
|
128
|
+
context.stroke(path);
|
|
129
|
+
context.strokeStyle = strokeStyle;
|
|
130
|
+
context.lineWidth = lineWidth;
|
|
131
|
+
});
|
|
132
|
+
}
|
|
113
133
|
// Sets up font substitution before rendering. Must run before any rendering:
|
|
114
134
|
// @napi-rs/canvas caches font lookups per process, so fonts registered after
|
|
115
135
|
// their first use won't take effect.
|
package/dist/converter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"converter.js","sourceRoot":"","sources":["../src/converter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAGnG,MAAM,aAAa,GAAG,GAAG,CAAC;AAC1B,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAEnC,gFAAgF;AAChF,0EAA0E;AAC1E,MAAM,eAAe,GAAG;IACtB,sBAAsB;IACtB,UAAU;IACV,WAAW;IACX,WAAW;IACX,mBAAmB;IACnB,eAAe;IACf,qBAAqB;IACrB,aAAa;CACd,CAAC;AACF,MAAM,cAAc,GAAG;IACrB,eAAe;IACf,2BAA2B;IAC3B,UAAU;IACV,WAAW;IACX,QAAQ;IACR,WAAW;IACX,kBAAkB;IAClB,cAAc;IACd,oBAAoB;IACpB,aAAa;CACd,CAAC;
|
|
1
|
+
{"version":3,"file":"converter.js","sourceRoot":"","sources":["../src/converter.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -30,6 +30,17 @@ export interface ConvertOptions {
|
|
|
30
30
|
* @default true
|
|
31
31
|
*/
|
|
32
32
|
systemFontFallback?: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Thicken text by stroking each filled glyph outline with this width, in
|
|
35
|
+
* output pixels. Approximates the "stem darkening" font smoothing that
|
|
36
|
+
* browsers apply on macOS, where text looks heavier than a faithful outline
|
|
37
|
+
* fill. `0` disables it; try `0.5`–`1.0`.
|
|
38
|
+
*
|
|
39
|
+
* Applies to every filled path, but for solid fills the same-color outline is
|
|
40
|
+
* effectively invisible — the visible effect is on text.
|
|
41
|
+
* @default 0
|
|
42
|
+
*/
|
|
43
|
+
stemDarkening?: number;
|
|
33
44
|
}
|
|
34
45
|
export interface PngPage {
|
|
35
46
|
/** 1-indexed page number */
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;;;;;;;OAUG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE/B;;;;;;;OAOG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;;;;;;;OAUG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE/B;;;;;;;OAOG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;;;;;;;OASG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,OAAO;IACtB,4BAA4B;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;CAChB"}
|