@shuji-bonji/pdf-writer-mcp 0.4.0 → 0.5.1
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 +89 -0
- package/README.ja.md +22 -4
- package/README.md +22 -4
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +9 -0
- package/dist/constants.js +9 -0
- package/dist/constants.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/services/annotation.d.ts +11 -3
- package/dist/services/annotation.js +5 -4
- package/dist/services/annotation.js.map +1 -1
- package/dist/services/builder.js +32 -4
- package/dist/services/builder.js.map +1 -1
- package/dist/services/editor.js +16 -4
- package/dist/services/editor.js.map +1 -1
- package/dist/services/font-manager.d.ts +1 -1
- package/dist/services/font-manager.js +1 -1
- package/dist/services/font-manager.js.map +1 -1
- package/dist/services/layout.d.ts +17 -1
- package/dist/services/layout.js +46 -13
- package/dist/services/layout.js.map +1 -1
- package/dist/services/outline.d.ts +1 -1
- package/dist/services/outline.js +1 -1
- package/dist/services/outline.js.map +1 -1
- package/dist/services/output.js +2 -2
- package/dist/services/output.js.map +1 -1
- package/dist/services/renderers/markdown.d.ts +1 -1
- package/dist/services/renderers/markdown.js +58 -15
- package/dist/services/renderers/markdown.js.map +1 -1
- package/dist/services/renderers/table.d.ts +1 -1
- package/dist/services/renderers/table.js +30 -16
- package/dist/services/renderers/table.js.map +1 -1
- package/dist/services/renderers/text.d.ts +1 -1
- package/dist/services/renderers/text.js +4 -1
- package/dist/services/renderers/text.js.map +1 -1
- package/dist/services/struct-append.d.ts +33 -0
- package/dist/services/struct-append.js +178 -0
- package/dist/services/struct-append.js.map +1 -0
- package/dist/services/struct-tree.d.ts +79 -0
- package/dist/services/struct-tree.js +222 -0
- package/dist/services/struct-tree.js.map +1 -0
- package/dist/services/xmp.d.ts +42 -0
- package/dist/services/xmp.js +133 -0
- package/dist/services/xmp.js.map +1 -0
- package/dist/tools/definitions.d.ts +28 -0
- package/dist/tools/definitions.js +17 -0
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/handlers.js +7 -6
- package/dist/tools/handlers.js.map +1 -1
- package/dist/types/index.d.ts +19 -0
- package/dist/utils/lang.d.ts +18 -0
- package/dist/utils/lang.js +30 -0
- package/dist/utils/lang.js.map +1 -0
- package/dist/utils/validation.d.ts +1 -1
- package/dist/utils/validation.js +23 -6
- package/dist/utils/validation.js.map +1 -1
- package/package.json +9 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,95 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [0.5.1] - 2026-07-16
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- **`add_annotation` keeps tagged PDFs conformant.** When the target document is
|
|
10
|
+
tagged, the annotation is now nested in an `Annot` structure element and the
|
|
11
|
+
page gets `/Tabs /S` — PDF/UA-1 7.18.1-1 and 7.18.3-1. Verified: adding an
|
|
12
|
+
annotation to a tagged document still passes veraPDF `--flavour ua1` (106/106).
|
|
13
|
+
|
|
14
|
+
This closes the gap 0.4.0 left behind: `add_annotation` shipped before tagging
|
|
15
|
+
existed, and veraPDF flagged it once 0.5.0 made tagged output possible.
|
|
16
|
+
|
|
17
|
+
- **`alt` option on `add_annotation`** — the alternate text for the `Annot`
|
|
18
|
+
element. Omitting it on a tagged document produces a `warnings` entry rather
|
|
19
|
+
than silently emitting an annotation assistive technology cannot describe.
|
|
20
|
+
|
|
21
|
+
### Notes
|
|
22
|
+
|
|
23
|
+
`services/struct-append.ts` is a new counterpart to `struct-tree.ts`: the latter
|
|
24
|
+
*builds* a tree from scratch (create tools), the former *appends* to an existing
|
|
25
|
+
one (edit tools). Appending means reading `/ParentTreeNextKey`, inserting into
|
|
26
|
+
the number tree while keeping keys ascending, and writing `/StructParent` back
|
|
27
|
+
onto the annotation — the mechanics a future `ensure_tagged` (Tier C) will need.
|
|
28
|
+
|
|
29
|
+
Untagged documents are left untouched: no structure tree is invented just because
|
|
30
|
+
an annotation was added.
|
|
31
|
+
|
|
32
|
+
## [0.5.0] - 2026-07-16
|
|
33
|
+
|
|
34
|
+
### Added
|
|
35
|
+
|
|
36
|
+
- **Tagged PDF / PDF/UA-1 (ISO 14289)** via `tagged: true` on the create tools.
|
|
37
|
+
Output is **verified compliant by veraPDF** (`--flavour ua1`, 106/106 rules) for
|
|
38
|
+
text, Markdown, and table documents.
|
|
39
|
+
|
|
40
|
+
Opt-in by design: existing behaviour is unchanged unless you ask for tagging.
|
|
41
|
+
PDF/UA mandates a document title, so `tagged: true` requires `title`.
|
|
42
|
+
|
|
43
|
+
- Structure tree (`StructTreeRoot`, `StructElem`, `ParentTree`) built from
|
|
44
|
+
pdf-lib's low-level object model — it has no logical-structure API.
|
|
45
|
+
- Every drawn line is wrapped in `/Tag <</MCID n>> BDC … EMC`, and decorations
|
|
46
|
+
(rules, cell borders, code backgrounds) become `/Artifact BMC … EMC` (7.1-3).
|
|
47
|
+
- Markdown maps to structure: headings → `H1`–`H6`, lists → `L`/`LI`/`LBody`,
|
|
48
|
+
tables → `Table`/`TR`/`TH`/`TD`, quotes → `BlockQuote`, code → `Code`.
|
|
49
|
+
- Heading levels are normalised so they start at H1 and never skip (7.4.2).
|
|
50
|
+
A Markdown `# → ###` jump becomes `H1 → H2`; visual sizes are untouched.
|
|
51
|
+
- Table headers carry `/A << /O /Table /Scope /Column >>` (7.5-1).
|
|
52
|
+
- XMP is generated in-house (pdf-lib has no XMP API) with the `pdfuaid`
|
|
53
|
+
declaration **and** the PDF/A extension schema description — veraPDF rejects
|
|
54
|
+
the declaration without it (5-1).
|
|
55
|
+
- `/Lang`, `/ViewerPreferences /DisplayDocTitle`, `/MarkInfo /Marked`.
|
|
56
|
+
|
|
57
|
+
- **`lang` option** (BCP 47). When omitted under `tagged: true` the language is
|
|
58
|
+
inferred from the text and reported via `warnings`. Inference is conservative:
|
|
59
|
+
kana → `ja`, Hangul → `ko`, Han without kana → `ja` *with a warning that it
|
|
60
|
+
could be Chinese*. A wrong `/Lang` makes screen readers mispronounce text, so
|
|
61
|
+
the guess is always surfaced rather than silently applied.
|
|
62
|
+
|
|
63
|
+
### Fixed
|
|
64
|
+
|
|
65
|
+
- **Bullets in unordered lists rendered as `.notdef`** (blank boxes) — a
|
|
66
|
+
regression from 0.3.0. Font subsetting is driven by the *input* text, but the
|
|
67
|
+
Markdown renderer adds characters of its own: `- item` contains no bullet, yet
|
|
68
|
+
`•` is drawn. Those glyphs were missing from the subset. Renderer-generated
|
|
69
|
+
characters are now always subset in (`RENDERER_GENERATED_CHARS`).
|
|
70
|
+
|
|
71
|
+
Text extraction was unaffected, which is why no existing test caught it;
|
|
72
|
+
veraPDF's 7.21.8-1 (no `.notdef` references) is what surfaced it.
|
|
73
|
+
|
|
74
|
+
- XMP metadata is written as UTF-8 bytes. `context.stream(string)` writes one
|
|
75
|
+
byte per character, which mangled Japanese titles.
|
|
76
|
+
|
|
77
|
+
## [Unreleased]
|
|
78
|
+
|
|
79
|
+
### Changed
|
|
80
|
+
|
|
81
|
+
- **biome adopted** for linting and formatting, matching the rest of the family
|
|
82
|
+
(same `biome.json`, same scripts). `npm run check` now runs in CI and in the
|
|
83
|
+
publish workflow. Existing sources were reformatted; the suite is clean.
|
|
84
|
+
- The version is pinned to an exact `2.5.4` rather than a caret range. Biome's
|
|
85
|
+
formatting output changes between minor releases, so a range lets a local
|
|
86
|
+
`npm install` drift ahead of CI and produce spurious diffs.
|
|
87
|
+
|
|
88
|
+
### Fixed
|
|
89
|
+
|
|
90
|
+
- `handleCreateTablePdf` duplicated the Latin-1 check as a regex containing
|
|
91
|
+
control characters; it now reuses the existing `hasNonLatin1` helper.
|
|
92
|
+
- `src/config.ts` imports `node:module` rather than the bare `module` specifier.
|
|
93
|
+
|
|
5
94
|
## [0.4.0] - 2026-07-16
|
|
6
95
|
|
|
7
96
|
### Added
|
package/README.ja.md
CHANGED
|
@@ -20,7 +20,21 @@
|
|
|
20
20
|
| `create_markdown_pdf` | Markdown — 見出し / 段落 / 箇条書き・番号リスト / コードブロック / 引用 / 水平線 / 表 |
|
|
21
21
|
| `create_table_pdf` | 罫線付き表 — 列幅の自動算出、セル内折り返し、改ページ時のヘッダ再描画 |
|
|
22
22
|
|
|
23
|
-
共通オプション: `outputPath` / `returnBase64` / `fontPath` / `fontSize` / `pageSize`(A4/A3/A5/LETTER/LEGAL)/ `margin` / `title` / `author` / `onMissingGlyph`。
|
|
23
|
+
共通オプション: `outputPath` / `returnBase64` / `fontPath` / `fontSize` / `pageSize`(A4/A3/A5/LETTER/LEGAL)/ `margin` / `title` / `author` / `onMissingGlyph` / `tagged` / `lang`。
|
|
24
|
+
|
|
25
|
+
### タグ付き PDF / PDF/UA(v0.5.0)
|
|
26
|
+
|
|
27
|
+
`tagged: true` を指定すると、**PDF/UA-1(ISO 14289)準拠のタグ付き PDF**(アクセシブルな PDF)を生成します。veraPDF(`--flavour ua1`)で 106/106 規則の準拠を確認済みです。
|
|
28
|
+
|
|
29
|
+
```jsonc
|
|
30
|
+
{ "markdown": "# 見出し\n\n本文。", "title": "レポート", "tagged": true, "lang": "ja" }
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Markdown は構造木に対応付けられます。見出し → `H1`〜`H6`、リスト → `L`/`LI`/`LBody`、表 → `Table`/`TR`/`TH`/`TD`(ヘッダには `/Scope`)、引用 → `BlockQuote`、コード → `Code`。水平線・罫線・コード背景は Artifact になります。見出しレベルは「H1 始まり・飛ばさない」よう正規化されるため、Markdown の `# → ###` は構造上 `H1 → H2` になります(見た目のサイズは元のままです)。
|
|
34
|
+
|
|
35
|
+
PDF/UA はタイトルを要求するため、`tagged: true` では `title` が必須です。`lang`(BCP 47)は省略すると本文から推定し、`warnings` で報告します。**誤った `/Lang` はスクリーンリーダの誤読を招く**ため、分かっている場合は明示してください。
|
|
36
|
+
|
|
37
|
+
> タグ付けは opt-in です(既定の出力は変わりません)。機械検証は「読み順や代替テキストが**適切か**」までは判定できず、存在の有無しか見られません。人手の確認は依然として必要です。
|
|
24
38
|
|
|
25
39
|
### 編集
|
|
26
40
|
|
|
@@ -34,7 +48,7 @@
|
|
|
34
48
|
| `reorder_pages` | 全ページの順列による並べ替え |
|
|
35
49
|
| `rotate_pages` | 時計回りに回転(90/180/270)。既存の回転に加算 |
|
|
36
50
|
| `add_bookmarks` | しおり(アウトライン)の設定。`children` で入れ子にでき、既存のしおりは置換 |
|
|
37
|
-
| `add_annotation` | 付箋(`text`)/ ハイライト(`highlight`)/ 矩形(`square
|
|
51
|
+
| `add_annotation` | 付箋(`text`)/ ハイライト(`highlight`)/ 矩形(`square`)の注釈を追加。タグ付き PDF では `Annot` 構造要素に内包され PDF/UA 準拠を維持する(`alt` で説明を渡す) |
|
|
38
52
|
|
|
39
53
|
共通オプション: `outputPath` / `returnBase64` / `allowBreakingSignatures`。
|
|
40
54
|
|
|
@@ -49,7 +63,7 @@
|
|
|
49
63
|
"mcpServers": {
|
|
50
64
|
"pdf-writer": {
|
|
51
65
|
"command": "npx",
|
|
52
|
-
"args": ["-y", "@shuji-bonji/pdf-writer-mcp"],
|
|
66
|
+
"args": ["-y", "@shuji-bonji/pdf-writer-mcp@latest"],
|
|
53
67
|
"env": {
|
|
54
68
|
"PDF_WRITER_FONT": "/absolute/path/to/NotoSansJP-Regular.otf"
|
|
55
69
|
}
|
|
@@ -60,6 +74,8 @@
|
|
|
60
74
|
|
|
61
75
|
`PDF_WRITER_FONT` を設定しておくと、各ツールで `fontPath` を省略しても日本語が出せます。
|
|
62
76
|
|
|
77
|
+
> **`@latest` を付ける(またはバージョンを固定する)ことを推奨します。** バージョン指定なしの `npx -y <pkg>` は、**最初にキャッシュした版を使い続けます**(`-y` はインストール確認を省くだけで、更新確認はしません)。数か月前の版が動き続けることもあります。`@latest` にすると起動のたびにレジストリを確認します。再現性を優先するなら `@0.5.0` のように固定してください。キャッシュを消すには `rm -rf ~/.npm/_npx`。
|
|
78
|
+
|
|
63
79
|
## フォント
|
|
64
80
|
|
|
65
81
|
標準 PDF フォント(Helvetica)は **ASCII のみ** です。日本語など非ラテン文字を描画するには、`fontPath` または `PDF_WRITER_FONT` で埋め込み可能な**単一フェイス**のフォント(`.ttf` / `.otf`)を指定してください。
|
|
@@ -128,8 +144,10 @@ TEST_FONT_PATH=/path/to/NotoSansJP-Regular.otf npm test
|
|
|
128
144
|
|
|
129
145
|
- [x] 編集系 Tier A 第1波 — メタデータ・ページ操作(v0.2.0)
|
|
130
146
|
- [x] 編集系 Tier A 第2波 — しおり・注釈(v0.4.0)
|
|
147
|
+
- [x] タグ付き PDF / PDF/UA-1 — veraPDF で準拠を確認(v0.5.0)
|
|
148
|
+
- [x] タグ付き出力での注釈の `Annot` タグ内包(v0.5.1)
|
|
131
149
|
- [ ] 編集系 Tier B — フォーム記入 / フラット化、透かし、添付ファイル、ページ番号スタンプ
|
|
132
|
-
- [ ]
|
|
150
|
+
- [ ] 画像の代替テキスト(`Figure` + `/Alt`)
|
|
133
151
|
- [ ] `.ttc` からのフェイス自動抽出
|
|
134
152
|
- [ ] 見出し用と本文用のフォント分け(太字フェイス埋め込み)
|
|
135
153
|
- [ ] 画像埋め込み、ヘッダー / フッター
|
package/README.md
CHANGED
|
@@ -20,7 +20,21 @@ Part of the PDF family alongside [pdf-reader-mcp](https://github.com/shuji-bonji
|
|
|
20
20
|
| `create_markdown_pdf` | Markdown — headings, paragraphs, bullet/ordered lists, code blocks, quotes, rules, tables |
|
|
21
21
|
| `create_table_pdf` | Ruled tables — automatic column widths, cell wrapping, headers repeated across page breaks |
|
|
22
22
|
|
|
23
|
-
Shared options: `outputPath`, `returnBase64`, `fontPath`, `fontSize`, `pageSize` (A4/A3/A5/LETTER/LEGAL), `margin`, `title`, `author`, `onMissingGlyph`.
|
|
23
|
+
Shared options: `outputPath`, `returnBase64`, `fontPath`, `fontSize`, `pageSize` (A4/A3/A5/LETTER/LEGAL), `margin`, `title`, `author`, `onMissingGlyph`, `tagged`, `lang`.
|
|
24
|
+
|
|
25
|
+
### Tagged PDF / PDF/UA (v0.5.0)
|
|
26
|
+
|
|
27
|
+
Pass `tagged: true` to produce an accessible, tagged PDF conforming to **PDF/UA-1 (ISO 14289)**. Output is verified compliant by veraPDF (`--flavour ua1`, 106/106 rules).
|
|
28
|
+
|
|
29
|
+
```jsonc
|
|
30
|
+
{ "markdown": "# Title\n\nBody.", "title": "Report", "tagged": true, "lang": "en" }
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Markdown maps onto the structure tree: headings → `H1`–`H6`, lists → `L`/`LI`/`LBody`, tables → `Table`/`TR`/`TH`/`TD` (headers get `/Scope`), quotes → `BlockQuote`, code → `Code`. Rules, borders and code backgrounds become artifacts. Heading levels are normalised so they start at H1 and never skip — a Markdown `# → ###` jump becomes `H1 → H2` in the structure, while visual sizes stay as authored.
|
|
34
|
+
|
|
35
|
+
PDF/UA mandates a document title, so `tagged: true` requires `title`. `lang` (BCP 47) is inferred from the text when omitted and reported via `warnings` — pass it explicitly when you know it, since a wrong `/Lang` makes screen readers mispronounce the text.
|
|
36
|
+
|
|
37
|
+
> Tagging is opt-in: default output is unchanged. Machine validation cannot judge whether reading order or alt text are *appropriate*, only that they exist — human review still matters.
|
|
24
38
|
|
|
25
39
|
### Editing
|
|
26
40
|
|
|
@@ -34,7 +48,7 @@ Shared options: `outputPath`, `returnBase64`, `fontPath`, `fontSize`, `pageSize`
|
|
|
34
48
|
| `reorder_pages` | Reorder by an explicit permutation of all pages |
|
|
35
49
|
| `rotate_pages` | Rotate clockwise (90/180/270), accumulating over existing rotation |
|
|
36
50
|
| `add_bookmarks` | Set the outline (bookmarks); nestable via `children`, replaces any existing outline |
|
|
37
|
-
| `add_annotation` | Add a sticky note (`text`), `highlight`, or `square` annotation to a page |
|
|
51
|
+
| `add_annotation` | Add a sticky note (`text`), `highlight`, or `square` annotation to a page. On tagged PDFs the annotation is nested in an `Annot` element and stays PDF/UA conformant — pass `alt` to describe it |
|
|
38
52
|
|
|
39
53
|
Shared options: `outputPath`, `returnBase64`, `allowBreakingSignatures`.
|
|
40
54
|
|
|
@@ -49,7 +63,7 @@ Page specs use `"1,3-5,8-"` (1-based; `-3` means up to page 3, `8-` means page 8
|
|
|
49
63
|
"mcpServers": {
|
|
50
64
|
"pdf-writer": {
|
|
51
65
|
"command": "npx",
|
|
52
|
-
"args": ["-y", "@shuji-bonji/pdf-writer-mcp"],
|
|
66
|
+
"args": ["-y", "@shuji-bonji/pdf-writer-mcp@latest"],
|
|
53
67
|
"env": {
|
|
54
68
|
"PDF_WRITER_FONT": "/absolute/path/to/NotoSansJP-Regular.otf"
|
|
55
69
|
}
|
|
@@ -60,6 +74,8 @@ Page specs use `"1,3-5,8-"` (1-based; `-3` means up to page 3, `8-` means page 8
|
|
|
60
74
|
|
|
61
75
|
`PDF_WRITER_FONT` lets every tool omit `fontPath` and still render CJK text.
|
|
62
76
|
|
|
77
|
+
> **Use `@latest` (or pin a version).** `npx -y <pkg>` without a version keeps running whatever it cached the first time — `-y` only skips the install prompt, it does not check for updates. A bare specifier will happily run a months-old release. `@latest` makes npx check the registry on each start; pin `@0.5.0` instead if you want reproducibility. To clear a stale cache: `rm -rf ~/.npm/_npx`.
|
|
78
|
+
|
|
63
79
|
## Fonts
|
|
64
80
|
|
|
65
81
|
The standard PDF font (Helvetica) covers **ASCII only**. To render Japanese or any non-Latin text, point `fontPath` or `PDF_WRITER_FONT` at an embeddable **single-face** font (`.ttf` / `.otf`).
|
|
@@ -128,8 +144,10 @@ TEST_FONT_PATH=/path/to/NotoSansJP-Regular.otf npm test
|
|
|
128
144
|
|
|
129
145
|
- [x] Editing Tier A wave 1 — metadata and page operations (v0.2.0)
|
|
130
146
|
- [x] Editing Tier A wave 2 — bookmarks and annotations (v0.4.0)
|
|
147
|
+
- [x] Tagged PDF / PDF/UA-1 — verified by veraPDF (v0.5.0)
|
|
148
|
+
- [x] Annotations nested in `Annot` tags on tagged output (v0.5.1)
|
|
131
149
|
- [ ] Editing Tier B — form filling/flattening, watermarks, attachments, page-number stamping
|
|
132
|
-
- [ ]
|
|
150
|
+
- [ ] Images with alt text (`Figure` + `/Alt`)
|
|
133
151
|
- [ ] Automatic face extraction from `.ttc`
|
|
134
152
|
- [ ] Separate faces for headings and body (bold face embedding)
|
|
135
153
|
- [ ] Image embedding, headers/footers
|
package/dist/config.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Application Configuration
|
|
3
3
|
* バージョンは package.json から動的取得(config と package.json の不一致を防ぐ)
|
|
4
4
|
*/
|
|
5
|
-
import { createRequire } from 'module';
|
|
5
|
+
import { createRequire } from 'node:module';
|
|
6
6
|
const require = createRequire(import.meta.url);
|
|
7
7
|
const packageJson = require('../package.json');
|
|
8
8
|
/**
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAG5C,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,WAAW,CAAC,IAAI;IACtB,OAAO,EAAE,WAAW,CAAC,OAAO;CACpB,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,yCAAyC;IACzC,YAAY,EAAE,iBAAiB;CACvB,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,cAAc;IACd,QAAQ,EAAE,IAAI;IACd,eAAe;IACf,MAAM,EAAE,EAAE,EAAE,SAAS;IACrB,gBAAgB;IAChB,QAAQ,EAAE,EAAE;IACZ,wDAAwD;IACxD,UAAU,EAAE,IAAI;IAChB,eAAe;IACf,YAAY,EAAE,CAAC;CACP,CAAC"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -43,6 +43,15 @@ export declare const ANNOTATION_TYPES: readonly ['text', 'highlight', 'square'];
|
|
|
43
43
|
export declare const ANNOTATION_ICONS: readonly ['Note', 'Comment', 'Key', 'Help', 'NewParagraph', 'Paragraph', 'Insert'];
|
|
44
44
|
/** rotate_pages が受け付ける回転角(時計回り・度) */
|
|
45
45
|
export declare const ROTATION_ANGLES: readonly [90, 180, 270];
|
|
46
|
+
/**
|
|
47
|
+
* レンダラが入力テキストに無くても描画しうる文字。
|
|
48
|
+
*
|
|
49
|
+
* フォントのサブセットは「入力テキスト」を基に行うため、レンダラが後から足す文字は
|
|
50
|
+
* サブセットに含まれず .notdef(豆腐)になる。実例: Markdown の `- item` は原文に
|
|
51
|
+
* 中黒を含まないが、箇条書きレンダラが '•' を描画する(v0.3.0〜v0.4.0 の回帰)。
|
|
52
|
+
* 番号リストの marker(`1. `)も同様に生成物。
|
|
53
|
+
*/
|
|
54
|
+
export declare const RENDERER_GENERATED_CHARS = "\u20220123456789. ";
|
|
46
55
|
/**
|
|
47
56
|
* フォントファイルのマジックナンバー(先頭 4 bytes)
|
|
48
57
|
* .ttc(TrueTypeCollection)は pdf-lib がサブセット化できないため検知して弾く
|
package/dist/constants.js
CHANGED
|
@@ -50,6 +50,15 @@ export const ANNOTATION_ICONS = [
|
|
|
50
50
|
];
|
|
51
51
|
/** rotate_pages が受け付ける回転角(時計回り・度) */
|
|
52
52
|
export const ROTATION_ANGLES = [90, 180, 270];
|
|
53
|
+
/**
|
|
54
|
+
* レンダラが入力テキストに無くても描画しうる文字。
|
|
55
|
+
*
|
|
56
|
+
* フォントのサブセットは「入力テキスト」を基に行うため、レンダラが後から足す文字は
|
|
57
|
+
* サブセットに含まれず .notdef(豆腐)になる。実例: Markdown の `- item` は原文に
|
|
58
|
+
* 中黒を含まないが、箇条書きレンダラが '•' を描画する(v0.3.0〜v0.4.0 の回帰)。
|
|
59
|
+
* 番号リストの marker(`1. `)も同様に生成物。
|
|
60
|
+
*/
|
|
61
|
+
export const RENDERER_GENERATED_CHARS = '•0123456789. ';
|
|
53
62
|
/**
|
|
54
63
|
* フォントファイルのマジックナンバー(先頭 4 bytes)
|
|
55
64
|
* .ttc(TrueTypeCollection)は pdf-lib がサブセット化できないため検知して弾く
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;IACpB,EAAE,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;IACrB,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;IAClB,KAAK,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC;CACV,CAAC;AAIX;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,qBAAqB;IACrB,aAAa,EAAE,CAAC;IAChB,aAAa,EAAE,EAAE;IACjB,sCAAsC;IACtC,UAAU,EAAE,CAAC;IACb,UAAU,EAAE,GAAG;IACf,6CAA6C;IAC7C,eAAe,EAAE,OAAO;IACxB,+BAA+B;IAC/B,cAAc,EAAE,EAAE;IAClB,cAAc,EAAE,KAAK;IACrB,4BAA4B;IAC5B,gBAAgB,EAAE,EAAE;IACpB,wBAAwB;IACxB,eAAe,EAAE,GAAG;IACpB,uBAAuB;IACvB,kBAAkB,EAAE,KAAK;IACzB,kBAAkB,EAAE,CAAC;CACb,CAAC;AAEX,gCAAgC;AAChC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAU,CAAC;AAEzE,kDAAkD;AAClD,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,MAAM;IACN,SAAS;IACT,KAAK;IACL,MAAM;IACN,cAAc;IACd,WAAW;IACX,QAAQ;CACA,CAAC;AAEX,qCAAqC;AACrC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;AAEvD;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,mCAAmC;IACnC,GAAG,EAAE,MAAM;CACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;IACpB,EAAE,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;IACrB,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;IAClB,KAAK,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC;CACV,CAAC;AAIX;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,qBAAqB;IACrB,aAAa,EAAE,CAAC;IAChB,aAAa,EAAE,EAAE;IACjB,sCAAsC;IACtC,UAAU,EAAE,CAAC;IACb,UAAU,EAAE,GAAG;IACf,6CAA6C;IAC7C,eAAe,EAAE,OAAO;IACxB,+BAA+B;IAC/B,cAAc,EAAE,EAAE;IAClB,cAAc,EAAE,KAAK;IACrB,4BAA4B;IAC5B,gBAAgB,EAAE,EAAE;IACpB,wBAAwB;IACxB,eAAe,EAAE,GAAG;IACpB,uBAAuB;IACvB,kBAAkB,EAAE,KAAK;IACzB,kBAAkB,EAAE,CAAC;CACb,CAAC;AAEX,gCAAgC;AAChC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAU,CAAC;AAEzE,kDAAkD;AAClD,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,MAAM;IACN,SAAS;IACT,KAAK;IACL,MAAM;IACN,cAAc;IACd,WAAW;IACX,QAAQ;CACA,CAAC;AAEX,qCAAqC;AACrC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;AAEvD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,eAAe,CAAC;AAExD;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,mCAAmC;IACnC,GAAG,EAAE,MAAM;CACH,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
7
7
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
8
|
-
import { CallToolRequestSchema, ListToolsRequestSchema
|
|
8
|
+
import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
9
9
|
import { PACKAGE_INFO } from './config.js';
|
|
10
10
|
import { tools } from './tools/definitions.js';
|
|
11
11
|
import { toolHandlers } from './tools/handlers.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AACnG,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;IACE,IAAI,EAAE,YAAY,CAAC,IAAI;IACvB,OAAO,EAAE,YAAY,CAAC,OAAO;CAC9B,EACD;IACE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;CAC5B,CACF,CAAC;AAEF,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IAC5D,KAAK;CACN,CAAC,CAAC,CAAC;AAEJ,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAChE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAEjD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACnE,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACxE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YAC9E,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,YAAY,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC7E,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,wBAAwB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC9F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -9,9 +9,17 @@
|
|
|
9
9
|
*
|
|
10
10
|
* 座標系は PDF 準拠(左下原点・pt)。生成系レンダラの top 基準とは異なる点に注意。
|
|
11
11
|
*/
|
|
12
|
-
import { PDFDocument, type RGB } from 'pdf-lib';
|
|
12
|
+
import { type PDFDocument, type PDFPage, type PDFRef, type RGB } from 'pdf-lib';
|
|
13
13
|
import type { AddAnnotationArgs } from '../types/index.js';
|
|
14
14
|
/** #rrggbb / #rgb を pdf-lib の RGB へ */
|
|
15
15
|
export declare function parseHexColor(hex: string): RGB;
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
export interface AddedAnnotation {
|
|
17
|
+
/** 追加後のそのページの注釈数 */
|
|
18
|
+
count: number;
|
|
19
|
+
/** 追加した注釈への参照(構造木へ結び付けるのに使う) */
|
|
20
|
+
ref: PDFRef;
|
|
21
|
+
/** 対象ページ */
|
|
22
|
+
page: PDFPage;
|
|
23
|
+
}
|
|
24
|
+
/** 注釈をページに追加する */
|
|
25
|
+
export declare function addAnnotation(doc: PDFDocument, args: AddAnnotationArgs): AddedAnnotation;
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*
|
|
10
10
|
* 座標系は PDF 準拠(左下原点・pt)。生成系レンダラの top 基準とは異なる点に注意。
|
|
11
11
|
*/
|
|
12
|
-
import {
|
|
12
|
+
import { PDFArray, PDFHexString, PDFName, PDFNumber, PDFString, rgb, } from 'pdf-lib';
|
|
13
13
|
/** #rrggbb / #rgb を pdf-lib の RGB へ */
|
|
14
14
|
export function parseHexColor(hex) {
|
|
15
15
|
const m = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(hex.trim());
|
|
@@ -25,7 +25,7 @@ export function parseHexColor(hex) {
|
|
|
25
25
|
function colorArray(doc, color) {
|
|
26
26
|
return doc.context.obj([color.red, color.green, color.blue]);
|
|
27
27
|
}
|
|
28
|
-
/**
|
|
28
|
+
/** 注釈をページに追加する */
|
|
29
29
|
export function addAnnotation(doc, args) {
|
|
30
30
|
const pages = doc.getPages();
|
|
31
31
|
const pageIndex = args.page - 1;
|
|
@@ -74,8 +74,9 @@ export function addAnnotation(doc, args) {
|
|
|
74
74
|
annots = context.obj([]);
|
|
75
75
|
page.node.set(PDFName.of('Annots'), annots);
|
|
76
76
|
}
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
const ref = context.register(dict);
|
|
78
|
+
annots.push(ref);
|
|
79
|
+
return { count: annots.size(), ref, page };
|
|
79
80
|
}
|
|
80
81
|
function defaultColor(type) {
|
|
81
82
|
switch (type) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"annotation.js","sourceRoot":"","sources":["../../src/services/annotation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"annotation.js","sourceRoot":"","sources":["../../src/services/annotation.ts"],"names":[],"mappings":"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"}
|
package/dist/services/builder.js
CHANGED
|
@@ -7,12 +7,15 @@
|
|
|
7
7
|
* 埋め込みは入力テキストが確定した後(グリフ欠落ポリシー適用後)に行う。
|
|
8
8
|
*/
|
|
9
9
|
import { PDFDocument, rgb } from 'pdf-lib';
|
|
10
|
-
import { PAGE_SIZES } from '../constants.js';
|
|
11
10
|
import { DEFAULTS } from '../config.js';
|
|
12
|
-
import {
|
|
11
|
+
import { PAGE_SIZES, RENDERER_GENERATED_CHARS } from '../constants.js';
|
|
12
|
+
import { inferLang } from '../utils/lang.js';
|
|
13
|
+
import { applyMissingGlyphPolicy, embedFontFor, openFont, } from './font-manager.js';
|
|
13
14
|
import { LayoutEngine } from './layout.js';
|
|
14
15
|
import { finalizePdf } from './output.js';
|
|
15
16
|
import { assertRenderable } from './renderers/text.js';
|
|
17
|
+
import { StructTreeBuilder } from './struct-tree.js';
|
|
18
|
+
import { applyPdfuaCatalog } from './xmp.js';
|
|
16
19
|
export async function buildPdf(opts, inputTexts, render) {
|
|
17
20
|
const doc = await PDFDocument.create();
|
|
18
21
|
const source = await openFont(opts.fontPath);
|
|
@@ -29,11 +32,29 @@ export async function buildPdf(opts, inputTexts, render) {
|
|
|
29
32
|
const warnings = [...applied.warnings];
|
|
30
33
|
const title = opts.title ? applied.texts[0] : undefined;
|
|
31
34
|
const texts = opts.title ? applied.texts.slice(1) : applied.texts;
|
|
32
|
-
//
|
|
33
|
-
|
|
35
|
+
// 描画確定後のテキストでサブセットして埋め込む。
|
|
36
|
+
// レンダラが入力に無い文字(箇条書きの '•' 等)を足すため、それらも必ず含める
|
|
37
|
+
const loaded = await embedFontFor(doc, source, [...applied.texts, RENDERER_GENERATED_CHARS]);
|
|
34
38
|
const pageName = opts.pageSize ?? DEFAULTS.pageSize;
|
|
35
39
|
const [pageWidth, pageHeight] = PAGE_SIZES[pageName];
|
|
36
40
|
const fontSize = opts.fontSize ?? DEFAULTS.fontSize;
|
|
41
|
+
// タグ付き(PDF/UA)の準備
|
|
42
|
+
let struct;
|
|
43
|
+
let lang;
|
|
44
|
+
if (opts.tagged) {
|
|
45
|
+
if (!title) {
|
|
46
|
+
throw new Error('tagged: true requires "title" — PDF/UA (ISO 14289-1, 7.1) mandates a document title.');
|
|
47
|
+
}
|
|
48
|
+
lang = opts.lang;
|
|
49
|
+
if (!lang) {
|
|
50
|
+
const inferred = inferLang(applied.texts.join('\n'));
|
|
51
|
+
lang = inferred.lang;
|
|
52
|
+
warnings.push(inferred.confident
|
|
53
|
+
? `Inferred document language as "${lang}"; pass "lang" explicitly to override.`
|
|
54
|
+
: `Inferred document language as "${lang}", but the text has no kana so it could also be Chinese. Pass "lang" explicitly — a wrong /Lang makes screen readers mispronounce the text.`);
|
|
55
|
+
}
|
|
56
|
+
struct = new StructTreeBuilder(doc);
|
|
57
|
+
}
|
|
37
58
|
const engine = new LayoutEngine(doc, {
|
|
38
59
|
pageWidth,
|
|
39
60
|
pageHeight,
|
|
@@ -41,17 +62,24 @@ export async function buildPdf(opts, inputTexts, render) {
|
|
|
41
62
|
font: loaded.font,
|
|
42
63
|
fontSize,
|
|
43
64
|
lineHeight: DEFAULTS.lineHeight,
|
|
65
|
+
struct,
|
|
44
66
|
});
|
|
45
67
|
// タイトルが指定されていれば本文冒頭に見出しとして描画(メタデータにも finalizePdf で設定)
|
|
46
68
|
if (title) {
|
|
69
|
+
struct?.begin('H1');
|
|
47
70
|
engine.drawParagraph(title, {
|
|
48
71
|
size: fontSize + 7,
|
|
49
72
|
color: rgb(0, 0, 0),
|
|
50
73
|
lineHeight: 1.2,
|
|
51
74
|
spaceAfter: 12,
|
|
52
75
|
});
|
|
76
|
+
struct?.end();
|
|
53
77
|
}
|
|
54
78
|
render(engine, loaded, texts);
|
|
79
|
+
if (struct) {
|
|
80
|
+
struct.finalize();
|
|
81
|
+
applyPdfuaCatalog(doc, { title: title, author: opts.author, lang: lang });
|
|
82
|
+
}
|
|
55
83
|
const result = await finalizePdf(doc, opts, loaded.name);
|
|
56
84
|
if (warnings.length > 0)
|
|
57
85
|
result.warnings = warnings;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/services/builder.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAqB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/services/builder.ts"],"names":[],"mappings":"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"}
|
package/dist/services/editor.js
CHANGED
|
@@ -13,14 +13,15 @@
|
|
|
13
13
|
* 署名を保持する増分更新(incremental_save)は Tier C の課題。
|
|
14
14
|
*/
|
|
15
15
|
import { readFile } from 'node:fs/promises';
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
16
|
+
import { basename, extname, join, resolve } from 'node:path';
|
|
17
|
+
import { degrees, PDFDocument } from 'pdf-lib';
|
|
18
18
|
import { LIMITS } from '../constants.js';
|
|
19
19
|
import { logger } from '../utils/logger.js';
|
|
20
20
|
import { parsePageSpec } from '../utils/page-spec.js';
|
|
21
21
|
import { addAnnotation as addAnnotationDict } from './annotation.js';
|
|
22
22
|
import { countBookmarks, setBookmarks } from './outline.js';
|
|
23
23
|
import { saveEdited } from './output.js';
|
|
24
|
+
import { appendAnnotationToStructTree } from './struct-append.js';
|
|
24
25
|
/** 入力バイト列に電子署名(/ByteRange)が含まれるかの軽量検査 */
|
|
25
26
|
export function containsSignature(bytes) {
|
|
26
27
|
// "/ByteRange" の ASCII 検索(署名辞書は非圧縮で現れるのが通例)
|
|
@@ -187,8 +188,19 @@ export async function addBookmarks(args) {
|
|
|
187
188
|
}
|
|
188
189
|
export async function addAnnotation(args) {
|
|
189
190
|
const { doc } = await loadForEdit(args.inputPath, args);
|
|
190
|
-
addAnnotationDict(doc, args);
|
|
191
|
-
|
|
191
|
+
const added = addAnnotationDict(doc, args);
|
|
192
|
+
// タグ付き PDF なら構造木にも結び付ける(PDF/UA 7.18.1-1 / 7.18.3-1)。
|
|
193
|
+
// タグ無し文書では何もしない — 注釈のためだけに構造木を作り始めない。
|
|
194
|
+
const warnings = [];
|
|
195
|
+
const linked = appendAnnotationToStructTree(doc, added.page, added.ref, args.alt);
|
|
196
|
+
if (linked.tagged && !args.alt) {
|
|
197
|
+
warnings.push('The document is tagged and the annotation was nested in an Annot structure element. ' +
|
|
198
|
+
'Pass "alt" to give assistive technology a description of it.');
|
|
199
|
+
}
|
|
200
|
+
const result = await saveEdited(doc, args);
|
|
201
|
+
if (warnings.length > 0)
|
|
202
|
+
result.warnings = warnings;
|
|
203
|
+
return result;
|
|
192
204
|
}
|
|
193
205
|
export async function splitPdf(inputPath, ranges, outputDir, prefix, opts) {
|
|
194
206
|
if (ranges.length > LIMITS.SPLIT_MAX_PARTS) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor.js","sourceRoot":"","sources":["../../src/services/editor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"editor.js","sourceRoot":"","sources":["../../src/services/editor.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
*
|
|
14
14
|
* .ttc(TrueTypeCollection)は非対応のため検知して弾く。
|
|
15
15
|
*/
|
|
16
|
-
import { PDFDocument, type PDFFont } from 'pdf-lib';
|
|
16
|
+
import { type PDFDocument, type PDFFont } from 'pdf-lib';
|
|
17
17
|
import type { MissingGlyphPolicy } from '../types/index.js';
|
|
18
18
|
/** 埋め込み前のフォント情報(グリフ照会に使う) */
|
|
19
19
|
export interface FontSource {
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { readFile } from 'node:fs/promises';
|
|
17
17
|
import { basename } from 'node:path';
|
|
18
|
-
import { StandardFonts } from 'pdf-lib';
|
|
19
18
|
import fontkit from '@pdf-lib/fontkit';
|
|
19
|
+
import { StandardFonts } from 'pdf-lib';
|
|
20
20
|
import subsetFont from 'subset-font';
|
|
21
21
|
import { ENV_KEYS } from '../config.js';
|
|
22
22
|
import { FONT_MAGIC } from '../constants.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"font-manager.js","sourceRoot":"","sources":["../../src/services/font-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,
|
|
1
|
+
{"version":3,"file":"font-manager.js","sourceRoot":"","sources":["../../src/services/font-manager.ts"],"names":[],"mappings":"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"}
|