@shuji-bonji/pdf-writer-mcp 0.9.2 → 0.11.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 CHANGED
@@ -2,6 +2,72 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [0.11.0] - 2026-07-17
6
+
7
+ Incremental updates learn tagged PDFs (B-7b'): dirty tracking generalised.
8
+
9
+ ### Added
10
+
11
+ - **`preserveSignatures` now works on tagged PDFs** — the v0.9.0 limitation
12
+ is lifted. The structure-tree appender (`struct-append.ts`) now *reports
13
+ which existing indirect objects it mutates* (StructTreeRoot, the parent
14
+ element whose `/K` grows, the ParentTree — or whichever object holds its
15
+ `/Nums` array — and the page carrying `/Tabs`), and the incremental
16
+ writer includes exactly those in the appended revision. Adding an
17
+ annotation to a signed *and* tagged PDF keeps both properties: measured
18
+ **veraPDF ua1 COMPLIANT (106/106)** on the incremental output and
19
+ `verify_signatures: VALID` on a really-signed fixture. Stacked increments
20
+ keep `ParentTreeNextKey` continuous across revisions.
21
+ - **`tag_form_fields` supports `preserveSignatures`** — PDF/UA form repair
22
+ on signed documents without invalidating approval signatures. `/TU`
23
+ writes are redefinitions of *existing* field dictionaries, so
24
+ `tagWidgets` also reports its dirtied refs. Certification signatures
25
+ (DocMDP) are refused at every permission level — structure (tagging)
26
+ changes are not among the permitted change types of §12.8.2.2. Measured:
27
+ a tagged-but-untagged-form document repaired via an incremental update is
28
+ **veraPDF ua1 COMPLIANT (106/106)** with a byte-identical prefix.
29
+
30
+ ### Notes
31
+
32
+ - The groundwork is deliberate: precise dirty tracking over the structure
33
+ tree is the mechanism `ensure_tagged` (Tier C) will build on.
34
+
35
+ ## [0.10.0] - 2026-07-17
36
+
37
+ Incremental updates grow up (B-7b) and `set_metadata` learns XMP (B-9).
38
+
39
+ ### Added
40
+
41
+ - **`preserveSignatures` for `set_metadata` and `add_bookmarks`** — the
42
+ signature-preserving incremental writer introduced in v0.9.0 for
43
+ annotations is now shared plumbing (`saveWithPreservedSignatures`) and
44
+ wired into two more tools. Measured against a really-signed PDF: two
45
+ stacked increments (metadata update, then bookmarks) keep
46
+ `verify_signatures: VALID` with byte-identical prefixes at every step.
47
+ DocMDP note: per ISO 32000-2 §12.8.2.2, metadata/outline changes are not
48
+ a permitted change type at *any* certification level, so certified
49
+ documents are always refused (annotations remain allowed at P=3).
50
+ - **`set_metadata` now keeps XMP in sync (B-9)** — on documents that carry
51
+ `/Metadata` (e.g. tagged output), updating the Info dictionary used to
52
+ leave `dc:title` etc. stale (found in SPEC-AUDIT Phase 1, §14.3.3). The
53
+ XMP packet is now regenerated from the updated Info values while
54
+ preserving the PDF/UA declaration (`pdfuaid:part`), `dc:language` and
55
+ `xmp:CreateDate`. The stream is replaced at the *same object ref*, so the
56
+ catalog stays untouched and the change rides incremental updates
57
+ naturally. New XMP fields: `dc:description` (Subject) and `pdf:Keywords`.
58
+ Measured: a tagged PDF re-titled via `set_metadata` stays veraPDF
59
+ **COMPLIANT (106/106)**.
60
+
61
+ ### Fixed
62
+
63
+ - **§7.5.6 trailer carry-over** — the incremental trailer now includes
64
+ *all* entries of the previous trailer (except position-dependent and
65
+ recomputed keys), not just Root/Info/ID: the previous trailer is parsed
66
+ from the original bytes with pdf-lib's `PDFObjectParser`, closing the
67
+ known v0.9.x gap (rare keys such as second-class names survive updates;
68
+ hybrid `XRefStm` is deliberately not carried). If the previous trailer
69
+ cannot be parsed, a warning is reported instead of failing.
70
+
5
71
  ## [0.9.2] - 2026-07-17
6
72
 
7
73
  SPEC-AUDIT Phase 1: the editing tools were audited clause-by-clause against
package/README.ja.md CHANGED
@@ -42,27 +42,27 @@ PDF/UA はタイトルを要求するため、`tagged: true` では `title` が
42
42
 
43
43
  | ツール | 役割 |
44
44
  |--------|------|
45
- | `set_metadata` | Info 辞書の更新(`title` / `author` / `subject` / `keywords` / `creator`)。指定フィールドのみ変更し、他は保持 |
45
+ | `set_metadata` | Info 辞書の更新(`title` / `author` / `subject` / `keywords` / `creator`)。指定フィールドのみ変更し、他は保持。XMP(`/Metadata`)を持つ文書では `dc:title` 等も同期再生成する(PDF/UA 宣言は保持)。`preserveSignatures` 対応 |
46
46
  | `merge_pdfs` | 2〜50 個の PDF を指定順に結合。メタデータは先頭ファイルから引き継ぎ |
47
47
  | `split_pdf` | ページ範囲ごとに 1 ファイルへ分割 |
48
48
  | `extract_pages` | 指定順を保持して抽出(並べ替えを兼ねる) |
49
49
  | `delete_pages` | ページ削除(全ページの削除はエラー) |
50
50
  | `reorder_pages` | 全ページの順列による並べ替え |
51
51
  | `rotate_pages` | 時計回りに回転(90/180/270)。既存の回転に加算 |
52
- | `add_bookmarks` | しおり(アウトライン)の設定。`children` で入れ子にでき、既存のしおりは置換 |
53
- | `add_annotation` | 付箋(`text`)/ ハイライト(`highlight`)/ 矩形(`square`)の注釈を追加。タグ付き PDF では `Annot` 構造要素に内包され PDF/UA 準拠を維持する(`alt` で説明を渡す)。`preserveSignatures: true` で**署名済み PDF の署名を保持したまま**追加できる — ISO 32000 の増分更新として末尾追記し、元のバイト列に一切触れない(タグ無し文書のみ) |
52
+ | `add_bookmarks` | しおり(アウトライン)の設定。`children` で入れ子にでき、既存のしおりは置換。`preserveSignatures` 対応 |
53
+ | `add_annotation` | 付箋(`text`)/ ハイライト(`highlight`)/ 矩形(`square`)の注釈を追加。タグ付き PDF では `Annot` 構造要素に内包され PDF/UA 準拠を維持する(`alt` で説明を渡す)。`preserveSignatures: true` で**署名済み PDF の署名を保持したまま**追加できる — ISO 32000 の増分更新として末尾追記し、元のバイト列に一切触れない。タグ付き PDF では構造木の変更も同じ増分に載る(v0.11.0) |
54
54
  | `attach_file` | ファイルを埋め込む(`/Names /EmbeddedFiles` + catalog `/AF` + `/AFRelationship`)。PDF/A-3 が要求する形式で、機械可読データを文書に同梱する |
55
55
  | `stamp_page_numbers` | ページ番号を刻む(`{n}` / `{total}`、6 箇所の配置、`pages`、`startAt`)。タグ付き PDF では Artifact になるため準拠を維持する |
56
56
  | `fill_form` | AcroForm に値を記入する。日本語は埋め込みフォントで描画。同時にフラット化も可能 |
57
57
  | `flatten_form` | フォームを静的な内容に焼き込む。タグ付き PDF は既定で拒否(PDF/UA が壊れるため) |
58
- | `tag_form_fields` | タグ付き PDF 内のフォームを PDF/UA-1 準拠へ修復する。Widget を `Form` 構造要素に内包(7.18.4-1)、`/Tabs S` を設定(7.18.3-1)、代替名 `/TU` を付与(7.18.1-3)。`labels` で人間可読な名前を渡す。冪等なので何度実行しても安全 |
58
+ | `tag_form_fields` | タグ付き PDF 内のフォームを PDF/UA-1 準拠へ修復する。Widget を `Form` 構造要素に内包(7.18.4-1)、`/Tabs S` を設定(7.18.3-1)、代替名 `/TU` を付与(7.18.1-3)。`labels` で人間可読な名前を渡す。冪等なので何度実行しても安全。`preserveSignatures` 対応(承認署名のみ) |
59
59
  | `add_watermark` | 斜めの透かしを重ねる("社外秘" / "DRAFT")。既定で本文の背面。タグ付き PDF では Artifact になる |
60
60
 
61
61
  共通オプション: `outputPath` / `returnBase64` / `allowBreakingSignatures`。
62
62
 
63
63
  ページ指定は `"1,3-5,8-"` 形式(1 始まり。`-3` は先頭から 3 ページまで、`8-` は 8 ページから最終まで)。指定順を保持し、重複は除去します。
64
64
 
65
- > **署名について**: pdf-lib は保存時にファイル全体を再構築するため、通常の編集では既存の電子署名は必ず無効化されます。`/ByteRange` を含む PDF は既定でエラーとし、`allowBreakingSignatures: true` で破壊的に続行するか、`add_annotation` に限り `preserveSignatures: true`(v0.9.0)で**署名を保持したまま**増分更新で追加できます。実測: 実署名(CMS)PDF への追加後も pdf-verify-mcp は署名 **VALID** + 追記分を合法な増分リビジョン 1 件と報告します。
65
+ > **署名について**: pdf-lib は保存時にファイル全体を再構築するため、通常の編集では既存の電子署名は必ず無効化されます。`/ByteRange` を含む PDF は既定でエラーとし、`allowBreakingSignatures: true` で破壊的に続行するか、`preserveSignatures: true` で**署名を保持したまま** ISO 32000 の増分更新として編集できます。対応ツール: `add_annotation`(v0.11.0 からタグ付き文書も可 — 構造木の変更も同じ増分に載る)、`set_metadata` / `add_bookmarks` / `tag_form_fields`。認証署名(DocMDP)の許可レベルに反する変更は拒否されます(§12.8.2.2)。実測: 実署名(CMS)PDF への多段の増分後も署名 **VALID**、タグ付き文書への増分構造更新後も veraPDF **COMPLIANT(106/106)** です。
66
66
 
67
67
  ## インストール
68
68
 
@@ -183,7 +183,9 @@ TEST_FONT_PATH=/path/to/NotoSansJP-Regular.otf npm test
183
183
  - [x] コード衛生・family 整合 — McpServer + Zod、構造化エラー、絶対パス強制、stdout ガード、tool annotations、決定論的出力(v0.7.0)
184
184
  - [x] `tag_form_fields` — タグ付き PDF 内フォームの PDF/UA 修復。veraPDF で COMPLIANT を確認(v0.8.0)
185
185
  - [x] Tier C 第1弾 — `add_annotation` の署名保持増分更新。実署名(CMS)で pdf-verify-mcp の VALID を確認(v0.9.0)
186
- - [ ] Tier C 続き タグ付き文書の増分更新・他ツールへの展開、`ensure_tagged`、`edit_text`
186
+ - [x] 増分更新を `set_metadata` / `add_bookmarks` へ展開、trailer 全エントリ引き継ぎ(§7.5.6)、XMP と Info の同期(v0.10.0)
187
+ - [x] タグ付き文書の増分更新 — 構造木の dirty 追跡を一般化。`tag_form_fields` も `preserveSignatures` 対応(v0.11.0)
188
+ - [ ] Tier C 続き — コンテンツストリーム系ツール(透かし・ページ番号)への展開、`ensure_tagged`、`edit_text`
187
189
  - [ ] 出力パイプライン Skill(write → pdf-reader で読み戻し → pdf-verify で品質ゲート)
188
190
  - [ ] 画像の代替テキスト(`Figure` + `/Alt`)
189
191
  - [ ] `.ttc` からのフェイス自動抽出
package/README.md CHANGED
@@ -42,27 +42,27 @@ PDF/UA mandates a document title, so `tagged: true` requires `title`. `lang` (BC
42
42
 
43
43
  | Tool | Purpose |
44
44
  |------|---------|
45
- | `set_metadata` | Update Info dictionary fields (`title` / `author` / `subject` / `keywords` / `creator`), preserving the rest |
45
+ | `set_metadata` | Update Info dictionary fields (`title` / `author` / `subject` / `keywords` / `creator`), preserving the rest. On documents carrying XMP (`/Metadata`), `dc:title` etc. are regenerated in sync (keeping the PDF/UA declaration). Supports `preserveSignatures` |
46
46
  | `merge_pdfs` | Concatenate 2–50 PDFs in order; metadata inherited from the first file |
47
47
  | `split_pdf` | One output file per page range |
48
48
  | `extract_pages` | Extract pages in the requested order (doubles as reordering) |
49
49
  | `delete_pages` | Remove pages (deleting every page is rejected) |
50
50
  | `reorder_pages` | Reorder by an explicit permutation of all pages |
51
51
  | `rotate_pages` | Rotate clockwise (90/180/270), accumulating over existing rotation |
52
- | `add_bookmarks` | Set the outline (bookmarks); nestable via `children`, replaces any existing outline |
53
- | `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. With `preserveSignatures: true`, a **signed PDF keeps its signatures**: the annotation is appended as an ISO 32000 incremental update, leaving the original bytes untouched (untagged documents only) |
52
+ | `add_bookmarks` | Set the outline (bookmarks); nestable via `children`, replaces any existing outline. Supports `preserveSignatures` |
53
+ | `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. With `preserveSignatures: true`, a **signed PDF keeps its signatures**: the annotation is appended as an ISO 32000 incremental update, leaving the original bytes untouched on tagged PDFs the structure-tree changes ride the same increment (v0.11.0) |
54
54
  | `attach_file` | Embed a file (`/Names /EmbeddedFiles` + catalog `/AF` + `/AFRelationship`) — the PDF/A-3 shape for bundling machine-readable data with a document |
55
55
  | `stamp_page_numbers` | Stamp page numbers (`{n}` / `{total}`, six positions, `pages`, `startAt`). Becomes an artifact on tagged PDFs, so conformance holds |
56
56
  | `fill_form` | Fill AcroForm fields. Japanese values via an embedded font; can flatten in the same pass |
57
57
  | `flatten_form` | Flatten a form into static content. Refuses tagged PDFs by default (breaks PDF/UA) |
58
- | `tag_form_fields` | Repair the form inside a tagged PDF for PDF/UA-1: nest widgets in `Form` structure elements (7.18.4-1), set `/Tabs S` (7.18.3-1), add `/TU` alternate names (7.18.1-3). Pass `labels` with human-readable names; idempotent, so safe to re-run |
58
+ | `tag_form_fields` | Repair the form inside a tagged PDF for PDF/UA-1: nest widgets in `Form` structure elements (7.18.4-1), set `/Tabs S` (7.18.3-1), add `/TU` alternate names (7.18.1-3). Pass `labels` with human-readable names; idempotent, so safe to re-run. Supports `preserveSignatures` (approval signatures only) |
59
59
  | `add_watermark` | Overlay a diagonal watermark ("社外秘" / "DRAFT"). Behind the body content by default; artifact on tagged PDFs |
60
60
 
61
61
  Shared options: `outputPath`, `returnBase64`, `allowBreakingSignatures`.
62
62
 
63
63
  Page specs use `"1,3-5,8-"` (1-based; `-3` means up to page 3, `8-` means page 8 to the end). Order is preserved and duplicates are removed.
64
64
 
65
- > **Signatures**: pdf-lib rewrites the whole file on save, so editing normally invalidates existing signatures. PDFs containing `/ByteRange` are rejected by default; pass `allowBreakingSignatures: true` to proceed destructively — or, for `add_annotation`, pass `preserveSignatures: true` (v0.9.0) to append an incremental update that keeps every signature valid. Measured: after annotating a really-signed PDF, pdf-verify-mcp reports the signature **VALID** and the added bytes as one legal incremental revision.
65
+ > **Signatures**: pdf-lib rewrites the whole file on save, so editing normally invalidates existing signatures. PDFs containing `/ByteRange` are rejected by default; pass `allowBreakingSignatures: true` to proceed destructively — or pass `preserveSignatures: true` to append an ISO 32000 incremental update that keeps every signature valid. Supported by `add_annotation` (tagged PDFs included since v0.11.0 — the structure-tree changes ride the same increment), `set_metadata`, `add_bookmarks` and `tag_form_fields`. Certified documents (DocMDP) are refused when the change type is not permitted by the certification level (§12.8.2.2). Measured: stacked increments on a really-signed PDF keep pdf-verify-mcp reporting **VALID**, and incremental structure updates on tagged PDFs stay veraPDF **COMPLIANT (106/106)**.
66
66
 
67
67
  ## Install
68
68
 
@@ -183,7 +183,9 @@ TEST_FONT_PATH=/path/to/NotoSansJP-Regular.otf npm test
183
183
  - [x] Code hygiene / family alignment — McpServer + Zod, structured errors, absolute-path enforcement, stdout guard, tool annotations, deterministic output (v0.7.0)
184
184
  - [x] `tag_form_fields` — PDF/UA repair for forms in tagged PDFs, verified COMPLIANT by veraPDF (v0.8.0)
185
185
  - [x] Tier C first milestone — signature-preserving incremental updates for `add_annotation`, verified by pdf-verify-mcp against a real CMS signature (v0.9.0)
186
- - [ ] Tier C continued incremental updates for tagged PDFs and more tools, `ensure_tagged`, `edit_text`
186
+ - [x] Incremental updates extended to `set_metadata` / `add_bookmarks`, full trailer carry-over (§7.5.6), XMP kept in sync with Info (v0.10.0)
187
+ - [x] Incremental updates on tagged PDFs — generalised dirty tracking over the structure tree; `tag_form_fields` gains `preserveSignatures` (v0.11.0)
188
+ - [ ] Tier C continued — incremental updates for content-stream tools (watermarks, page numbers), `ensure_tagged`, `edit_text`
187
189
  - [ ] Publish-pipeline skill (write → read back with pdf-reader → gate with pdf-verify)
188
190
  - [ ] Images with alt text (`Figure` + `/Alt`)
189
191
  - [ ] Automatic face extraction from `.ttc`
package/dist/errors.js CHANGED
@@ -50,7 +50,8 @@ export const NEXT_ACTIONS = {
50
50
  preserveSignatures: () => ({
51
51
  action: 'retry_with_preserveSignatures',
52
52
  reason: '署名を保持したまま、増分更新(元バイト列に触れない末尾追記)で編集できます。' +
53
- '現在は add_annotation のみ・タグ無し文書のみ対応。"preserveSignatures": true を足して再試行してください',
53
+ '対応: add_annotation / set_metadata / add_bookmarks / tag_form_fields(タグ付き文書可)。' +
54
+ '"preserveSignatures": true を足して再試行してください',
54
55
  example: { preserveSignatures: true },
55
56
  }),
56
57
  allowBreakingSignatures: () => ({
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AA8CH,gDAAgD;AAChD,MAAM,OAAO,cAAe,SAAQ,KAAK;IAGrB,IAAI;IACJ,OAAO;IAHzB,YACE,OAAe,EACC,IAAqB,EACrB,OAAO,GAInB,EAAE;QAEN,KAAK,CAAC,OAAO,CAAC,CAAC;oBAPC,IAAI;uBACJ,OAAO;QAOvB,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,wDAAwD;AACxD,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,OAAO,IAAI,cAAc,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;AACzD,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;QACpC,MAAM,GAAG,GAAuB,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QAC3E,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI;YAAE,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACtD,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxE,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;QAChD,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS;YAAE,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QACnF,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;IAC1D,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;AAC1D,CAAC;AAED,kDAAkD;AAClD,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,kBAAkB,EAAE,GAAe,EAAE,CAAC,CAAC;QACrC,MAAM,EAAE,+BAA+B;QACvC,MAAM,EACJ,wCAAwC;YACxC,2EAA2E;QAC7E,OAAO,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE;KACtC,CAAC;IACF,uBAAuB,EAAE,GAAe,EAAE,CAAC,CAAC;QAC1C,MAAM,EAAE,oCAAoC;QAC5C,MAAM,EACJ,oEAAoE;QACtE,OAAO,EAAE,EAAE,uBAAuB,EAAE,IAAI,EAAE;KAC3C,CAAC;IACF,iBAAiB,EAAE,GAAe,EAAE,CAAC,CAAC;QACpC,MAAM,EAAE,8BAA8B;QACtC,MAAM,EAAE,6DAA6D;QACrE,OAAO,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE;KACrC,CAAC;IACF,eAAe,EAAE,GAAe,EAAE,CAAC,CAAC;QAClC,MAAM,EAAE,qBAAqB;QAC7B,MAAM,EACJ,8FAA8F;QAChG,OAAO,EAAE,EAAE,QAAQ,EAAE,iCAAiC,EAAE;KACzD,CAAC;IACF,wBAAwB,EAAE,GAAe,EAAE,CAAC,CAAC;QAC3C,MAAM,EAAE,2BAA2B;QACnC,MAAM,EACJ,8FAA8F;QAChG,OAAO,EAAE,EAAE,cAAc,EAAE,SAAS,EAAE;KACvC,CAAC;IACF,aAAa,EAAE,CAAC,IAAa,EAAc,EAAE,CAAC,CAAC;QAC7C,MAAM,EAAE,kBAAkB;QAC1B,MAAM,EAAE,mCAAmC;QAC3C,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;KAChD,CAAC;CACM,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
@@ -34,6 +34,7 @@ import { formatPageNumber, stampPage } from './page-number.js';
34
34
  import { assertRenderable } from './renderers/text.js';
35
35
  import { appendAnnotationToStructTree, isTagged, markArtifactOnPage } from './struct-append.js';
36
36
  import { watermarkPage } from './watermark.js';
37
+ import { syncXmpWithInfo } from './xmp.js';
37
38
  /** 入力バイト列に電子署名(/ByteRange)が含まれるかの軽量検査 */
38
39
  export function containsSignature(bytes) {
39
40
  // "/ByteRange" の ASCII 検索(署名辞書は非圧縮で現れるのが通例)
@@ -86,10 +87,69 @@ export async function loadForEdit(filePath, opts) {
86
87
  return { doc, absPath, bytes };
87
88
  }
88
89
  // ---------------------------------------------------------------------------
90
+ // 増分更新(preserveSignatures)の共通部品
91
+ // ---------------------------------------------------------------------------
92
+ /**
93
+ * DocMDP(認証署名)の許可レベル検査(ISO 32000-2 §12.8.2.2)。
94
+ * 注釈は P=3 でのみ許可。メタデータ・しおり等の変更はどの P でも許可されない
95
+ * (P=2 はフォーム記入と署名、P=3 は + 注釈のみ)。
96
+ */
97
+ function assertDocMdpAllows(doc, change) {
98
+ const p = findDocMdpPermission(doc);
99
+ if (p === undefined)
100
+ return; // 承認署名のみ — 増分更新は合法(「署名後の変更あり」にはなる)
101
+ if (change === 'annotation' && p >= 3)
102
+ return;
103
+ const label = change === 'annotation'
104
+ ? p === 1
105
+ ? 'the author declared the document final; any change (except DSS/DTS) invalidates it.'
106
+ : 'only form fill-in and signing are permitted; annotations are not.'
107
+ : change === 'structure'
108
+ ? 'structure (tagging) changes are not among the permitted change types at any level.'
109
+ : 'metadata and outline changes are not among the permitted change types at any level.';
110
+ throw new PdfWriterError(`This PDF carries a certification signature (DocMDP) with permission level P=${p} — ${label}` +
111
+ ' Even a signature-preserving incremental update would be flagged as a disallowed change.', 'SIGNED_PDF', {
112
+ retryable: true,
113
+ hint: 'ISO 32000-2 §12.8.2.2: P=2 permits form fill-in; P=3 additionally permits annotations.',
114
+ next_actions: [NEXT_ACTIONS.allowBreakingSignatures()],
115
+ });
116
+ }
117
+ /** ModificationDate を更新し、既存 Info オブジェクトなら dirty に積む */
118
+ function touchModificationDate(doc, since, dirty) {
119
+ doc.setModificationDate(outputDate());
120
+ const info = doc.context.trailerInfo.Info;
121
+ if (info instanceof PDFRef && info.objectNumber <= since)
122
+ dirty.push(info);
123
+ }
124
+ /** 増分更新でビルドして保存する(前方バイト一致 = 署名保持) */
125
+ async function saveWithPreservedSignatures(doc, originalBytes, opts, dirtyRefs, since, what) {
126
+ const update = buildIncrementalUpdate({
127
+ original: originalBytes,
128
+ doc,
129
+ dirtyRefs,
130
+ sinceObjectNumber: since,
131
+ });
132
+ logger.info('Editor', `${what} via incremental update (${update.objectsWritten} object(s), ${update.xrefStyle} xref, ` +
133
+ `+${update.bytes.length - originalBytes.length} bytes); signatures preserved`);
134
+ const saved = await saveRawBytes(update.bytes, doc.getPageCount(), opts);
135
+ const result = { ...saved, incremental: true };
136
+ if (update.warnings.length > 0) {
137
+ result.warnings = [...(result.warnings ?? []), ...update.warnings];
138
+ }
139
+ return result;
140
+ }
141
+ // ---------------------------------------------------------------------------
89
142
  // Tier A ツール本体(ページ操作は page-ops.ts へ)
90
143
  // ---------------------------------------------------------------------------
91
144
  export async function setMetadata(args) {
92
- const { doc } = await loadForEdit(args.inputPath, args);
145
+ const { doc, bytes } = await loadForEdit(args.inputPath, args);
146
+ const preserve = args.preserveSignatures === true;
147
+ if (preserve) {
148
+ assertDocMdpAllows(doc, 'metadata-or-outline');
149
+ reserveExistingObjectNumbers(doc, bytes);
150
+ }
151
+ const since = doc.context.largestObjectNumber;
152
+ const dirty = [];
93
153
  if (args.title !== undefined)
94
154
  doc.setTitle(args.title);
95
155
  if (args.author !== undefined)
@@ -100,45 +160,61 @@ export async function setMetadata(args) {
100
160
  doc.setKeywords(args.keywords);
101
161
  if (args.creator !== undefined)
102
162
  doc.setCreator(args.creator);
103
- return saveEdited(doc, args);
163
+ // B-9(SPEC-AUDIT): XMP を持つ文書では Info と /Metadata を同期させる
164
+ const sync = syncXmpWithInfo(doc);
165
+ const warnings = [...sync.warnings];
166
+ if (sync.updated) {
167
+ warnings.push('The document carries XMP metadata (/Metadata); it was regenerated to stay ' +
168
+ 'consistent with the updated Info dictionary (dc:title etc.).');
169
+ if (sync.ref && sync.ref.objectNumber <= since)
170
+ dirty.push(sync.ref);
171
+ if (sync.catalogTouched && doc.context.trailerInfo.Root instanceof PDFRef) {
172
+ dirty.push(doc.context.trailerInfo.Root);
173
+ }
174
+ }
175
+ if (preserve) {
176
+ touchModificationDate(doc, since, dirty);
177
+ const result = await saveWithPreservedSignatures(doc, bytes, args, dirty, since, 'Updated metadata');
178
+ if (warnings.length > 0)
179
+ result.warnings = [...(result.warnings ?? []), ...warnings];
180
+ return result;
181
+ }
182
+ const result = await saveEdited(doc, args);
183
+ if (warnings.length > 0)
184
+ result.warnings = [...(result.warnings ?? []), ...warnings];
185
+ return result;
104
186
  }
105
187
  export async function addBookmarks(args) {
106
188
  const total = countBookmarks(args.bookmarks);
107
189
  if (total > LIMITS.BOOKMARK_MAX_TOTAL) {
108
190
  throw invalidArg(`too many bookmarks (${total}, max ${LIMITS.BOOKMARK_MAX_TOTAL})`);
109
191
  }
110
- const { doc } = await loadForEdit(args.inputPath, args);
192
+ const { doc, bytes } = await loadForEdit(args.inputPath, args);
193
+ const preserve = args.preserveSignatures === true;
194
+ if (preserve) {
195
+ assertDocMdpAllows(doc, 'metadata-or-outline');
196
+ reserveExistingObjectNumbers(doc, bytes);
197
+ }
198
+ const since = doc.context.largestObjectNumber;
111
199
  const added = setBookmarks(doc, args.bookmarks);
112
200
  logger.info('Editor', `Set ${added} bookmark(s)`);
201
+ if (preserve) {
202
+ // setBookmarks は catalog /Outlines を書き換える(新規オブジェクト群は自動追従)
203
+ const dirty = [];
204
+ if (doc.context.trailerInfo.Root instanceof PDFRef) {
205
+ dirty.push(doc.context.trailerInfo.Root);
206
+ }
207
+ touchModificationDate(doc, since, dirty);
208
+ return saveWithPreservedSignatures(doc, bytes, args, dirty, since, `Set ${added} bookmark(s)`);
209
+ }
113
210
  return saveEdited(doc, args);
114
211
  }
115
212
  export async function addAnnotation(args) {
116
213
  const { doc, bytes } = await loadForEdit(args.inputPath, args);
117
214
  // --- 署名保持モード(Tier C・ADR-11): 元バイト列に触れず増分更新で追記する ---
118
215
  if (args.preserveSignatures) {
119
- if (isTagged(doc)) {
120
- throw new PdfWriterError('preserveSignatures on a tagged PDF is not supported yet: nesting the annotation in ' +
121
- 'an Annot structure element (PDF/UA 7.18.1-1) rewrites existing structure objects ' +
122
- 'that the incremental writer does not track in this first milestone.', 'UNSUPPORTED_PDF_FEATURE', {
123
- hint: 'Tagged + signature-preserving annotation is a later Tier C milestone. ' +
124
- 'If invalidating the signature is acceptable, retry with "allowBreakingSignatures": true.',
125
- });
126
- }
127
- // 認証署名(DocMDP)の許可レベル検査(ISO 32000-2 §12.8.2.2):
128
- // 注釈の追加が許されるのは P=3 のみ。P=1(変更禁止)/ P=2(フォームまで)では
129
- // 増分更新が合法でも認証署名の検証が「許可されない変更」として失敗する。
130
- const docMdpP = findDocMdpPermission(doc);
131
- if (docMdpP !== undefined && docMdpP < 3) {
132
- throw new PdfWriterError(`This PDF carries a certification signature (DocMDP) with permission level P=${docMdpP} — ` +
133
- (docMdpP === 1
134
- ? 'the author declared the document final; any change (except DSS/DTS) invalidates it.'
135
- : 'only form fill-in and signing are permitted; annotations are not.') +
136
- ' Even a signature-preserving incremental update would be flagged as a disallowed change.', 'SIGNED_PDF', {
137
- retryable: true,
138
- hint: 'ISO 32000-2 §12.8.2.2: annotation changes require DocMDP P=3.',
139
- next_actions: [NEXT_ACTIONS.allowBreakingSignatures()],
140
- });
141
- }
216
+ // 注釈の追加が許されるのは DocMDP P=3 のみ(承認署名なら制約なし)
217
+ assertDocMdpAllows(doc, 'annotation');
142
218
  // 容器ストリーム等の「登録されない番号」との衝突を防いでから採番を始める
143
219
  reserveExistingObjectNumbers(doc, bytes);
144
220
  const since = doc.context.largestObjectNumber;
@@ -148,21 +224,22 @@ export async function addAnnotation(args) {
148
224
  // /Annots が直接配列 or 新設 → ページオブジェクトを再定義
149
225
  const annotsRaw = added.page.node.get(PDFName.of('Annots'));
150
226
  const dirtyRefs = [annotsRaw instanceof PDFRef ? annotsRaw : added.page.ref];
151
- // ModificationDate の更新も増分に含める(Info が既存なら再定義、無ければ新規扱い)
152
- doc.setModificationDate(outputDate());
153
- const info = doc.context.trailerInfo.Info;
154
- if (info instanceof PDFRef && info.objectNumber <= since)
155
- dirtyRefs.push(info);
156
- const update = buildIncrementalUpdate({
157
- original: bytes,
158
- doc,
159
- dirtyRefs,
160
- sinceObjectNumber: since,
161
- });
162
- logger.info('Editor', `Added annotation via incremental update (${update.objectsWritten} object(s), ` +
163
- `${update.xrefStyle} xref, +${update.bytes.length - bytes.length} bytes); signatures preserved`);
164
- const saved = await saveRawBytes(update.bytes, doc.getPageCount(), args);
165
- return { ...saved, incremental: true };
227
+ // タグ付き文書なら構造木へも結び付け、変更された既存オブジェクトを dirty に合成する
228
+ // (B-7b': StructTreeRoot / 親要素 / ParentTree / page(/Tabs) を struct-append が報告する)
229
+ const warnings = [];
230
+ const linked = appendAnnotationToStructTree(doc, added.page, added.ref, args.alt);
231
+ if (linked.tagged) {
232
+ dirtyRefs.push(...linked.dirtiedRefs);
233
+ if (!args.alt) {
234
+ warnings.push('The document is tagged and the annotation was nested in an Annot structure element. ' +
235
+ 'Pass "alt" to give assistive technology a description of it.');
236
+ }
237
+ }
238
+ touchModificationDate(doc, since, dirtyRefs);
239
+ const result = await saveWithPreservedSignatures(doc, bytes, args, dirtyRefs, since, 'Added annotation');
240
+ if (warnings.length > 0)
241
+ result.warnings = [...(result.warnings ?? []), ...warnings];
242
+ return result;
166
243
  }
167
244
  const added = addAnnotationDict(doc, args);
168
245
  // タグ付き PDF なら構造木にも結び付ける(PDF/UA 7.18.1-1 / 7.18.3-1)。
@@ -362,7 +439,8 @@ function flattenAndWarn(doc, allowBreakingTags, warnings) {
362
439
  * Tier C の ensure_tagged の領分)。
363
440
  */
364
441
  export async function tagFormFields(args) {
365
- const { doc } = await loadForEdit(args.inputPath, args);
442
+ const { doc, bytes } = await loadForEdit(args.inputPath, args);
443
+ const preserve = args.preserveSignatures === true;
366
444
  if (!isTagged(doc)) {
367
445
  throw new PdfWriterError(`"${args.inputPath}" is not a tagged PDF, so there is no structure tree to repair. ` +
368
446
  'tag_form_fields fixes forms inside already-tagged PDFs (PDF/UA-1 7.18.4).', 'INVALID_ARGUMENT', {
@@ -377,6 +455,12 @@ export async function tagFormFields(args) {
377
455
  if (form.getFields().length === 0) {
378
456
  throw invalidArg(`"${args.inputPath}" has no AcroForm fields to tag.`);
379
457
  }
458
+ if (preserve) {
459
+ // 構造タグ付けは DocMDP の許可種別に含まれない(認証文書は全レベルで拒否)
460
+ assertDocMdpAllows(doc, 'structure');
461
+ reserveExistingObjectNumbers(doc, bytes);
462
+ }
463
+ const since = doc.context.largestObjectNumber;
380
464
  const outcome = tagWidgets(doc, args.labels ?? {});
381
465
  const warnings = [];
382
466
  if (outcome.unlabeled.length > 0) {
@@ -390,6 +474,20 @@ export async function tagFormFields(args) {
390
474
  }
391
475
  logger.info('Editor', `Tagged ${outcome.tagged} widget(s) into Form structure elements` +
392
476
  (outcome.skipped > 0 ? `, ${outcome.skipped} already tagged` : ''));
477
+ if (preserve) {
478
+ const dirty = [...outcome.dirtiedRefs];
479
+ touchModificationDate(doc, since, dirty);
480
+ const saved = await saveWithPreservedSignatures(doc, bytes, args, dirty, since, `Tagged ${outcome.tagged} widget(s)`);
481
+ return {
482
+ ...saved,
483
+ taggedWidgets: outcome.tagged,
484
+ skippedWidgets: outcome.skipped,
485
+ fields: listFields(doc),
486
+ warnings: [...(saved.warnings ?? []), ...warnings].length > 0
487
+ ? [...(saved.warnings ?? []), ...warnings]
488
+ : undefined,
489
+ };
490
+ }
393
491
  // 値は変えないので pdf-lib の外観再生成(Helvetica)を走らせない
394
492
  const saved = await saveEdited(doc, args, { updateFieldAppearances: false });
395
493
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"editor.js","sourceRoot":"","sources":["../../src/services/editor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"editor.js","sourceRoot":"","sources":["../../src/services/editor.ts"],"names":[],"mappings":"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"}
@@ -18,7 +18,7 @@
18
18
  * 消して外観を素のページ内容に焼き込むため、Form 構造要素が宙に浮き準拠が壊れる。
19
19
  * そのため flatten はタグ付き文書では既定で拒否する。
20
20
  */
21
- import { type PDFDocument, type PDFField, type PDFFont, type PDFForm } from 'pdf-lib';
21
+ import { type PDFDocument, type PDFField, type PDFFont, type PDFForm, PDFRef } from 'pdf-lib';
22
22
  /** フィールドに設定できる値 */
23
23
  export type FieldValue = string | number | boolean | string[];
24
24
  export type FieldKind = 'text' | 'checkbox' | 'dropdown' | 'optionlist' | 'radio' | 'button' | 'signature' | 'unknown';
@@ -84,6 +84,8 @@ export interface TagWidgetsOutcome {
84
84
  orphaned: string[];
85
85
  /** /TU をフィールド名で代用したフィールド名(labels 未指定・既存 /TU 無し) */
86
86
  unlabeled: string[];
87
+ /** 変更した既存の間接オブジェクト(B-7b' = 増分更新の dirty 追跡) */
88
+ dirtiedRefs: PDFRef[];
87
89
  }
88
90
  /**
89
91
  * タグ付き PDF のフォームを PDF/UA-1 準拠へ修復する本体。
@@ -315,6 +315,10 @@ export function tagWidgets(doc, labels) {
315
315
  if (!form.getFieldMaybe(name))
316
316
  throw unknownFieldError(name, form);
317
317
  }
318
+ const dirtied = new Map();
319
+ const markDirty = (ref) => {
320
+ dirtied.set(ref.toString(), ref);
321
+ };
318
322
  // 7.18.1-3: /TU(代替フィールド名)
319
323
  const unlabeled = [];
320
324
  for (const field of form.getFields()) {
@@ -323,14 +327,22 @@ export function tagWidgets(doc, labels) {
323
327
  const label = labels[name];
324
328
  if (label !== undefined) {
325
329
  dict.set(PDFName.of('TU'), PDFHexString.fromText(label));
330
+ markDirty(field.ref); // 既存フィールド辞書の変更
326
331
  }
327
332
  else if (dict.get(PDFName.of('TU')) === undefined) {
328
333
  dict.set(PDFName.of('TU'), PDFHexString.fromText(name));
329
334
  unlabeled.push(name);
335
+ markDirty(field.ref);
330
336
  }
331
337
  }
332
338
  // 7.18.4-1 / 7.18.3-1: Widget を Form 構造要素へ
333
- const outcome = { tagged: 0, skipped: 0, orphaned: [], unlabeled };
339
+ const outcome = {
340
+ tagged: 0,
341
+ skipped: 0,
342
+ orphaned: [],
343
+ unlabeled,
344
+ dirtiedRefs: [],
345
+ };
334
346
  for (const w of enumerateWidgets(doc)) {
335
347
  if (w.hasStructParent) {
336
348
  outcome.skipped++;
@@ -341,9 +353,13 @@ export function tagWidgets(doc, labels) {
341
353
  continue;
342
354
  }
343
355
  const appended = appendWidgetToStructTree(doc, w.page, w.widgetRef);
344
- if (appended.tagged)
356
+ if (appended.tagged) {
345
357
  outcome.tagged++;
358
+ for (const ref of appended.dirtiedRefs)
359
+ markDirty(ref);
360
+ }
346
361
  }
362
+ outcome.dirtiedRefs = [...dirtied.values()];
347
363
  return outcome;
348
364
  }
349
365
  //# sourceMappingURL=form.js.map