変更履歴
リリース履歴
PDFlibPas ライブラリのバージョン履歴。エントリは新しい順に並んでおり、各リリースはプロジェクトのリリースポリシーに従ってセマンティックバージョニングに準拠します。
言語:English (US)English (UK)Español (España)Español (Latinoamérica)DeutschFrançaisItaliano日本語Português (Brasil)NederlandsSvenskaPolskiTürkçe한국어العربيةРусский简体中文繁體中文
v3.56.42 2026-05-27
- v3.56.41 で導入したバッファーベースの AES-256 復号パスを修正し、呼び出し側が暗号文バッファーを提供した同じ
AnsiStringに復号結果を代入してもアクセス違反が発生しないようにしました。 - 通常 API の
LoadFromFile、Encrypt、SaveToFile、再読み込み、Decrypt、SaveToFileのワークフローは、大きな読み込み済み PDF でも再び完了し、コピー削減型の AES-CBC 復号最適化も維持します。 - 保存時に暗号化 stream を復元する際の入力バッファーと結果のエイリアスケースを対象に、以前の失敗を露呈した 504 KB の大きなペイロードを含む AES 回帰テストを追加しました。
v3.56.41 2026-05-27
- ページ数と未変更のファイルコピーが必要で、完全な通常オブジェクトグラフを構築したくない Direct Access ワークフロー向けに
TPDFlib.DACopyFileを追加しました。 - バッファーベースの AES-CBC 復号パスを追加し、読み込み済みの文字列と stream の復号で使用することで AES-256 復号を最適化し、大きな暗号化 stream での余分な暗号文コピーを削減しました。
- Delphi
HugeFileBenchmarkdemo にdirect-copy行を追加し、大きなファイルの集中テスト向けに--opsと--skipフィルターを追加しました。
v3.56.40 2026-05-26
- Delphi と C++Builder の
HelloWorldデモは、同じビルドして実行するワークフローを保ちながら、ドキュメント情報、選択した標準フォントでの出力、スタイル付きタイトルブロック、簡単なベクター描画、次に試すデモへの案内を含む、より充実したスターター PDF を作成するようになりました。 - Delphi と C++Builder のすべてのデモノートを、ブラウザーで読みやすい
Readme.htmlページに置き換えました。パスワード、制限付きファイル、署名結果に関する補助ノートも含まれ、デモのインデックスは HTML ノートへ案内するようになりました。
v3.56.39 2026-05-26
- Direct file API の保存処理は、クロスリファレンス検索テーブルを線形に構築するようになり、オブジェクト数が非常に多い PDF や密なページツリーを持つ PDF で
DASaveAsFileと関連する直接保存パスが大幅に高速化されました。 - 最適化された writer は同じ free-object chain セマンティクスを維持しつつ、完全な xref 生成中のオブジェクト番号の反復スキャンを避けます。これにより、公開 API や出力契約を変えずに大規模な直接保存ワークフローを改善します。
v3.56.38 2026-05-26
- 通常 API の暗号化出力を修正し、
Encryptが AES-256 セキュリティデータを書き込む前に trailer の/IDを作成または保持するようにしました。これにより、暗号化された PDF は再読み込み後もEncryptionStatusで検出できます。 - 通常 API の
LoadFromFile、Encrypt、SaveToFile、再読み込み、Decrypt、SaveToFileのワークフローは、明示的なDecryptの前まで暗号化状態を保持し、大きなレガシー PDF に対する直接ファイル API の動作と一致するようになりました。
v3.56.37 2026-05-26
TPDFlib.ComparePreflightReportsを追加しました。これはプレーンテキストの preflight レポートを行単位で比較する機能で、変動するGenerated:タイムスタンプ行を無視し、安定したレポート内容が一致する場合は空文字列を返します。- Delphi の
PreflightReportデモは単一ファイルモードで--compare <file>をサポートし、生成されたテキストレポートが baseline と異なる場合に UTF-8 の.diff.txtレポートを書き出して終了コード 2 を返します。
v3.56.36 2026-05-26
- Delphi の
PreflightReportデモは--input-dir、--output-dir、--recursiveによるディレクトリのバッチ実行に対応し、PDF ごとに<basename>.preflight.<ext>形式のレポートを書き出します。 - バッチモードは UTF-8 の
preflight-summary.csvを書き出し、各入力 PDF、pass/fail 状態、問題数、生成されたレポートのパスを記録します。自動化向けの既存の終了コード契約は維持されます。
v3.56.35 2026-05-26
ReportFormat = 3により、TPDFlib.CreatePreflightReportExとTPDFlib.SavePreflightReportExで CSV 出力を生成できるようになりました。レポートのメタデータ、選択した各適合性チェック、個別の問題コードとメッセージ、最終サマリーを UTF-8 行として出力します。- Delphi の
PreflightReportデモは--format csvと--csvに対応し、コマンドラインの preflight 実行結果を JSON の後処理やテキスト抽出なしでスプレッドシートや簡単な CI パーサーへ渡せるようになりました。
v3.56.34 2026-05-26
- 形式指定に対応した
TPDFlib.CreatePreflightReportExとTPDFlib.SavePreflightReportExAPI を追加し、既存のテキスト専用 API を維持したまま、PDF/A および PDF/UA-1 の preflight レポートをプレーンテキスト、JSON、または単体 HTML として生成できるようにしました。 - Delphi の
PreflightReportデモは--format text|json|htmlと--json/--htmlの短縮指定に対応し、同じコマンドラインワークフローで人が読むレポートと機械処理向け CI アーティファクトを出力できます。
v3.56.33 2026-05-26
TPDFlib.CreatePreflightReportとTPDFlib.SavePreflightReportを追加し、アプリケーションが組み込みの PDF/A および PDF/UA-1 適合性チェックから再利用可能なプレーンテキストレポートを生成できるようにしました。文字列リストハンドルを手動で列挙する必要はありません。- Delphi の
PreflightReportデモはライブラリレベルのレポート API を直接呼び出すようになり、コマンドラインワークフロー、選択したチェック、最初の問題で停止するモード、自動化向けの終了コードに焦点を合わせたサンプルになりました。
v3.56.32 2026-05-26
- 新しい Delphi コンソールデモ
PreflightReportを追加しました。CheckFileComplianceで PDF/A と PDF/UA-1 のチェックを実行し、GetStringListCountとGetStringListItemで問題リストを列挙して、プレーンテキストの preflight レポートを書き出します。 - このデモは
--input、--output、--pdfa、--pdfua、--both、--first-issueの各オプションと、自動化しやすい成功・問題検出・実行時エラーの終了コードに対応しました。
v3.56.31 2026-05-25
GetCustomKeys(2)现在能够一致地隐藏由库管理的 Catalog 系统条目,包括/OutputIntents、/Extensions、/Requirements、/Collection和/NeedsRendering。SetPDFAMode関数によって作成される PDF/A 出力設定は、カスタムカタログキーとして表示されなくなりました。これにより、アプリケーションのメタデータ列挙と PDF 準拠構造が分離されます。
v3.56.25 2026-05-23
- writer 側の GetPDFUADiagnostics に、v3.56.24 の reader
10044と対応するMULTIPLE-H-CHILDREN:Nissue を追加しました。ISO 14289-1 §7.4.4 は、タグツリーノードごとに直接の H 子要素を複数持つことを禁じています。writer 側チェックは、メモリ上の FStructElems ツリーにその違反が含まれる場合に発火します。 - 新しいネストされた CountMultipleHChildren ヘルパーは、ツリーを深さ優先で走査し、各レベルの H 子要素を数えます。このチェックは既存の LIST-STRUCT / LIST-NO-NUMBERING 走査と並行して実行され、同じ FStructElems 走査パターンを共有します。
v3.56.24 2026-05-23
- PDF/UA-1 監査に ISO 14289-1 §7.4.4 の H タグ一意性チェックを追加しました。
10044は、直接の H 子要素を複数持つ任意の構造ノードを報告します。これは仕様が強構造化ドキュメントで禁じているものであり、同じ制約は全体の構造モードに関係なく任意のタグツリーノードに適用されます。もう一つの §7.4.4 SHALL(ドキュメントは強構造または弱構造のどちらか一方でなければならず、両方ではない)はドキュメント全体のヒューリスティックを必要とするため、この監査からは意図的に除外しています。 - 新しい前順の構造ツリー walker(UAVisitStructNodeForHUniqueness / ScanStructTreeForHUniqueness)は、ノードごとの直接 H 子要素を数え、深さ優先で再帰します。既存の見出し / リスト / 注記 walker と同じ K 形状デコーダーを再利用します。
v3.56.23 2026-05-23
- PDF/UA-1 監査に、v3.56.10 の辞書レイヤーチェックが TrueType parser の利用可能になるまで延期していた ISO 14289-1 §7.21.6 の font-program チェック 2 件を追加しました。
10034は、埋め込み SFNT cmap テーブルに symbolic(platformID=3, encodingID=0)エントリしか含まない non-symbolic TrueType program を報告します。§7.21.6 第 1 段落は、program が /Encoding で宣言された codepoint を描画できるよう、少なくとも 1 つの non-symbolic cmap subtable を要求しています。10035は、glyph name が Adobe Glyph List メンバーではない(.notdefを除く)non-symbolic TrueType/Encoding /Differences配列を報告します。§7.21.6 第 3 段落は、すべての Differences エントリが AGL に属することを要求しています。 - 新しい
Lib/PDFlibPDFUAFontInspect.pasは、寛容な SFNT table-directory walker と cmap subtable directory parser を実装します。前の基盤 commit で scaffold として追加した 4281 名の Adobe Glyph List テーブルは、Differences チェック経由で接続されました。SFNT として解析できない program(Type 1 PFB / PFA、OpenType collection、任意のごみデータ)は黙ってスキップします。監査レイヤーでは false positive より false negative を優先します。
v3.56.22 2026-05-23
- PDF/UA-1 監査に ISO 14289-1 §7.18.6 の media clip data チェックを追加しました。
10042は、必須の/CTcontent-type エントリを欠く media clip data dictionary(/S /MCD、任意で/Type /MediaClipにより識別)を報告します。10043は、必須の/Alt配列を欠く同じ dictionary を報告します。ISO 32000-1 Table 274 では両キーを optional としていますが、ISO 14289-1 §7.18.6 は、screen reader が埋め込み multimedia の意味のある説明を読み上げられるよう、これらを required に引き上げています。 - これは PDF/UA deep-audit plan(
.superpowers/plans/2026-05-23-pdfua-deep-audit-plan.md)の Phase 6 です。font-program parser や content-stream parser への依存なしで動作するため、v3.56.0..v3.56.13 シリーズ後の最初の follow-up sub-class です。
v3.56.21 2026-05-23
- 新しい
SetSignProcessCommitmentTypeは、PAdES-B-B SignerInfo 内に CAdEScommitment-type-indicationsigned attribute(OID 1.2.840.113549.1.9.16.2.16, ETSI EN 319 122-1 v1.2.1 §5.2.3)を出力します。integer code 1..6 を受け取り、よく知られた ETSI commitment OID のid-cti-ets-proofOfOriginからid-cti-ets-proofOfCreationまでに対応します。0 を渡すとクリアします。範囲外の code は拒否されます。 - 新しい
SetSignProcessSignaturePolicyは、CAdESsignature-policy-identifiersigned attribute(OID 1.2.840.113549.1.9.16.2.15, §5.2.9)を出力します。dotted-decimal policy OID、policy document hash の uppercase-hex 文字列、digest algorithm code(1=SHA-1、2=SHA-256、3=SHA-384、4=SHA-512、0=auto/SHA-256)を受け取ります。この attribute はsigPolicyId+sigPolicyHash(OtherHashAlgAndValueSEQUENCE)を持つSignaturePolicyIdSEQUENCE を格納します。 - 両方の attribute は SubFilter が
ETSI.CAdES.detached(PAdES-B-B path)の場合にのみ有効です。既存のrgAuthAttr配列をcontent-typeおよびsigning-certificate-v2と並んで拡張します。PAdES Table 1 row d) は、commitment-type-indicationと PDF Signature Dictionary の/Reasonエントリの併用を禁じています。両方を設定しない責任は caller 側にあります。
v3.56.20 2026-05-23
- 新しい
AddPAdESDSSVRIは、組み立て中の DSS に Signature VRI subdictionary entry を付加し、ETSI EN 319 142-1 v1.2.1 clause 5.4.2.3 Validation Related Information structure を完成させます。この entry は signature の/Contentsbytes の uppercase-hex SHA-1 を key とし、Cert/CRL/OCSPsub-array は、comma-separated list(例:"0,2,5")として指定された 0-based index で対応する parent DSS stream を参照して埋められます。 - 基盤の
TSmartPDFDocument.AddPAdESDSSWithVRIは、各 cert / CRL / OCSP に対して出力された stream object number を追跡し、それを使って VRI sub-array を parent DSS array がすでに指している同じ stream への indirect reference として書き出します。これにより、VRI entry が parent DSS dictionary と storage を共有するという仕様要件を満たします。VRI が不要な caller 向けに、従来のAddPAdESDSSentry point は変更なしで動作し続けます。 - 各 signature ごとの VRI subdictionary は任意の
/Type /VRImarker を持つため、catalog をTypetag で走査する tooling は、parent path を再解決しなくても構造を認識できます。
v3.56.19 2026-05-23
- 既存の PAdES-B-B signature に RFC 3161 / RFC 5816 signature-time-stamp(id-aa-signatureTimeStampToken, OID 1.2.840.113549.1.9.16.2.14)を付加する新しい PAdES-B-T workflow を追加しました。
NewPAdESSignatureTimeStampProcessFromFile/FromStream/FromStringは signed PDF を開き、SetPAdESSignatureTimeStampFieldは field 名を指定し、GetPAdESSignatureValueHashHexは TSA へ送信する signer のsignatureValueの SHA-256(または 384 / 512)hash を返し、GetPAdESSignatureCMSBytesは既存 CMS payload を公開し、SetPAdESSignatureCMSBytesは caller が任意の CMS library で組み立てた augmented CMS bytes を受け取り、EndPAdESSignatureTimeStampProcessToFile/ToStream/ToStringは新しい CMS を元の/Contentsplaceholder に差し込みます。 BuildPAdESSignatureTimeStampAttributeは、TSA が発行した TimeStampToken をSignerInfo.unsignedAttrsが期待する CMS Attribute SEQUENCE に包む stateless helper です。すでに CMS library を持っている caller は、OID と SET-of の配管を省略できます。- 新しい
SetSignProcessReserveContentsBytesは、初回署名時に/Contentsplaceholder を広げ、後から付加される augmented CMS が元の予約領域を超えずに収まるようにします。一般的な TSA 発行 TimeStampToken は SignerInfo に 2-6 KB を追加します。余裕を残すにはここに 1024-8192 を渡します。十分な reserve がない場合、augmentation call は13(output overflow)を返します。 - この library は TSA HTTP client を同梱しません。caller が TimeStampToken を取得します(通常は FreeTSA や DigiCert などに対する TSP request + HTTP POST の 30-50 行程度)。Windows CryptoAPI の
CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTRは原理上 library 内 CMS injection を自動化できますが、PAdES が出力する detached SignedData shape ではCRYPT_E_INVALID_INDEX(0x80091008)を返すため、代わりに caller-supplied CMS bytes path を使います。
v3.56.18 2026-05-23
- PAdES
signing-certificate-v2attribute は、RFC 5035(ESSCertIDv2)で定義された任意のIssuerSerialfield を埋め込むようになりました。signing certificate の issuer Distinguished Name はGeneralNames内のGeneralName [4] EXPLICIT directoryNameCHOICE に包まれ、その後に certificate serial number が ASN.1 INTEGER として続きます。serial number bytes は Windows CryptoAPI(CRYPT_INTEGER_BLOB)から little-endian で届くため、OpenSSL や BouncyCastle が同じ field を出力する方法に合わせて、high bit が立っている場合は positive-integer pad byte を追加しつつ big-endian へ反転します。 - issuer name + serial pair を path-building candidate set と照合する verifier(特に strict mode の EU DSS)は、signing-cert-v2 attribute 内で両方の identifier を見つけられるようになりました。以前の v3.56.17 出力は
certHashreference のみを提供していました。 - 新しい ASN.1 helper の
DER_IntegerFromLittleEndian(Win32CRYPT_INTEGER_BLOBbyte order を処理)とDER_ContextTagExplicit(payload を constructed context-specific tag に包む)により、PDFlibASN1micro-encoder が補完されました。PDFlibCryptoAPIの新しいCERT_INFO/CRYPT_ALGORITHM_IDENTIFIER/CRYPT_INTEGER_BLOB/PCERT_CONTEXT宣言により、sign path は解析済み certificate fields にアクセスできます。
v3.56.17 2026-05-23
- 組み込みの
ETSI.CAdES.detached署名パスは、構造的に PAdES-B-B 準拠の署名を生成するようになりました。ライブラリは CMS authenticated attributes を自前で構築します —content-type(id-data) と RFC 5035 / RFC 5816 のsigning-certificate-v2(署名証明書の SHA-256 ハッシュ付き) — それをrgAuthAttr経由でCryptSignMessageに渡します。そのフィールドが non-NULL になると、Windows CryptoAPI は PAdES (ETSI EN 319 142-1 v1.2.1 Table 1) で禁止されているsigning-time属性の自動注入を停止します。その結果、得られるSignerInfoは必須属性のみを保持します。 - 新しい
PDFlibASN1ユニットは、SigningCertificateV2属性値の構築に使用される、目的を絞った DER (X.690) マイクロエンコーダ — length prefix、OCTET STRING、SEQUENCE、SET、OBJECT IDENTIFIER — を提供します。このエンコーダは base-128 の OID arc の標準ルールに従い、オプションのhashAlgorithmフィールドが単に SHA-256 のデフォルト値を繰り返すだけになる場合は省略します。これは OpenSSL や BouncyCastle が出力する内容と一致します。 ApplySignatureはETSI.CAdES.detachedを、事前計算済みダイジェストを渡すのではなく、raw-byte パス(adbe.pkcs7.detachedが使用するのと同じパス)にルーティングするようになりました。CryptoAPI は実際に署名されるコンテンツに対してmessageDigestauthenticated attribute を計算するようになり、これは検証者が期待する動作です。- signing-certificate-v2 属性の構築時には SHA-384 と SHA-512 も尊重されます。
hashAlgorithmフィールドはデフォルト値に依存せず、対応するAlgorithmIdentifier付きで出力されます。このコンテキストでは SHA-1 は SHA-256 に静かにアップグレードされます。PAdES-B-B は SHA-1 を許可していないためです (clause 6.2.1)。
v3.56.16 2026-05-23
- 新しい
SetSignProcessDigestAlgorithmは、署名の message-digest アルゴリズムを選択します:1= SHA-1 (deprecated)、2= SHA-256 (現代のデフォルト)、3= SHA-384、4= SHA-512、0= auto (legacy のadbe.pkcs7.sha1パスを除くすべての SubFilter で SHA-256、当該 legacy パスはバイト安定的な後方互換性のために SHA-1 を維持します)。ETSI EN 319 142-1 v1.2.1 §6.2.1 は MD5 を禁止し、推奨される暗号スイートについては ETSI TS 119 312 に委ねているため、PAdES 署名者は SHA-256 以上を選択すべきです。 - 既存の
SHA1StreamRangeに並ぶハッシュヘルパーとしてSHA256StreamRange、SHA384StreamRange、SHA512StreamRangeを追加しました。署名パスは選択されたアルゴリズムに基づき、これらを使用して PDF ByteRange のダイジェストを計算します。PKCS#7 のSignerInfo.digestAlgorithmOID と実際に書き出されるハッシュバイトは現在一致することが保証されています (以前のコードは、ネゴシエートされたアルゴリズムに関係なく常に SHA-1 のダイジェストを渡していました)。 TPDFlibPFXFile.SignDataはDigestAlgorithmパラメータを受け取り、各 (SubFilter, algorithm) ペアに対して正しい OID を選択するようになりました: detached およびカスタム SubFilter での SHA-256/384/512 には2.16.840.1.101.3.4.2.1/.2/.3(RFC 5754)、legacy のadbe.pkcs7.sha1パスには対応するsha256WithRSAEncryptionファミリの OID を使用します。
v3.56.15 2026-05-23
- 新しい
SetSignProcessDocTimeStampはサインプロセスを ETSI EN 319 142-1 v1.2.1 §5.4.3 の PAdES Document Time-stamp モードに切り替えます。生成される Signature Dictionary は/Type /DocTimeStampと/SubFilter /ETSI.RFC3161を保持し、禁止されている/M、/Reason、/Location、/ContactInfo、/Nameキーを省略します。さらに外部から取得される RFC 3161 TimeStampToken のために/Contentsに 8192 バイト (または呼び出し元指定サイズ) の hex プレースホルダを予約します。 - DocTimeStamp モードが選択されると、TimeStampToken は外部 TSA から来るためパススルーが自動的に有効化されます。DocTimeStamp モードへ切り替えた後の
SetSignProcessInfo呼び出しは、署名辞書を仕様準拠に保つために silently に無視されます。 - v3.56.8 で追加された既存の PAdES
/Extensions /ESIC自動注入は、その SubFilter がETSI.で始まるため DocTimeStamp もすでにカバーしています。よって Document Time-stamp PDF は追加配線なしで必須のカタログ拡張を宣言します。
v3.56.14 2026-05-23
- 新しい PAdES Document Security Store (DSS) 拡張 API。
NewPAdESDSSProcessFromFile/NewPAdESDSSProcessFromStream/NewPAdESDSSProcessFromStringはすでに署名された PDF を開き、AddPAdESDSSCertificate/AddPAdESDSSCRL/AddPAdESDSSOCSPは DER エンコードされた検証マテリアルをステージし、EndPAdESDSSProcessToFile/EndPAdESDSSProcessToStream/EndPAdESDSSProcessToStringは ETSI EN 319 142-1 v1.2.1 §5.4.2.2 で規定された/DSS << /Type /DSS /Certs [...] /CRLs [...] /OCSPs [...] >>辞書を含むインクリメンタル更新を書き出します。これは PAdES-B-B / B-T 署名を PAdES-B-LT 長期検証へ昇格させるためのビルディングブロックです。 - DSS プロセスは検証マテリアルを追加するときに、§5.6 の要件に整合してカタログの
/Extensions /ESICエントリを少なくともExtensionLevel 1まで自動 bump します。複数回呼び出すと新しい証明書、CRL、OCSP 応答が既存の/Certs//CRLs//OCSPs配列にマージされ、リビジョンが上書きではなく累積されます。 GetPAdESDSSProcessResult/ReleasePAdESDSSProcessはライフサイクルを完了させ、既存のSignProcessAPI サーフェスと対称です。
v3.56.8 2026-05-23
- PAdES ベースライン適合: 署名が PAdES SubFilter (
ETSI.CAdES.detachedまたはETSI.RFC3161) で作成されると、文書カタログは ETSI EN 319 142-1 v1.2.1 §5.6 で要求される/Extensions /ESIC <</BaseVersion /1.7 /ExtensionLevel 2>>エントリを自動的に受け取るようになりました。エントリは署名を運ぶ同じインクリメンタル更新を通じて追加され、既存の上位/ExtensionLevelをダウングレードすることはなく、ソース PDF がすでに/Extensionsや/ESICを別オブジェクトとして格納している場合は間接参照に従います。 - SetSignProcessCustomSubFilter によって
TPDFlib経由で作成された PDF に書き出される Adobe 等価の拡張マーカーが/ADBE /BaseVersion /1.7 /ExtensionLevel 8(旧ExtensionLevel 5) になりました。これは PAdES ベースライン署名が使用できる代替宣言と一致します。レベル 5 は ISO 32000-2 フォーム / 3D / RichMedia 機能のみをカバーし、PAdES 拡張を実際には識別していませんでした。
v3.56.13 2026-05-23
- SetPDFUAMode が有効で文書が保存されるとき、明示的な
ListNumbering属性を欠く L (リスト) 構造要素は/O = List /ListNumbering = Noneを自動的に受け取るようになりました。ISO 14289-1 §7.6 はすべての L タグが番号付けスタイルを宣言することを要求します。新しいApplyPDFUAListNumbering保存時 fix-up は既存のApplyPDFUATabOrder/ApplyPDFUAFormFieldTU/ApplyPDFUAAnnotContents/ApplyPDFUAEmbeddedAFRelationship/ApplyPDFUAStripTrapNetファミリに加わります。 - 特定のリストスタイルを気にする作成者は引き続き EndTag の前に SetStructElemListNumbering を呼ぶ必要があります。自動 fix-up は保存時に ListNumbering 属性が存在しないときのみ発動するため、明示値は保持されます。
- ライタ側の
LIST-NO-NUMBERING:N診断メッセージは、自動 fix-up が保存時に問題をマスクすることを注記するようになりました。ユーザーは欠落属性と自動修復動作の両方を理解できます。
v3.56.12 2026-05-23
- PDF/UA-1 監査が ISO 14289-1 の 3 つの新しいチェックを獲得しました。
10031は URI アクション辞書が/IsMap = trueを保持する Link 注釈を報告します (§7.18.5 によりコンテンツの別の場所で同等の機能が提供されない限り禁止。正当な IsMap ユースケースを持つ作成者は自身で診断を抑制できます)。10032は/IDエントリを欠くNote構造要素を報告します — §7.9 はすべての Note タグが一意の ID を宣言することを要求します。10033は 2 つ以上の Note タグが同じ/ID値を共有するとき重複ペアカウントを報告します。 - Note ID 衝突検出はソートされた TStringList で ID を収集し隣接ペアを走査することで行われるため、1 つの ID を共有する 3 つの Note のグループは 2 つの重複ペアとしてカウントされます。
- URI アクションチェックは各ページの
/Annots配列を走査し、/Subtype /Linkでフィルタしてから/A /S /URIと/IsMapブール値を検査します。間接参照は各ステップで dereference されるため、分離されたアクション辞書はインラインのものと同じように動作します。
v3.56.11 2026-05-23
- ISO 14289-1 §7.6 はすべての L (リスト) 構造要素に明示的な
ListNumbering属性を保持することを要求します。10030(リーダ側) とLIST-NO-NUMBERING:N(ライタ側) はそれを省略する L タグを報告します。リーダ側ウォーカは両方の/A形 (単一属性辞書、または辞書とリビジョン整数が混在する配列) をデコードし、owner に関係なく/ListNumberingキーを探します。ライタ側チェックは finalised 構造リストと still-open タグスタックの両方でTPDFStructElem.Attributesから同名を検査します。 - ISO 32000-1 Table 347 で有効な
ListNumbering値はNone、Disc、Circle、Square、Decimal、UpperRoman、LowerRoman、UpperAlpha、LowerAlphaです。監査はキーの存在のみをチェックし、どの値が選択されているかはチェックしません — すべての L タグはこれらのうち 1 つを必要とします。
v3.56.10 2026-05-23
- PDF/UA-1 監査が ISO 14289-1 §7.21.6 TrueType エンコーディングルールを獲得しました。
10028は/Encoding(または Encoding 辞書内の/BaseEncoding) がMacRomanEncodingでもWinAnsiEncodingでもない非シンボリック TrueType フォントを報告します。10029は/Encodingエントリを保持するシンボリック TrueType フォントを報告します (§7.21.6 第 4 段落により禁止)。 - シンボリック vs 非シンボリックは FontDescriptor
/Flagsビット 3 (マスク4) から決定され、サブクラス 4 の既存UAFontDescriptorSymbolicヘルパを再利用します。§7.21.6 第 1 段落全文 (埋め込み TrueType プログラムに一致する cmap エントリが含まれる必要がある) は TrueType フォントプログラムの解析を要求するためまだ保留中です。上記の辞書レベルルールは TrueType パーサなしで監査が検証できる現実的なレイヤーです。 - §7.21.6 の Differences 配列ルール (AGL のみのグリフ名、Microsoft Unicode cmap の存在) も同じ理由でスコープ外 — フォントプログラム検査を要求します。
v3.56.9 2026-05-23
- PDF/UA-1 監査が完全な ISO 14289-1 §7.18.4 チェックを獲得しました。
10027は/StructParentが構造ツリーの/ParentTreeを通じて解決されるが/S = Formを持つ構造要素に到達しない Widget 注釈を報告します。前回 v3.56.7 の部分チェック (10026) は/StructParentを完全に欠く Widget のみを捕捉していました。新しいチェックは number-tree ポインタをたどって宛先タグを検証することでルールを完成させます。 - 新しい
NumberTreeLookupヘルパは ISO 32000-1 §7.9.7 の number-tree 形状 (フラット/Numsルート、/Limitsで範囲付けされた中間/Kids) を実装します。/StructParentsページエントリや/PageLabelsラベルの解決が必要な将来の監査はこれを再利用できます。 - Widget 注釈 Form-tag 検証は 2 階層モデルを使用します:
/StructParentなしの Widget は10026として報告され、/StructParentが存在するが/S = Formに解決されない Widget はより具体的な10027として報告されます。これにより同じ違反が両コードでダブルカウントされることを避けます。
v3.56.7 2026-05-23
- SetPDFUAMode が有効で文書が保存されるとき、各ページの
/Annots配列からTrapNet注釈エントリが自動的に削除されるようになりました。ISO 14289-1 §7.18.2 はTrapNet注釈を禁止します。新しいApplyPDFUAStripTrapNet保存時 fix-up は既存のApplyPDFUATabOrder/ApplyPDFUAFormFieldTU/ApplyPDFUAAnnotContents/ApplyPDFUAEmbeddedAFRelationshipファミリに加わるため、PDF/UA モード文書は silently にTrapNetの残骸を発出することを止めます。 - PDF/UA-1 監査が部分的な §7.18.4 チェックを獲得しました。
10026は/StructParentを欠く Widget 注釈を報告します —/StructParentなしの Widget は構造ツリーから到達できないためForm構造タグにネストできません。完全な構造検証 (ParentTreeを通じて/StructParentを解決し、親/SがFormであることを確認) は後続リリースに残されます。 - ライタ側 GetPDFUADiagnostics は一致する
WIDGET-NO-STRUCTPARENT:Nissue を獲得しました。既存の TRAPNET-ANNOT メッセージは SetPDFUAMode が保存時にこれらを自動 strip することも注記するようになりました。
v3.56.6 2026-05-23
- PDF/UA-1 監査が ISO 14289-1 §7.4.2 の 2 つの見出し階層チェックを獲得しました。
10024は文書順序で最初の見出し要素が H1 (または H) でないとき報告します。10025は降順シーケンスの見出しレベルスキップ数を報告します (例: H1 の後に H2 なしで H3)。両チェックはネストされた/K形 (単一 StructElem、StructElem / IndRef / MCR の配列) をデコードする 1 回の構造ツリー pre-order ウォークを共有します。 - ライタ側 GetPDFUADiagnostics は一致する
FIRST-HEADING-NOT-H1issue を獲得し、リーダ10024と対応します。以前存在した HEADING-LEVEL-SKIP ライタチェックは「最初の見出しが H2 だった」というスタイルの問題も捕捉する仲間を持つようになりました。
v3.56.5 2026-05-23
- SetPDFUAMode が有効で文書が後に暗号化されるとき、暗号化権限キー (encrypt 辞書の
/P) は呼び出し元が Encrypt に渡したTPDFExtraPermissionsにppCanCopyAccessを含めていなくても、ビット 10 (マスク$200、「アクセシビリティをサポートするためのテキストとグラフィックスの抽出」) を自動的にセットするようになりました。ISO 14289-1 §7.16 はすべての暗号化された準拠ファイルがアクセシビリティ抽出を許可することを要求し、このビットは見落としやすいものです。このビットをセットすることは常に安全 — 支援技術への追加アクセスのみを許可し、他の抽出パスには許可しません。 - ライタ側 GetPDFUADiagnostics は PDFUAMode がオンで encrypt 辞書の
/Pビット 10 がクリアされているとき発動する新しいENCRYPT-NO-ACCESSissue を獲得しました。これはユーザーが先にEncrypt()を呼んだ後に SetPDFUAMode を呼んだ呼び出し順序エッジケースを捕捉します — 診断は修正された/Pで encrypt 辞書が再発行されるようEncrypt()を再度呼ぶようユーザーに伝えます。
v3.56.4 2026-05-23
- ライタ側 GetPDFUADiagnostics は 5 つの新しい ISO 14289-1 チェックを獲得しました。これによりインメモリ文書監査はリーダ側 CheckFileCompliance ComplianceTest=2 監査と同じ違反を捕捉します。
SUSPECTS-TRUEは MarkInfo/Suspects=true をフラグします (§7.1: PDF/UA 準拠ファイルは Suspects=false を要求)。ROLEMAP-STANDARD-REMAP:Nは標準構造タグを remap する AddRoleMap 呼び出しをフラグします — §7.1 は標準タグの remap を禁止します。DC-TITLE-MISSINGは空の XMP dc:title をフラグします (DOCINFO-TITLE-MISSING とは別、後者は /Info /Title をチェック)。TRAPNET-ANNOT:Nは TrapNet 注釈をフラグします (§7.18.2 はそれらを禁止)。ANNOT-PAGE-NO-TABS-S:Nはページ辞書 /Tabs が /S でない注釈を運ぶページをフラグします (§7.18.3 はそれらのページに構造ツリータブ順序を要求)。 - ライタ側とリーダ側の PDF/UA-1 監査はおおむね同等になりました: リーダ側監査が保存ファイルで提起するすべての issue は、各関数のフォーマット規約 (改行区切りテキスト vs NNNNN コード文字列リスト) を法としてインメモリ診断からも到達可能です。
v3.56.3 2026-05-23
- PDF/UA-1 監査が §7.21 フォントチェックを獲得しました。
10020は FontDescriptor がFontFile/FontFile2/FontFile3を欠くすべての非 Standard-14 フォントを報告します (§7.21.4.1: レンダリングされるすべてのフォントはそのプログラムを埋め込まなければならない)。10021は/CIDToGIDMapエントリのない CIDFontType2 子孫を報告します (§7.21.3.2)。10022は埋め込まれたプログラムなしで参照される Standard 14 フォント (Helvetica、Times、Courier、Symbol、ZapfDingbats と bold / oblique バリアント) を指摘します — §7.21.4 NOTE 5 はこれらのフォントの埋め込みに免除がないことを明確にしています。10023は/ToUnicodeCMap を欠き §7.21.7 免除リスト (定義済み MacRoman / MacExpert / WinAnsi エンコーディング、Adobe-GB1 / CNS1 / Japan1 / Korea1 文字コレクションを持つ Type 0、非シンボリック TrueType) に一致しないフォントを報告します。 - Composite Type 0 フォントは両層で検査されます: Type 0 親辞書自体の
/ToUnicode、および最初の子孫 CIDFont の埋め込み //CIDToGIDMap。Type 3 フォントは埋め込みチェックをスキップ (そのグリフはインライン CharProcs) しますが、/ToUnicodeチェックには引き続き参加します。 - 同様のフォント作業のための PDFlibPDFA ヘルパは意図的に共有されていません — 半ダースの短いルーチン (サブセットプレフィックス除去、Standard-14 名前テーブル、FontFile 存在、Symbolic フラグ) は
UA*ヘルパとしてローカルに複製され、PDF/A 監査が PDF/UA を壊さずに進化し続けられるようにし、逆も同様です。
v3.56.2 2026-05-23
- PDF/UA-1 監査が注釈、埋め込みファイル、optional content をカバーする 5 つの ISO 14289-1 チェックを追加しました。
10015は非空の/Contents代替記述を欠く Link 注釈を報告します (§7.18.5)。これによりスクリーンリーダがリンクターゲットをアナウンスできます。10016と10017は必須の/Fまたは/UFファイル名キーを欠く埋め込みファイル FileSpec 辞書をフラグします (§7.11)。10018は非空/Nameテキスト文字列を省略する optional-content 構成辞書をフラグします (§7.10)。10019は禁止された/ASキーを含む optional-content 構成辞書をフラグします (§7.10)。 - TrapNet と
/Tabs /Sチェックをすでに動かしているページごとの注釈ウォークは、同じパスで Link //Contentsデータも収集するようになり、監査をオブジェクト数に対して O(N) に保ちます。
v3.56.1 2026-05-23
- PDF/UA-1 監査が 5 つの新しい ISO 14289-1 チェックを獲得しました。
10010は暗号化ファイルでアクセシビリティ抽出権限 (暗号化/Pキーのビット 10) を検証します (§7.16)。10011は XFA XDP パケット内の<dynamicRender>required</dynamicRender>要素を通じて動的 XFA フォームを検出します (§7.15)。10012は/Refエントリを保持する Form XObjects をフラグします — リファレンス XObjects は禁止です (§7.20)。10013はTrapNet注釈をフラグします (§7.18.2)。10014は各ページを走査しページ辞書が/Tabs /Sをセットしない注釈を運ぶページを報告します (§7.18.3) — これによりタブ順序が構造ツリーに従います。 - 5 つの新しいコードはすべて、前回リリースが追加した同じ CheckFileCompliance + GetStringListItem ハンドルペアを通じて流れます — 新しい公開 API サーフェスはありません。
v3.56.0 2026-05-23
- 新しいリーダ側監査
CheckCompliancePDFUAは外部 PDF を ISO 14289-1 (PDF/UA-1) に対して検証します。任意の入力 PDF (自身の出力、スキャナ出力、サードパーティコンテンツ) を受け付け、CheckFileCompliance が PDF/A 問題を報告するのと同じ方法で PDF/UA-1 違反をリストすることにより、既存の GetPDFUADiagnostics ライタ側チェックを補完します。 - CheckFileCompliance は新しい PDF/UA-1 監査を実行するために
ComplianceTest = 2を受け付けるようになりました。ComplianceTest = 1での PDF/A テストは変更されておらず、issue リストは引き続き既存の GetStringListCount / GetStringListItem ハンドルペアを通じて返ります。 - 最初のカットは §5 (XMP
pdfuaid:part識別) と §7.1 (カタログ/Metadataストリーム、タグ付き PDF マーカー、構造ツリー、ビューアタイトル設定、文書言語、XMPdc:title、/Suspects値、標準構造タグの remap 禁止) の基礎的な PDF/UA-1 適合性ゲートをカバーします。8 つの診断コードが発行されます —10001から10009— 数値範囲を PDF/A の00xxxコードと視覚的に分離しています。 - より深い PDF/UA-1 条項 (セキュリティ、注釈、XObjects、フォントサブセット化) は同じ監査フレームワーク上で後続パッチリリース用に追跡されています。
v3.55.6 2026-05-22
- 新しく生成されるすべての XMP パケットは uuid:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX の形式の xmpMM:InstanceID プロパティを運ぶようになりました。識別子は Win32 CoCreateGuid を通じて生成され、ISO 19005-1 §6.7.2 (Cor2) と PDF/A ベストプラクティスガイドが推奨するとおり、各生成文書に一意でバージョン非依存のフィンガープリントを与えます。非 Windows ビルド (XMP パケットが空のまま) は影響を受けません。
- xmpMM 名前空間 (http://ns.adobe.com/xap/1.0/mm/) は XMP パケットの SelectionNamespaces の一部になりました; 新しい SetXMPMM と GenerateInstanceID ヘルパは InstanceID 発出の基盤となり、将来の xmpMM:History / xmpMM:DerivedFrom サポートの基礎を提供します。
- PDF/A Extension Schema 記述スキーマ (pdfaExtension / pdfaSchema / pdfaProperty / pdfaType / pdfaField) はこのリリースで追加されていません。カスタム拡張スキーマの作成は現在の SetDublinCore / SetXMPBasic 形を超える複数段階の bag / seq / 構造化プロパティ構築を要求します; この作業は将来のリリース用に追跡されています。カスタム XMP プロパティを宣言する必要がある文書は引き続き LoadFromString パスにフォールバックします。
v3.55.5 2026-05-22
- PDF/A 文書は保存時に注釈の /F フラグが正規化されるようになりました。ISO 19005-1 §6.5.3 はすべての注釈で Print ビットが 1 で Hidden / Invisible / NoView ビットが 0 であることを要求します; ライタは保存時にそのマスクを適用するようになったため、呼び出し元はビットレイアウトを覚えておく必要がありません。/Subtype /Popup ケースは免除 — popups は他の注釈の子で伝統的に印刷されません。
- AcroForm /NeedAppearances フラグは文書が任意の PDF/A モードにあるとき保存時に強制的に false にセットされるようになりました。ISO 19005-1 §6.9 はフラグが不在または false であることを要求します; 以前はライタは呼び出し元がセットした値をそのまま残していたため、ビューアにオープン時に外観を再生成するよう要求する文書を生成し、呼び出し元が true にセットしていた場合 silently に仕様違反していました。修正はフラグが以前は不在だった文書にも実行されます — ライタはバリデータに曖昧さを残さないために明示的な /NeedAppearances false を発出します。
v3.55.4 2026-05-22
- AddStandardFont は PDF/A モードでの呼び出しを拒否するようになりました。ISO 19005-1 §6.3.4 は PDF reference の「Standard 14 は埋め込みなしでもよい」免除を撤回します: 準拠ファイルのすべてのフォントプログラムは埋め込まれなければならず、ライブラリは Standard 14 アウトラインを同梱していません。ファサードは silently に 0 を返します; 呼び出し元は実フォントファイルを使う AddTrueTypeFont または AddType1Font に切り替えるべきです。
- AddTrueTypeFont は PDF/A モードがアクティブなとき Embed=0 (埋め込みなし) を Embed=1 (フルフォント埋め込み) に silently に昇格させるようになりました。非埋め込みリファレンスパスはビューアのシステム Arial / Times / Courier インストールへのフォントフォールバックに依存する PDF を生成し、ISO 19005-1 §6.3.4 に違反していました。埋め込みを要求した既存呼び出し元 (Embed=1 または 2) は影響を受けません。
- 非シンボリック TrueType /Encoding 適合チェック (ISO 19005-1 §6.3.7 Cor2 は WinAnsi または MacRoman をエンコーディング名または BaseEncoding として要求し /Differences なし) はこのリリースで追加されていません。なぜならライブラリはすでに非シンボリック TrueType サブセットに対して /WinAnsiEncoding を発出しており、より深い強制はサブセットパスを通じてシンボリック vs 非シンボリックディスパッチを追跡する必要があるからです。v3.51.0 で追加された CheckCompliancePDFA 00034 / 00035 は検証時に非準拠出力をフラグします。
v3.55.3 2026-05-22
- TrueType ベースの CIDFontType2 フォント辞書は /CIDToGIDMap /Identity を明示的に運ぶようになりました。ISO 19005-1 §6.3.3.2 (Cor2) はすべての埋め込み Type 2 CIDFont にエントリの存在を要求します; PDF reference は暗黙の Identity デフォルトを許可しますが、PDF/A は明示値を要求します。ライタは以前はキーを完全に省略していたため、veraPDF (および v3.51.0 で追加された CheckCompliancePDFA 00033) がファイルをフラグしていました。/Identity 名はライタがすでに暗黙的に生成していた GID-as-CID レイアウトと一致するため、既存文書は同じようにレンダリングされます。
- FontDescriptor /CharSet (Type 1 サブセット用) と /CIDSet (CIDFont サブセット用) は引き続き TODO; ライタはどのグリフ名 / CID がサブセットに入ったかを正確に populate するために追跡する必要があります。v3.51.0 で追加された CheckCompliancePDFA 00031 と 00032 が不在をフラグするため、ユーザーは検証時に issue を見ます。
v3.55.2 2026-05-22
- AddImageDirectFromString はエントリポイントで PDF/A 非互換フィルタを拒否するようになりました。Filter = 'LZWDecode' を渡すと各 PDF/A パートで拒否されます (ISO 19005-1 §6.1.10 と等価な ISO 19005-2 / -3 ルール)。Filter = 'JBIG2Decode' または 'JPXDecode' を渡すと PDF/A-1 (モード 1 と 2) で拒否されます。PDF/A-2 と PDF/A-3 は ISO 19005-2 §6.2.8.3 の下、ライタ側ゲートが強制しないサブ仕様制約 (カラーチャネル数、ビット深度均一性、METH/APPROX 要件) 付きで JPXDecode を許可します — それらのモードの呼び出し元は依然として JPEG 2000 ストリームが準拠していることを確認する必要があります。ファサードは禁止フィルタが要求されたとき silently に 0 を返します。
- AddImageFromFile / AddImageFromStream を通じてロードされる TIFF、PNG、JPEG、JPEG 2000 入力は影響を受けません: インポータはソースバイトを解凍し FlateDecode (または JPEG ペイロードには DCTDecode) で再エンコードするため、LZW 入力は出力 Filter チェーンに伝播しません。v3.50.0 (00004) と v3.52.0 (00022、00023) で追加された CheckCompliancePDFA バリデータは、禁止フィルタを出力に滑り込ませる間接パスのために検証時に第二の防御線を提供します。
v3.55.1 2026-05-22
- AddLinkToHideField は PDF/A モードでの呼び出しを拒否するようになりました。前回リリースはアクションが PDF/A 互換だと主張するコメントを残しましたが、ISO 19005-1 Cor2 は /Hide を禁止アクションリストに追加し (§6.6.1)、ISO 19005-2 / -3 も制限を継承します。ファサードは PDF/A モードで呼ばれると silently に 0 を返し、AddLinkToJavaScript と AddLinkToImportData と一致します。
- AddSWFAnnotationFromFile は PDF/A モードでの呼び出しを拒否するようになりました。SWF / RichMedia 注釈は ISO 19005-1 §6.5.2 (Movie / Sound サブタイプなし) で禁止され ISO 19005-2 §6.3.1 (3D / Sound / Screen / Movie なし) で強化された Flash メディアをラップします。ファサードは silently に 0 を返します。
- AddEmbeddedFile と AddLinkToEmbeddedFile は PDF/A-1 と PDF/A-2 モードでの呼び出しを拒否するようになりました。ISO 19005-1 §6.1.11 は /EF を禁止し、ISO 19005-2 §6.8 は埋め込まれた PDF/A ファイルのみを許可します; 添付ペイロードの再帰的 PDF/A 性を検証するのではなく、ライタは単にこれらのモードで呼び出しを拒否します。PDF/A-3 (SetPDFAMode 5 または 6) は引き続き許可されます — 自動 /AFRelationship 注入については v3.55.0 を参照。
- SetOpenActionMenu は文書が PDF/A モードのとき {NextPage, PrevPage, FirstPage, LastPage} ホワイトリスト外の MenuItem 値を拒否するようになりました。ISO 19005-1 §6.6.1 は名前付きアクションをそのセットに制限するため、以前は API が veraPDF が拒否する非準拠 Find / Print / FullScreen Open-Action 辞書を silently に生成していました。
- NewOptionalContentGroup は PDF/A-1 モード (SetPDFAMode 1 または 2) での呼び出しを拒否するようになりました。ISO 19005-1 §6.1.13 はカタログ /OCProperties キーを禁止します。PDF/A-2 (モード 3/4) と PDF/A-3 (モード 5/6) はそれぞれの §6.9 の制約付きで optional content を許可するため、ゲートは PDF/A-1 のみで発動します。
v3.55.0 2026-05-22
- PDF/A-3 文書はすべての埋め込みファイルに /AFRelationship エントリを自動的に受け取るようになりました。以前はライブラリで作成された PDF/A-3 ファイルは ISO 19005-3 Annex E、Table E.1 がすべての埋め込みファイル仕様に AFRelationship を要求するため検証に失敗する可能性がありました。ライタは設定されたデフォルト値 (デフォルトでは 'Unspecified') を保存時にエントリを欠くすべての FileSpec 辞書に注入するようになり、以前に導入された PDF/UA AFRelationship 自動注入をミラーします。PDF/A-3 モード (SetPDFAMode 5 = PDF/A-3b または 6 = PDF/A-3a) のみが自動注入をトリガし、PDF/A-1 と PDF/A-2 は ISO 19005-1 §6.1.11 と ISO 19005-2 §6.8 に従い埋め込みファイルを引き続き完全に拒否します。
- SetPDFA3DefaultAFRelationship は新しい API で、埋め込みファイルが /AFRelationship エントリを欠くときライタが書き出すデフォルト値を上書きします。ISO 19005-3 Table E.1 の値を受け付けます: 'Source' (埋め込みファイルは PDF コンテンツを生成したソースマテリアル)、'Data' (ファイルは視覚的なテーブルやチャートを支える構造化データ)、'Alternative' (オーディオバージョンなどの代替レンディション)、'Supplement' (方程式の MathML 形などの補足表現)、'Unspecified' (関係を上記で特徴付けられない)、または任意の登録済み第 2 級名前。空文字列は 'Unspecified' にリセット。ファイルごとの上書きは SetEmbeddedFileAFRelationship を通じて引き続き利用可能。
- 新しい API は Delphi ファサードで TPDFlib.SetPDFA3DefaultAFRelationship として、DLL で DLSetPDFA3DefaultAFRelationship (PWideChar) と DLSetPDFA3DefaultAFRelationshipA (PAnsiChar) として公開されています。
v3.54.0 2026-05-22
- LoadOutputIntentProfile は新しい API で、同梱の sRGB OutputIntent プロファイルをディスクからロードされた外部 ICC プロファイルに置き換えます。ライブラリは sRGB プロファイルしか同梱していないため、DeviceCMYK や DeviceGray 色空間で PDF/A 文書を生成するときに必須です。典型的な使用は最初に SetPDFAMode を呼び (OutputIntent skeleton を初期化)、次に LoadOutputIntentProfile('C:\\path\\to\\FOGRA39.icc', 'DeviceCMYK') でプロファイルバイトを入れ替え新しい色空間で文書をタグ付けすることです。成功時 1、ファイル不在または未知の色空間時 0 を返します。Delphi ファサードで TPDFlib.LoadOutputIntentProfile として、DLL で DLLoadOutputIntentProfile (PWideChar 形) と DLLoadOutputIntentProfileA (PAnsiChar 形) として公開されています。ISO 19005-1 §6.2.2 は DestOutputProfile ストリームに任意の登録済み ICC プロファイルを許可します。
- SetFillColorCMYK、SetTextColorCMYK、SetTextHighlightColorCMYK、SetTextUnderlineColorCMYK、AddSeparationColor、SetFillColorSep、SetLineColorSep、SetTextHighlightColorSep、SetTextColorSep は文書の OutputIntent プロファイルが DeviceCMYK のとき PDF/A モードで成功するようになりました。以前はこれらの API は OutputIntent に関係なく PDF/A モードのすべての呼び出しを拒否しており、準拠 CMYK 文書の生成を妨げていました。ゲートは現在 PDFAMode = 0 OR OutputIntentColorSpace = 'DeviceCMYK' になっており、OutputIntent が CMYK プロファイルを使うとき DeviceCMYK が許可されるという ISO 19005-1 §6.2.3.3 ルール、およびベース色空間も準拠する Separation alternates を許可する ISO 19005-1 §6.2.3.4 と一致します。
- SetTextShader は OutputIntent プロファイルが DeviceRGB または DeviceCMYK のいずれかのとき PDF/A モードで成功するようになりました。シェーダ自体は PDF/A で禁止されていません; バリデータ (read 側) はシェーダの内部色空間が OutputIntent と一致することを検証します。以前の strict-reject 動作は準拠シェーダ使用を拒否していました。
- CMYK / Separation / Shader アンブロックは AddOutputIntent と LoadOutputIntentProfile (v3.53.0 で導入) によってセットされた OutputIntentColorSpace タグに依存します。LoadOutputIntentProfile なしで SetPDFAMode を呼び出すと色空間は DeviceRGB (同梱の sRGB プロファイル) のままなので、CMYK 呼び出しはデフォルトで引き続き拒否されます — 新しい動作は LoadOutputIntentProfile 経由のオプトインです。
v3.53.0 2026-05-22
- OutputIntent 辞書は ISO 19005-1 §6.2.2 と Adobe Acrobat preflight が推奨する完全な PDF/A skeleton フィールドを運ぶようになりました: /OutputCondition (人間可読の色条件記述)、/Info (長形識別テキスト)、/RegistryName (レジストリ URL、デフォルトは http://www.color.org)。値はレガシーの単一引数呼び出しサイトに対してそれぞれ "sRGB IEC61966-2.1" / "sRGB IEC61966-2.1" / "http://www.color.org" がデフォルトです; 新しい AddOutputIntent オーバーロードは 4 つのカスタムフィールドを直接取るため、呼び出し元は自身の色条件のためにそれらを populate できます。
- AddOutputIntent は新しい 5 引数オーバーロードを獲得しました: AddOutputIntent(ColorSpace, OutputConditionIdentifier, OutputCondition, Info, RegistryName)。レガシーの単一引数形は変更なく動作し続けます; sRGB デフォルトで新オーバーロードに委譲するようになりました。ColorSpace 引数は埋め込み ICC プロファイル辞書に書き込まれる /N コンポーネント数も選択します (DeviceRGB で 3、DeviceCMYK で 4、DeviceGray で 1); 埋め込みプロファイル自体は v3.54.0 で出荷予定の LoadOutputIntentProfile API までは同梱 sRGB ストリームのままです。
- TPDFDocument は最後の AddOutputIntent 呼び出しの色空間を追跡する読み書きプロパティとして OutputIntentColorSpace を公開します。これは v3.54.0 における CMYK / Separation / Shader ライタ側制限のゲート条件になり、今日 PDF/A モードのすべての呼び出しを拒否する色 API は色空間が OutputIntent と不一致のときのみ拒否するようになります。
v3.52.0 2026-05-22
- CheckCompliancePDFA は注釈、graphics-state、アクション、form XObjects を監査するようになり、ISO 19005-1 第 6.2-6.6 章と等価な PDF/A-2/-3 差分ルールに対する PDF/A 読み取り側バリデータのカバレッジを完成させます。バリデータは 14 の新しい issue クラス (00050-00067) を報告します: 禁止注釈サブタイプ (00050; ISO 19005-1 §6.5.2 は PDF/A-1 で FileAttachment / Sound / Movie を禁止、ISO 19005-2 §6.3.1 は PDF/A-2 と PDF/A-3 で 3D / Sound / Screen / Movie を禁止)、1.0 以外の注釈 /CA (00051; §6.5.3)、欠落または Print=0 / Hidden=1 / Invisible=1 / NoView=1 の注釈 /F (00052; §6.5.3、/Subtype /Popup は免除)、注釈 /AA (00054; §6.6.2)、/N 以外のキーまたは非準拠 /N 値を持つ注釈外観辞書 (00055; §6.5.3 Cor2)、/A を持つ Widget 注釈 (00056; §6.9)、ExtGState /TR (00058; §6.2.8)、/Default 以外の ExtGState /TR2 (00059; §6.2.8)、PDF/A-1 のみ: /None 以外の ExtGState /SMask (00061; §6.4)、Normal または Compatible 以外の /BM (00062; §6.4)、1.0 以外の /CA または /ca (00063; §6.4)。
- Action-anywhere 監査 (00064、00065) は v3.50.0 の OpenAction 限定チェックを、アクションがどこに住んでいるか (注釈 /A、widget /A、outline /A、catalog /OpenAction など) に関係なく禁止 /S アクション値 (Launch、Sound、Movie、ResetForm、ImportData、JavaScript、Hide、SetState、NOP、Trans、GoTo3DView、Rendition、SetOCGState) と /N が {NextPage, PrevPage, FirstPage, LastPage} 外の名前付きアクションをフラグする完全な走査に置き換えます。ISO 19005-1 §6.6.1。
- XObject 監査 (00066、00067) は PostScript と Reference XObjects、加えて Form XObjects 上の禁止キー (/OPI、/PS、/Subtype2 = /PS) と Image XObjects 上の禁止キー (/Alternates、/OPI、/Interpolate true) を報告します。ISO 19005-1 §6.2.4 - §6.2.7。
v3.51.0 2026-05-22
- CheckCompliancePDFA は v3.50.0 で追加された構造チェックに加えてフォントと色空間の適合性も監査するようになりました。バリデータは 9 つの新しい issue クラスを報告します: 少なくとも 1 つのフォントプログラムが埋め込まれていない (00030; ISO 19005-1 §6.3.4 は Standard 14 代替を含むすべてのフォントプログラムが埋め込まれることを要求)、Type 1 サブセットの FontDescriptor が /CharSet を欠く (00031; §6.3.5)、CIDFont サブセットが /CIDSet を欠く (00032; §6.3.5)、CIDFontType2 が /CIDToGIDMap を欠く (00033; §6.3.3.2 Cor2)、非準拠 /Encoding を持つ非シンボリック TrueType (00034; §6.3.7 Cor2 は WinAnsi/MacRoman を直接または BaseEncoding として要求、/Differences なし)、引き続き /Encoding を運ぶシンボリック TrueType (00035; §6.3.7 Cor2)、PDF/A-Na または PDF/A-Nu 文書で少なくとも 1 つのフォントが /ToUnicode を欠く (00036; §6.3.8 4 クラス免除適用)、プロファイルストリームを埋め込まない ICCBased 色空間 (00037; §6.2.3.2)、DeviceRGB と DeviceCMYK の両方を使うファイル (00038; §6.2.3.3 はその混合を禁止)。
- /ToUnicode チェック (00036) は ISO 19005-1 §6.3.8 と ISO 19005-2 §6.2.11.7 に従い Unicode マッピングを要求するのはこれらのレベルのみであるため、適合性レベル A と U にスコープされます。レベル B ファイル (PDF/A-1b、PDF/A-2b、PDF/A-3b) はフラグされません。4 クラス免除は定義済みエンコーディング (MacRomanEncoding、MacExpertEncoding、WinAnsiEncoding)、Adobe Standard Latin / Symbol グリフ名フォントのプロキシとしての Standard 14 Type 1 BaseFonts、子孫 CIDFont が Adobe-GB1、Adobe-CNS1、Adobe-Japan1、Adobe-Korea1 レジストリを使う Type 0 フォントを認識します。
- フォント監査はすべての Font 辞書を走査し、Subtype (Type1、MMType1、TrueType、Type3、子孫 CIDFontType0 または CIDFontType2 を持つ Type 0) で分類してから関連チェックをディスパッチします。Type 0 composite フォントは Type 0 ラッパー上で /ToUnicode を保ちつつ、埋め込みとサブセットチェックを子孫 CIDFont に委譲します。サブセット検出は標準の 6 大文字プレフィックス規約を使用します。
v3.50.0 2026-05-22
- CheckCompliancePDFA はバリデータが以前見逃していた 15 の追加 PDF/A 非適合 issue を報告するようになりました: トレーラ /ID 配列の欠落 (00013)、文書カタログ /Metadata ストリームの欠落 (00014)、/Metadata ストリームに適用された /Filter (00015)、/F、/FFilter、/FDecodeParms 経由で外部ファイルを参照するストリーム辞書 (00016)、任意のファイル仕様辞書の /EF 経由または PDF/A-1 文書の Name tree /EmbeddedFiles エントリ経由で宣言された埋め込みファイル (00017、00018)、禁止アクションタイプを指す /OpenAction (00019)、文書カタログまたは任意のページの /AA 追加アクション辞書 (00020、00021)、PDF/A-1 文書の JBIG2Decode または JPXDecode フィルタ (00022、00023)、/Name が /Identity でない Crypt フィルタ (00024)、文書カタログの /Requirements (00025)、/UR3 と /DocMDP 以外のキーを持つ /Perms (00026)、true にセットされた /AcroForm /NeedAppearances (00027)。バリデータは ISO 19005-1 §6.6.1 に従い、禁止カタログ /OpenAction アクションタイプ (/Launch、/Sound、/Movie、/ResetForm、/ImportData、/JavaScript、/Hide、/SetState、/NOP、/Trans、/GoTo3DView、/Rendition、/SetOCGState) と {NextPage, PrevPage, FirstPage, LastPage} 許可リスト外の名前付きアクション /N 値をフラグするようになりました。
- PDFAID パーサは既存の A と B バリアントと並んで U 適合性サフィックス (PDF/A-2U、PDF/A-3U) を受け付けるようになったため、別のツールで生成された PDF/A-2U または PDF/A-3U ファイルをスキャンするとき CheckCompliancePDFA はもはや偽の "00005 PDFA Mark NOT Found or invalid" 警告を発しません。ISO 19005-2:2011 で追加された Unicode マッピング適合性レベルがバリデータで認識されるようになりました。
- フィルタ固有チェック (JBIG2Decode、JPXDecode) と埋め込みファイルチェック (/EF、/EmbeddedFiles) は引き続き PDF/A-1 にスコープされます。なぜなら ISO 19005-2 §6.2.8.3 と §6.8 は PDF/A-2 と PDF/A-3 ではそれらの制限を明示的に緩和するからです。文書構造チェック (/Metadata、/AcroForm /NeedAppearances、/OpenAction、/AA、/Requirements、/Perms) はすべての PDF/A パートに適用されます。
v3.49.0 2026-05-21
- AddLinkToImportData は Link 注釈を作成し、その action は PDF インポートデータアクション (/S /ImportData) です。ユーザーがリンクをクリックすると、外部 FDF ファイルから文書の AcroForm フィールドを populate します (ISO 32000-1 §12.6.4.8, Table 198)。FileName パラメータは filespec 辞書として参照され、パス正規化規則は AddLinkToFile / AddLinkToFileEx と同じです (ISO 32000-1 §7.11.2.1 に従ってバックスラッシュをスラッシュに変換)。Options ビット 0 は表示ボーダーの切り替え、ビット 1–3 はリンクハイライトモード (Invert、Outline、Push) を選択し、既存の AddLinkTo* の規約と一致します。PDF 1.4 以降。アクションが外部リソースを参照するため PDF/A では許可されません。ファサードは PDF/A モードで呼ばれると silently に 0 を返します。Delphi ライブラリと DLL インターフェースに DLAddLinkToImportData / DLAddLinkToImportDataA (PWideChar と PAnsiChar 形式) として公開されています。
v3.48.0 2026-05-21
- AddLinkToHideField は Link 注釈を作成し、その action は PDF 非表示アクション (/S /Hide) です。ユーザーがリンクをクリックすると、1 つ以上の AcroForm フィールドの可視性を切り替えます (ISO 32000-1 §12.6.4.10, Table 196)。FieldNames はカンマ、セミコロン、改行で区切られた 1 つ以上の完全修飾フィールド名を受け付けます。単一名はテキスト文字列として /T に書き出され、2 つ以上は配列として /T に書き出されます。両形式とも仕様で許可されています。HideFlag は可視性方向を選択します。非ゼロ値は列挙フィールドを非表示にし (/H true)、ゼロは表示します (/H false)。Options ビット 0 は表示ボーダーの切り替え、ビット 1–3 はリンクハイライトモード (Invert、Outline、Push) を選択し、AddLinkToWeb / AddLinkToNamedAction と一致します。PDF 1.2 以降。外部リソースを参照しないため PDF/A 互換です。Delphi ライブラリと DLL インターフェースに DLAddLinkToHideField / DLAddLinkToHideFieldA (PWideChar と PAnsiChar 形式) として公開されています。
v3.47.0 2026-05-21
- AddLinkToNamedAction は Link 注釈を作成し、その action は PDF 名前付きアクション (/S /Named) です。ISO 32000-1 §12.6.4.11, Table 194 で定義された 4 つの標準ビューア ナビゲーションコマンドのいずれか (NextPage、PrevPage、FirstPage、LastPage) をトリガーします。NamedActionType パラメータでコマンドを選択 (0=NextPage、1=PrevPage、2=FirstPage、3=LastPage)。範囲外の値は NextPage にフォールバックし、ライタは常に spec 準拠の /N 名前を書き出します。Options ビット 0 は表示ボーダーの切り替え、ビット 1–3 はリンクハイライトモード (Invert、Outline、Push) を選択し、既存の AddLinkToWeb / AddLinkToPage の規約と一致します。注釈は PDF 1.1 以降が必要で、外部リソースを参照しないため PDF/A 互換です。Delphi ライブラリと DLL インターフェースで利用可能。
v3.46.1 2026-05-21
- AddCaretAnnotation は指定された矩形位置にカレットマークアップ注釈 (PDF /Subtype /Caret) を作成します。ページ上でテキストや内容が挿入、省略、またはレビュアの注意を要する位置をマークするために使用します。SymbolType (0 / 1) で 2 種類のシンボルタイプ (None と Paragraph) をサポートし、色、不透明度、タイトル、内容、作成/変更タイムスタンプを設定できます。ISO 32000-1 §12.5.6.11 で定義。PDF 1.5 以降。Delphi ライブラリと DLL インターフェースで利用可能。
- この項目は v3.44.0 の Square+Circle で始まった幾何注釈の補完作業を完了するものです。PDFlibPas は既存の Link、FileAttachment、SVG、U3D、SWF のサポートに加え、Text、Stamp、FreeText、TextMarkup (Highlight/Underline/Squiggly/StrikeOut)、Square、Circle、Line、Polygon、PolyLine、Ink、Caret 注釈を作成できるようになりました。
v3.46.0 2026-05-21
- AddInkAnnotation は ink マークアップ注釈 (PDF /Subtype /Ink) を作成します。ページに描かれた手書きストロークやフリーフォームマークを表現します。ストロークは単一文字列として渡され、複数ストロークは '|' または改行で区切り、各ストローク内の座標ペアは AddPolygonAnnotation と同じ空白/カンマ/セミコロン/タブ形式に従います。例として "100 100 110 105 120 110 | 200 200 210 205" は 2 つの独立したストロークを表します。設定可能なボーダー幅、ink 色、不透明度、タイトル、内容、タイムスタンプをサポート。ISO 32000-1 §12.5.6.13 で定義。PDF 1.3 以降。Delphi ライブラリと DLL インターフェースで利用可能。
- 各ストロークは偶数個の値 (少なくとも 4 つ) を含む必要があり、満たさない場合は 0 を返し注釈は書き込まれません。/Rect は全ストロークの結合範囲に小さなパディングを加えて自動計算され、ストロークが注釈バウンディングボックス内に収まります。
v3.45.0 2026-05-21
- AddPolygonAnnotation は閉じた多角形マークアップ注釈 (PDF /Subtype /Polygon) を作成します。頂点は空白、カンマ、セミコロン、タブ区切りの座標ペア文字列として渡します (例: "100 100 200 100 200 200 100 200")。設定可能なボーダー幅、ボーダー色、オプションの内部塗りつぶし色、不透明度、タイトル、内容、タイムスタンプをサポート。ISO 32000-1 §12.5.6.9 で定義。PDF 1.5 以降。Delphi ライブラリと DLL インターフェースで利用可能。
- AddPolyLineAnnotation は開いた折れ線マークアップ注釈 (PDF /Subtype /PolyLine) を作成します。同じ頂点文字列形式に加えて、両端で設定可能な端点スタイル (None、Square、Circle、Diamond、OpenArrow、ClosedArrow、Butt、ROpenArrow、RClosedArrow、Slash) を持ちます。ISO 32000-1 §12.5.6.9 で定義。PDF 1.5 以降。Delphi ライブラリと DLL インターフェースで利用可能。
- 両方の注釈は少なくとも 2 頂点 (4 つの数値) と偶数個の数値が必要です。頂点文字列が有効なペアリストに解析できない場合は 0 を返します。/Rect は頂点範囲にボーダー幅に比例したパディングを加えて計算され、端点装飾が見えるようにします。
- 両方の注釈は文書の最低バージョンが低い値にロックされているとき、emit 時にバージョンを PDF 1.5 まで自動的に bump します。
v3.44.1 2026-05-21
- AddLineAnnotation は 2 つの端点間に線マークアップ注釈 (PDF /Subtype /Line) を作成します。設定可能なボーダー幅、線色、オプションの内部塗りつぶし色、両端の端点スタイル (None、Square、Circle、Diamond、OpenArrow、ClosedArrow、Butt、ROpenArrow、RClosedArrow、Slash)、不透明度、タイトル、内容、作成/変更タイムスタンプを持ちます。ISO 32000-1 §12.5.6.7 で定義。PDF 1.3 以降。Delphi ライブラリと DLL インターフェースで利用可能。
- 注釈の /Rect は 2 つの端点にボーダー幅に比例したパディングを加えて計算され、端点装飾が注釈バウンディングボックス内に収まります。
v3.44.0 2026-05-21
- AddSquareAnnotation は指定された矩形位置に矩形マークアップ注釈 (PDF /Subtype /Square) を作成します。設定可能なボーダー幅、ボーダー色、オプションの内部塗りつぶし色、不透明度、タイトル、内容、作成/変更タイムスタンプを持ちます。ISO 32000-1 §12.5.6.8 で定義。PDF 1.3 以降。Delphi ライブラリと DLL インターフェースで利用可能。
- AddCircleAnnotation は指定された矩形に内接する楕円マークアップ注釈 (PDF /Subtype /Circle) を作成します。設定可能なボーダー、塗りつぶし、不透明度、タイトル、内容、タイムスタンプは AddSquareAnnotation と同じです。ISO 32000-1 §12.5.6.8 で定義。PDF 1.3 以降。Delphi ライブラリと DLL インターフェースで利用可能。
- 両方の新注釈は文書の最低バージョンが低い値にロックされているとき、emit 時に PDF 1.3 まで自動的に bump し、標準のマークアップ注釈フィールドセット (/Type /Subtype /Rect /C /IC /BS /Border /CA /F /M /CreationDate /NM /T /Contents /Subj /P) を emit します。これにより Acrobat、Foxit、Edge の既存のレビューワークフローは作成後もこれらの注釈を編集できます。
v3.43.0 2026-05-20
- SetStructElemSpaceBefore と SetStructElemSpaceAfter は現在開いている構造要素に /SpaceBefore と /SpaceAfter 属性 (Layout owner) を設定します。ブロックレベル要素の前後の間隔をポイント単位で表現します。ISO 32000-1 §14.8.5.4.2 Table 340 で定義。Delphi ライブラリ、ActiveX (Dispid 73008051/73008052)、DLL インターフェースで利用可能。
- SetStructElemStartIndent と SetStructElemEndIndent は現在開いている構造要素に /StartIndent と /EndIndent 属性 (Layout owner) を設定します。書字方向を考慮した内容矩形の start と end エッジからのインデント距離をポイント単位で表現します。ISO 32000-1 §14.8.5.4.2 Table 340 で定義。Delphi ライブラリ、ActiveX (Dispid 73008053/73008054)、DLL インターフェースで利用可能。
- SetStructElemColor は /Color 属性 (Layout owner) を RGB トリプル (各成分 0.0-1.0) として設定し、要素の前景色を記述します。リフローエンジンと下流の色コントラストチェッカーで使用されます。ISO 32000-1 §14.8.5.4.2 Table 340 で定義。Delphi ライブラリ、ActiveX (Dispid 73008055)、DLL インターフェースで利用可能。
- BuildStructElemDictRef のシリアライズバグを修正:単一トークン数値属性値 (SpaceBefore、SpaceAfter、StartIndent、EndIndent など) が PDF 数値ではなく PDF 名前として書き出されていました。修正は単一 owner と複数 owner の属性ブランチ両方に適用されます。
v3.42.0 2026-05-20
- CheckCompliancePDFA は 6 種類すべての PDF/A モード (1a、1b、2a、2b、3a、3b) を正しく検証するようになりました。PDFAID チェック (コード 00005) は '1B' だけでなく 6 つの有効な XMP マーカーのいずれかを受け入れます。バージョン上限チェック (00002) は PDF/A-1 に 1.4、PDF/A-2 と PDF/A-3 に 1.7 を適用します。
- OCProperties チェック (コード 00003) は条件付きになりました:PDF/A-1 文書にのみ適用され、PDF/A-1 では optional content (レイヤー) が禁止されています。PDF/A-2 と PDF/A-3 はレイヤーを許可し、フラグされません。
- 3 つの新しいコンプライアンスチェックを追加:コード 00006 は暗号化された文書をフラグ (暗号化は全 PDF/A バージョンで禁止)、コード 00007 はカタログに OutputIntents エントリが欠けている文書をフラグ (全 PDF/A バージョンで必須)、コード 00011 と 00012 はコンフォーマンスレベルが -a (アクセシビリティ) のときに MarkInfo または StructTreeRoot が欠けている文書をフラグします。
v3.41.0 2026-05-20
- PDF/A モードは API レベルで禁止操作を強制するようになりました。PDF/A モード (1-6 のいずれか) が有効なとき、SetEncryption、AddSeparationColor、SetFillColorCMYK、SetTextColorCMYK、その他の CMYK/Separation/Shader API を呼び出すと 0 を返し効果なしになります。PDF/A の単一 sRGB 出力インテント要求と整合します。
- PDF/A-1 (モード 1 と 2) では透明度が禁止:SetTransparency、SetBlendMode、SetPageTransparencyGroup は現在のモードが 1 または 2 のとき 0 を返し no-op になります。PDF/A-2 と PDF/A-3 (モード 3-6) は限定的な透明度を許可し制限されません。
- JavaScript アクションは全 PDF/A モード (1-6) で禁止:SetOpenActionJavaScript、PageJavaScriptAction、DocJavaScriptAction、AddGlobalJavaScript、AddLinkToJavaScript は PDF/A モードが有効なときすべて 0 を返し no-op になります。ISO 19005-1 §6.6.1 は PDF/A 文書での JavaScript を明示的に禁止しています。
- ファイル添付 API (EmbedFile、AddFileAttachment) は PDF/A-1 と PDF/A-2 モード (1-4) でブロックされます。任意の埋め込みファイルを明示的に許可する PDF/A-3 (モード 5 と 6) では引き続き機能します。
v3.40.0 2026-05-20
- SetPDFAMode が PDF/A-2 と PDF/A-3 コンフォーマンスレベルをサポートするようになりました。NewMode=3 は PDF/A-2b、4 は PDF/A-2a、5 は PDF/A-3b、6 は PDF/A-3a。PDF/A-2 は PDF 1.7 を対象とし、レイヤー、インタラクティブフォーム、JPEG2000 画像、限定的な透明度を許可します。PDF/A-3 は PDF/A-2 を拡張し、任意の埋め込みファイル (任意の MIME タイプ) を許可します。すべての -a 変種はアクセシビリティ コンフォーマンスレベルで必要な /MarkInfo とタグ付き PDF 構造マーカーを自動的に書き込みます。
- 修正:SetPDFAMode(1) (PDF/A-1a) は v3.20.0 で導入された内部ルーティングバグにより no-op になっていました。/MarkInfo と /OutputIntents を正しく書き込み、XMP pdfaid:part=1/conformance=A を設定するようになりました。
- GetInformation(201) は新しいモード番号付けと整合して、アクティブな PDF/A モードに対応する '1' から '6' を返します。
v3.39.0 2026-05-20
- SetStructElemWritingMode は現在開いている構造要素に /WritingMode 属性 (Layout owner) を設定します。有効値は LrTb (左から右、ラテンスクリプトのデフォルト)、RlTb (右から左、アラビア語とヘブライ語)、TbRl (上から下、右から左、伝統的な CJK 縦書き)。ISO 32000-1 §14.8.5.4.2 Table 340 で定義。Delphi ライブラリ、ActiveX (Dispid 73008049)、DLL インターフェースで利用可能。
- SetStructElemListNumbering は現在開いている構造要素に /ListNumbering 属性 (List owner) を設定します。サポートされる値は None、Disc、Circle、Square (順序なしマーカー) と Decimal、UpperRoman、LowerRoman、UpperAlpha、LowerAlpha (順序付き番号付け) です。属性は L (リスト) 要素に設定され、支援技術がリストタイプを正しくアナウンスできるようにします。ISO 32000-1 §14.8.5.3.2 Table 336 で定義。Delphi ライブラリ、ActiveX (Dispid 73008050)、DLL インターフェースで利用可能。
v3.38.0 2026-05-20
- SetStructElemColSpan は現在開いている構造要素に /ColSpan 属性 (Table owner) を設定し、セルがまたぐ列数を示します。ISO 32000-1 §14.8.5.7.2 Table 337 で定義。Delphi ライブラリ、ActiveX (Dispid 73008047)、DLL インターフェースで利用可能。
- SetStructElemRowSpan は現在開いている構造要素に /RowSpan 属性 (Table owner) を設定し、セルがまたぐ行数を示します。ISO 32000-1 §14.8.5.7.2 Table 337 で定義。Delphi ライブラリ、ActiveX (Dispid 73008048)、DLL インターフェースで利用可能。
- 両関数は AddTagAttribute を Owner='Table' と対応する属性名で呼び出すのと等価な便利ラッパーです。複雑または span ヘッダーテーブル内のセルを完全に記述するために SetStructElemScope を補完します。
v3.37.2 2026-05-20
- GetPDFUADiagnostics は N 個のインタラクティブフォームフィールド (Widget 注釈) に TU (ツールチップ / アクセシブル名) エントリが欠けているとき FORM-NO-TOOLTIP:N を報告するようになりました。ISO 14289-1 §7.18.4 はすべてのインタラクティブフォームフィールドが TU エントリを持つことを要求し、フィールドがフォーカスを受けたとき支援技術がユーザーにフィールドの目的をアナウンスできるようにします。/TU はスクリーンリーダーが読み上げるアクセシブル名で、プログラムからのアクセスやフォーム送信に使われる部分フィールド名 /T とは異なります。
v3.37.1 2026-05-20
- GetPDFUADiagnostics は N 個の LI または LBody 構造要素が必要な親要素の外に現れるとき LIST-STRUCT:N を報告するようになりました。ISO 32000-1 §14.8.4.4 は LI が L (リスト) の直接の子、LBody が LI (リスト項目) の直接の子であることを要求します。リストネストの不整形は支援技術がリスト内容を正しく走査・アナウンスできなくし、PDF/UA-1 バリデータで文書構造検証の失敗を引き起こす可能性があります。
v3.37.0 2026-05-20
- BeginTagEx2 は新しい API で、1 回の呼び出しで構造要素を開きすべての主要な要素プロパティを設定します。BeginTagEx の TagType、AltText、ActualText、Lang パラメータに加えて、BeginTagEx2 は Title (/T、Tags ナビゲーションパネル用)、ElemID (/ID、要素一意識別子)、Expansion (/E、略語または頭字語の完全形) を受け付けます。これら 3 つの追加パラメータのいずれかに空文字列を渡すことは、対応する setter を省略することと等価です。BeginTagEx2 はよく記述された要素の定型コードを削減します — BeginTagEx の後に SetStructElemTitle、SetStructElemID、SetStructElemExpansion を個別に呼び出す代わりに、7 つすべてのプロパティを 1 回の呼び出しで設定できます。この関数は Delphi ライブラリ、ActiveX (Dispid 73008046)、DLL インターフェースで利用可能。
v3.36.1 2026-05-20
- GetPDFUADiagnostics は N 個の TH (テーブルヘッダーセル) 構造要素に Scope 属性が欠けているとき TABLE-TH-NO-SCOPE:N を報告するようになりました。ISO 32000-1 §14.8.4.3.4 Table 337 は Scope (Row、Column、または Both) を、ヘッダーセルがどのデータセルに適用されるかを記述する属性として定義しています。Scope が無いと、スクリーンリーダーやその他の支援技術は複雑または多層ヘッダーテーブルでヘッダーセルとデータセルを確実に関連付けられず、ISO 14289-1 §7.5 で要求される動作ができません。各 TH 要素をタグ付けした直後に SetStructElemAttr('Table','Scope', 'Column') (または 'Row' / 'Both') を呼んでください。
v3.36.0 2026-05-20
- SetStructElemExpansion は新しい API で、現在開いている構造要素に /E (展開テキスト) エントリを設定します (ISO 32000-1 §14.9.5)。展開テキストは要素に含まれる略語や頭字語の完全な綴り形式です — 例えば Span のテキストが "WWW" の場合は "World Wide Web"。スクリーンリーダーは略語の文字を発音しようとせず展開を読み上げ、技術および科学コンテンツのアクセシビリティに不可欠です。PDF/UA-1 (ISO 14289-1 §7.2) は自然言語が一意に決定可能であることを要求し、/E は略語と頭字語の標準的なメカニズムです。この関数は Delphi ライブラリ、ActiveX、DLL インターフェースで利用可能。
v3.35.1 2026-05-20
- GetPDFUADiagnostics は文書情報辞書の /Title エントリが欠けているか空のとき DOCINFO-TITLE-MISSING を報告するようになりました。PDF/UA-1 (ISO 14289-1) は文書タイトルを要求し、文書を開いたときスクリーンリーダーがそれをアナウンスできるようにします。既存の DISPLAYDOCTITLE-FALSE チェックはタイトルがビューア タイトルバーに表示されることを確認します。DOCINFO-TITLE-MISSING は補完的で、タイトル値自体が設定されていることを確認します。値を提供するには SetDocumentInfo('Title', ...) を呼んでください。
v3.35.0 2026-05-20
- SetStructElemTitle は新しい API で、現在開いている構造要素に /T (タイトル) エントリを設定します (ISO 32000-1 §14.7.2 Table 324)。タイトルは特定の要素インスタンスを識別する人間可読のラベルで — 例えば "Chapter 1"、"Summary Table"、"Figure 3: Quarterly Sales" — PDF ビューアの Tags ナビゲーションパネルに表示され、アクセシビリティ修復ツールで使われます。/T は /Alt (レンダリング障害ユーザー向けの代替テキスト) や /ActualText (グリフレベルテキスト修正) とは異なり、Table、Figure、Form、Sect、Div などの非テキストコンテナ要素で最も有用です。設定済み値をクリアするには空文字列を渡します。この関数は Delphi ライブラリ、ActiveX、DLL インターフェースで利用可能。
v3.34.0 2026-05-20
- SetStructElemAltText は新しい API で、現在開いている構造要素に /Alt エントリを設定します (ISO 32000-1 §14.9.3)。BeginTag に AltText を渡すのと等価ですが、要素が開かれた後に代替テキスト記述を設定または更新できます — 記述が要素タイプと別に計算される場合に有用です。PDF/UA-1 (ISO 14289-1 §7.5) は Figure と Formula 要素に Alt テキストを要求し、GetPDFUADiagnostics はすでに欠落値に対して FIGURE-NO-ALT:N を報告します。この関数は Delphi ライブラリ、ActiveX、DLL インターフェースで利用可能。
v3.33.1 2026-05-20
- GetPDFUADiagnostics に ROLEMAP-UNMAPPED:N チェックが含まれるようになり、/RoleMap 辞書にエントリのない文書で使用されたカスタム構造要素タイプ名を検出します。ISO 14289-1 §7.1 と ISO 32000-1 §14.7.3 はすべての非標準構造タイプを標準 PDF タイプ (P、Span、Figure など) にマップすることを要求し、支援技術が要素の処理方法を判断できるようにします。N 個のマップされていないタイプが見つかると、issue 記述にタイプ名のリストが含まれ、呼び出し元はどの AddRoleMap エントリが必要かを知ることができます。ISO 32000-1 Table 333 (PDF 1.7) で定義された全 49 種類の標準構造タイプは認識され、報告から除外されます。
v3.33.0 2026-05-20
- SetStructElemLang は新しい API で、現在開いている構造要素に /Lang エントリを設定します (ISO 32000-1 §14.9.2)。言語タグは SetDocumentLanguage または SetPDFUAMode で宣言された文書レベル言語を要素とその子孫すべてに対して上書きし、多言語文書が各スパンを正しい BCP 47 言語タグ (例: 'en-US'、'fr'、'zh-Hant-TW') でマークできるようにします。スクリーンリーダーは要素レベルの /Lang を使用して、文書を読み上げるときに適切なテキスト読み上げエンジンまたは音声を選択します。この関数は Delphi ライブラリ、ActiveX、DLL インターフェースで利用可能。
v3.32.0 2026-05-20
- SetStructElemActualText は新しい API で、現在開いている構造要素に /ActualText エントリを設定します (ISO 32000-1 §14.9.4)。コンテンツストリーム抽出が正しくない結果をもたらすとき、グリフシーケンスが表現する正確な Unicode テキストを指定するために使用します — 最も一般的なケースは OpenType 合字グリフ (U+FB00 ff、U+FB01 fi、U+FB02 fl) と展開形が自明でない略語です。ActualText はレンダリングコンテンツを置き換えるのではなく補完します。支援技術とテキスト抽出器がその要素について読み上げる/出力するものを上書きしますが、視覚的レンダリングは抑制しません。この関数は Delphi ライブラリ、ActiveX、DLL インターフェースで利用可能。
v3.31.1 2026-05-20
- GetPDFUADiagnostics は欠落 Alt テキスト (FIGURE-NO-ALT:N) を報告するときに Figure 要素に加えて Formula 構造要素もチェックするようになりました。ISO 32000-1 §14.9.3 はグラフィカルな figure と数式の両方に代替記述を要求します。以前は Figure 要素のみがスキャンされていました。
- GetPDFUADiagnostics は文書の PDF バージョンが 1.7 より低いとき PDF-VERSION-LOW を報告するようになりました。PDF/UA-1 (ISO 14289-1) は PDF 1.7 (ISO 32000-1:2008) に対して定義されています。PDF 1.5 や 1.6 の文書はベース仕様の要件を満たせません。SetPDFUAMode を呼び出すとバージョンを自動的に 1.7 に上げます。
v3.31.0 2026-05-19
- 構造要素 ID とテーブルヘッダー関連付けがサポートされるようになりました。SetStructElemID は現在開いている構造要素に一意の文字列識別子 (/ID) を割り当てます。文書保存時に ID は構造ツリールートの /IDTree 名前ツリーに収集され、アクセシビリティツールや相互参照が ID で要素を見つけられます (ISO 32000-1 §14.7.4)。SetStructElemHeaders は現在のテーブルセル (TD または TH) を、以前に割り当てた ID のカンマ区切りリストを使って 1 つ以上のヘッダーセルに関連付け、Table 属性 owner 辞書に /Headers 配列を書き出します (ISO 32000-1 §14.8.5.7.2)。これら 2 つの関数を合わせて PDF/UA-1 (ISO 14289-1 §7.10) と WCAG 2.x SC 1.3.1 の複雑なテーブルマークアップをサポートします。両関数は Delphi ライブラリ、ActiveX、DLL インターフェースで利用可能。AddTagAttribute も /Headers 属性をカンマ区切り値で正しく扱い、PDF テキスト文字列配列として書き出すようになりました。
v3.30.1 2026-05-19
- GetPDFUADiagnostics に HEADING-LEVEL-SKIP:N チェックが含まれるようになり、文書順での見出しレベルのジャンプ (例: H1 の直後に H2 を挟まず H3 が続く) を検出します。チェックは構造要素ツリー全体に対して pre-order トラバーサルを行い、次の見出しレベルが前のレベルを 1 を超えて上回る出現を数えます。汎用 H 要素は H1 として扱われます。より高いレベルの見出しに戻ること (H3 → H1) はスキップとして数えません。WCAG 2.x 成功基準 1.3.1 と ISO 14289-1 §7.1 は見出しが gap なしにネストすることを要求します。
v3.30.0 2026-05-19
- タグ付き PDF と PDF/UA 文書で構造要素属性がサポートされるようになりました。3 つの新しい API 関数で、タグスタック上に構築中の構造要素に属性をアタッチできます:AddTagAttribute (汎用、任意の owner/name/value)、SetStructElemScope (Table owner 配下に /Scope 属性を設定する便利ラッパー、TH ヘッダーセル用 — ISO 32000-1 §14.8.5.7.2)、SetStructElemBBox (Layout owner 配下に /BBox 属性を設定する便利ラッパー、figure などの視覚配置要素用 — ISO 32000-1 §14.8.5.4)。文書保存時、属性は各構造要素の /A 属性辞書として書き出されます。同じ owner からの複数属性は 1 つの辞書にまとめられ、異なる owner からの属性は辞書の配列として書き出されます。3 つの関数すべてが Delphi ライブラリ、ActiveX、DLL インターフェースで利用可能。
v3.29.1 2026-05-19
- GetPDFUADiagnostics に 2 つの追加チェックが含まれるようになりました:文書内の Figure 構造要素が Alt テキスト値を欠いているか (FIGURE-NO-ALT:N として報告、ISO 14289-1 §7.5 と ISO 32000-1 §14.9.3 に従う)、EndTag が呼ばれずに構造要素がまだ開いたままか (STRUCT-UNCLOSED:N として報告)。figure チェックは構造要素ツリーを完全に再帰的に走査し、すべてのネスト深さの要素をカバーします。
v3.29.0 2026-05-19
- GetPDFUADiagnostics は新しい診断 API で、文書を PDF/UA-1 (ISO 14289-1) コンプライアンス潜在問題に対してチェックし、改行区切りの発見リストを返します。6 つのチェックが実行されます:MarkInfo/Marked が設定されているか (タグ付き PDF)、文書カタログに /Lang エントリがあるか、ViewerPreferences/DisplayDocTitle が true か、XMP メタデータに pdfuaid:part 識別子が含まれているか、Contents エントリの欠けている非除外注釈の数、AFRelationship エントリの欠けている埋め込みファイルの数。各発見は短いコード (例: LANG-MISSING、ANNOT-NO-CONTENTS:3) と人間可読の記述で識別されます。問題が見つからない場合は空文字列を返します。Delphi ライブラリ、ActiveX、DLL インターフェースで利用可能。
v3.28.5 2026-05-19
- PDF/UA-1 注釈アクセシビリティ改善:FileAttachment 注釈が Contents エントリも /T フィールドも持たないとき、注釈の埋め込みファイル仕様 (/FS /UF または /F) のファイル名がフォールバック アクセシブル記述として使用されるようになりました。これは注釈 Contents フォールバックチェーンを完成させます:/T → Link URI → Stamp name → FileAttachment ファイル名。スクリーンリーダーは沈黙の代わりに添付ファイルの名前を受け取り、最も一般的な注釈タイプに対する ISO 14289-1 §7.18.1 を満たします。
v3.28.4 2026-05-19
- PDF/UA-1 注釈アクセシビリティ改善:Stamp 注釈が Contents エントリ (または空のもの) と /T フィールドのどちらも持たないとき、注釈の /Name エントリのスタンプタイプ名がフォールバック アクセシブル記述として使用されるようになりました (例: "Approved"、"Draft"、"Confidential"、"Final")。これは v3.28.3 で導入された注釈 Contents フォールバックチェーンをスタンプ注釈に拡張します。レビューや承認に関わるワークフローで一般的で、明示的な Contents 値を欠くことが多いものです。
v3.28.3 2026-05-19
- PDF/UA-1 注釈アクセシビリティ改善:Link 注釈が Contents エントリ (または空のもの) と /T フィールドのどちらも持たないとき、注釈の URI アクションの URI がフォールバック アクセシブル記述として使用されるようになりました。これは SetPDFUAMode 処理中にのみ適用され、/URI アクションを持つ Link 注釈にのみ適用されます。スクリーンリーダーは最後の手段のラベルとして URL を受け取り、作者が人間可読の記述を提供せずにハイパーリンクを作成する一般的なケースで ISO 14289-1 §7.18.1 を満たします。
v3.28.2 2026-05-19
- SetEmbeddedFileAFRelationship は新しい API で、埋め込みファイルのファイル仕様辞書に AFRelationship 値を明示的に設定します。ISO 14289-1 (PDF/UA-1) §7.11 で要求されており、呼び出し元は 5 つの有効値 Source、Data、Alternative、Supplement、Unspecified から選んで、埋め込みファイルと文書内容のセマンティック関係を指定できます。SetPDFUAMode が有効なとき、AFRelationship キーのない埋め込みファイルは自動的に Unspecified を割り当てられます。保存前にそのデフォルトを上書きするにはこの関数を使ってください。Delphi ライブラリ、ActiveX、DLL インターフェースで利用可能。
v3.28.1 2026-05-19
- SetPDFUAMode が、XMP メタデータが文書固有のタイトルではなく汎用ライブラリ デフォルト タイトルを保持している文書で呼ばれたとき、文書の /Info Title エントリの値 (存在すれば) でタイトルが自動的に置き換えられるようになりました。これにより pdfuaid:part-1 XMP パケットがプレースホルダではなく実際の文書タイトルを反映することが保証され、PDF/UA-1 検証ツールの期待を満たします。
- XMP パーサ (LoadFromString) が文書ロード時に既存の XMP メタデータから dc:title 値を読み取るようになりました。すでに dc:title を持つ PDF をラウンドトリップすると、デフォルトのプレースホルダに戻ることなくそのタイトルが正しく保持されます。
v3.28.0 2026-05-19
- BeginArtifactEx(ArtifactType, ArtifactSubtype) は新しいタグ付き PDF API で、BeginArtifact を拡張し、1 回の呼び出しで artifact の /Type と Pagination /Subtype の両方を表現します。両パラメータが非空のとき、書き出される演算子は /Artifact << /Type /T /Subtype /S >> BMC となり、ISO 32000-1 §14.8.2.2.1 に従ってヘッダーやフッターなど完全に指定された Pagination artifact を有効にします。1 つのパラメータのみが非空の場合は、対応する単一キー形式が使用されます。DLL エントリポイント DLBeginArtifactEx と DLBeginArtifactExA もエクスポートされます。
v3.27.2 2026-05-19
- BeginArtifact が artifact タイプと pagination サブタイプを正しく区別するようになりました。引数が Pagination、Layout、Page (ISO 32000-1 §14.8.2.2.1 Table 330 による artifact タイプ) のとき、marked-content 演算子は /Subtype ではなく /Type を書き出します。Header、Footer、Watermark などのその他の値は引き続き /Subtype として書き出されます。これは pagination artifact をマークしようとした呼び出し元が /Subtype /Pagination と書かれていた以前の誤った出力を修正します。
v3.27.1 2026-05-19
- PDF/UA モードが有効で文書に埋め込みファイルが含まれているとき、AFRelationship エントリのないファイル仕様辞書は保存時に自動的にそれを取得するようになりました。書き込まれる値は /Unspecified で、ISO 14289-1 §7.11 のすべての埋め込みファイルが AFRelationship キーを持つ要件を満たします。これは EmbedFile で追加されたファイルとロード済み文書に既に存在する埋め込みファイルの両方に適用されます。
v3.27.0 2026-05-19
- AddRoleMap(CustomType, StandardType) は新しいタグ付き PDF API で、カスタム (非標準) 構造要素タイプ名から標準 PDF 構造タイプへのマッピングを登録します。保存時にマッピングは構造ツリールートの RoleMap 辞書に書き出され、アプリケーション固有のタグ名を使う文書に対する ISO 14289-1 §7.1 の要件を満たします。複数のマッピングを登録できます。重複キーは最後の呼び出しで上書きされます。DLL エントリポイント DLAddRoleMap と DLAddRoleMapA もエクスポートされます。
v3.26.0 2026-05-19
- BeginTagEx(TagType, AltText, ActualText, Lang) は新しいタグ付き PDF API で、BeginTag を拡張して明示的な自然言語属性を追加します。Lang が非空のとき構造要素の /Lang 属性に書き込まれ、ISO 14289-1 §7.2 で要求される多言語文書のための要素ごとの言語注釈を有効にします。空の Lang 文字列を渡すと BeginTag と同じ動作になります。DLL エントリポイント DLBeginTagEx と DLBeginTagExA もエクスポートされます。
v3.25.1 2026-05-19
- デフォルトの Windows コードページ (WinAnsiEncoding) でロードされた非サブセット化 TrueType フォントが ToUnicode CMap ストリームを受け取るようになり、これらのフォントで信頼性の高い Unicode テキスト抽出とコピー/ペーストが可能になりました。以前は明示的なコードページ オーバーライドや Differences 配列が存在するときのみ ToUnicode ストリームが書き出されていました。一般的なデフォルト エンコーディング パスではそれが欠けていました。
- 同じ修正は、明示的な非デフォルト コードページでロードされたが Differences 配列のない TrueType フォント、および packaged-font 形式でロードされたフォントにも適用されます。
v3.25.0 2026-05-19
- PDF/UA モードが有効なとき、非空の Contents エントリを持たない非除外注釈 (Widget、PrinterMark、TrapNet 以外のすべてのタイプ) は保存時に自動的にそれを受け取るようになりました。注釈の /T (タイトル / 作者) 値がフォールバックとして使われ、タイトルを持つが明示的なアクセシブル記述を持たない注釈に対する ISO 14289-1 §7.18.1 を満たします。
v3.24.0 2026-05-19
- PDF/UA モードが有効なとき、TU (ツールチップ / 代替記述) エントリを持たないインタラクティブ フォーム フィールドは保存時に自動的にそれを受け取るようになりました。フィールドの部分名 (/T エントリ) がフォールバック値として使われ、スクリーンリーダーがすべてのフィールドを識別できることを保証します。プッシュボタンは ISO 14289-1 §7.18.4 に従ってこの要件から正しく除外されます。
v3.23.1 2026-05-19
- GetInformation(200) は選択された文書で PDF/UA-1 モードが有効なとき '1' を返し、呼び出し元が実行時にコンフォーマンス モード状態をクエリできるようにします。
- GetInformation(201) は PDF/A-1a で '1'、PDF/A-1b で '2' を返し、PDF/A モードがオフのときは空文字列を返します。
- GetInformation(311) と GetInformation(312) は、直近のバージョン ロック競合からのバージョン要件文字列と機能名を正しく返すようになりました (以前 v3.20.3 の項目で告知されたものの実装されていませんでした)。
- GetInformation(313) は保存ターゲットが現在ロックされている PDF バージョン文字列を返し、自由にバージョニングする文書には空文字列を返します。
v3.23.0 2026-05-19
- SetMarkInfo(Marked) が公開 API になりました。SetPDFUAMode で実行される完全な PDF/UA-1 セットアップから独立して MarkInfo.Marked フラグを設定できます。Marked が 1 のとき、ISO 14289-1 §7.18.6 で要求されるように MarkInfo.Suspects も false に設定されます。
- PDF/UA モードが有効なとき、すべてのページは保存時に自動的に /Tabs /S エントリを受け取り、ISO 14289-1 §7.18.4 の構造ベース タブ順序要件を満たします。
- SetPDFUAMode、SetDocumentLanguage、SetMarkInfo、BeginTag、EndTag、BeginArtifact、EndArtifact 用の HTML リファレンス ドキュメントを追加し、完全な構文表と使用例を含みます。
v3.22.0 2026-05-19
- BeginTag(TagType, AltText, ActualText) は現在のコンテンツストリームでタグ付き PDF 構造要素を開き、自動割り当てされた MCID を持つ BDC 演算子を書き出して、要素を文書構造ツリーに登録します。TagType は任意の PDF 標準構造タイプ (P、H1、Figure、Table など)。AltText と ActualText はオプションのアクセシビリティ文字列で、PDF テキスト文字列 (UTF-16BE) としてエンコードされます。
- EndTag は最後に開かれた構造要素を閉じ、対応する EMC 演算子をコンテンツストリームに書き出します。
- BeginArtifact(SubType) はコンテンツ領域を PDF artifact (pagination artifact、背景など) としてマークし、BMC 演算子を書き出します。SubType はオプションです。提供されたとき /Artifact << /Subtype /SubType >> として書き出されます。
- EndArtifact は EMC 演算子で artifact 領域を閉じます。
- 保存時に、タグ付き構造要素が登録されていれば、ライブラリは自動的に完全な StructTreeRoot を構築し、影響を受けるページに StructParents キーを割り当て、ParentTree 番号ツリーを書き出して、ISO 32000-1 §14.7 のタグ付き PDF 要件を満たします。
- 標準 Type 1 フォント (Helvetica、Times、Courier ファミリー、Symbol) と WinAnsi エンコーディングを持つ埋め込み Type 1 フォントが ToUnicode CMap ストリームを受け取るようになり、これらのフォントタイプで信頼性の高い Unicode テキスト抽出とコピー/ペーストが可能になりました。
v3.21.0 2026-05-19
- SetPDFUAMode(Language) は PDF/UA-1 (ISO 14289-1) コンフォーマンス モードを有効にします:文書を自動的に PDF 1.7 まで bump し、MarkInfo.Marked と MarkInfo.Suspects を書き出し、ViewerPreferences で DisplayDocTitle を有効にし、Language が非空のとき Catalog.Lang を設定し、ISO 14289-1 セクション 6.7.11 で要求される pdfuaid:part = 1 XMP 名前空間エントリを書き出します。
- SetDocumentLanguage(Language) は Catalog /Lang エントリを直接書き出し、PDF/UA モードから独立して文書言語を宣言できるようにします。
- MarkInfo.Marked が true に設定されるたびに MarkInfo.Suspects は false に設定され、ISO 14289-1 のタグ付き PDF 構造要件 (セクション 7.18.6) を満たします。
- Encrypt は文書が PDF/UA モードのとき CanCopyAccess (アクセシビリティのための内容コピー) 権限フラグを強制するようになりました。ISO 14289-1 セクション 7.17 で要求されています。
- Choice (ドロップダウン) フォームフィールドは意味のないハードコードされたツールチップ値を持たなくなりました。TU は未設定のままにされ、呼び出し元がフォーム フィールド プロパティ API を介して意味のあるラベルを割り当てられます。
v3.20.3 2026-05-19
- Encrypt と AddSWFAnnotationFromFile は、保存バージョンが選択された暗号化強度または注釈タイプで要求される最低バージョン未満にロックされているとき、保存時にのみ失敗するのではなく LastErrorCode 602 で即座に 0 を返すようになりました。
- GetInformation(311) と GetInformation(312) は、ロックされたバージョンが AES-256 や RichMedia 注釈などの拡張レベル機能をブロックするとき、書き込み時に競合するバージョン要件を反映するようになりました。
v3.20.2 2026-05-19
- AddU3DAnnotationFromFile は、3D 注釈が低バージョン文書に追加されるとき、文書バージョンを自動的に PDF 1.6 まで bump するようになりました。他のすべての PDF 1.6+ API エントリ ポイントのバージョン自動 bump 動作と整合します。
v3.20.1 2026-05-17
- PDF 1.2 保存ターゲットは厳格な PDF 1.2 契約として強制されるようになりました。PDF 1.2 ターゲットで PDF 1.3+ オブジェクト (ページ TrimBox データなど) を保存しようとすると、混合バージョンファイルを出力する代わりに出力書き込み前に失敗します。
- PDF 1.7 Adobe 拡張レベル コンプライアンスが保存プリフライトの一部になりました。AESV3、AES-256、RichMedia、Projection、地理空間辞書、ETSI 署名サブフィルタが必要な ExtensionLevel に対してチェックされます。
- AES-256 暗号化、RichMedia 注釈、地理空間辞書、ETSI 署名サブフィルタは、PDFlib が文書を PDF 1.7 拡張コンテンツまで自動 bump するとき、対応する Adobe Extensions エントリを宣言するようになりました。
- Append 保存はフル保存と同じバージョン コンプライアンス ゲートを使うようになりました。
- バンドルされたオプションの PDFium ランタイム DLL を Win32 と Win64 でリフレッシュしました。GDI+ がデフォルト レンダラーのままで、PDFium は SetPDFiumFileName と SelectRenderer(3) を介してオプトインのままです。
- 検証:Delphi Win32 と Win64 の DUnitX スイートはそれぞれ 207/207 をパスし、C++Builder Win64x の GoogleTest は 61 テストをパスし、2 つの既存サンプル依存テストはスキップされました。
v3.20.0 2026-05-17
- さらに 8 つの PDFlib writer エントリ ポイントが Phase 3 EnsureMinVersion 経由でルーティングされ、emit される機能で要求される最低バージョンまで文書バージョンを自動 bump するようになりました:SetDocumentMetadata (PDF 1.4 - /Metadata XMP ストリーム)、SetPDFAMode(1 または 2) (PDF 1.4 - /MarkInfo + /OutputIntents)、PageJavaScriptAction (PDF 1.5 - Page /AA + JavaScript)、DocJavaScriptAction (PDF 1.4 - Catalog /AA + JavaScript)、SetTabOrderMode (PDF 1.5 - Page /Tabs)、NewOptionalContentGroup (PDF 1.5 - /Type /OCG)、SetNeedAppearances (PDF 1.5 - AcroForm /NeedAppearances)、NewFormField(ftSignature) (PDF 1.5 - AcroForm /SigFlags AppendOnly)。
- v3.15.0 セット (SetTransparency、SetPageUserUnit、Encrypt、SetPageLayout) と v3.17.0 セット (8 つの JavaScript / 埋め込みファイル / XFA / SWF エントリ) と合わせて、PDFlib は 21 個の writer エントリ ポイントで FVersion を自動 bump するようになりました。
- NewOptionalContentGroup は以前 FVersion を直接 bump していましたが、現在は EnsureMinVersion を通り、LockSaveVersion が尊重され bump が AutoBumpedFeatures に記録されます。
v3.19.0 2026-05-17
- 保存時とロード時の PDF バージョン コンプライアンスが、以前は延期されていた 4 つの機能も認識するようになりました:Btn /Ff ビット 15 NoToggleToOff (ラジオボタン専用) -> PDF 1.4、DeviceN /Subtype /NChannel (色空間の改良) -> PDF 1.6、FontFile3 /Subtype /OpenType (フォント プログラム タイプ) -> PDF 1.6、Sig /SubFilter ETSI.CAdES.detached または ETSI.RFC3161 -> PDF 1.7。
- NChannel ルールは DeviceN 色空間配列形式 [/DeviceN names alternateSpace tintTransform attributes] にマッチし、インデックス 4 の attributes 辞書が /Subtype /NChannel を持つときに発動します。
- FontFile3 OpenType ルールは 'FontFile3' という親キーを経由してストリームに到達したときのみ発動し、たまたま /Subtype /OpenType を持つ無関係なストリームはフラグされません。
- PDFFeatureRules テーブルは 103 ルール (99 + 4 新規) を保持するようになりました。
v3.18.6 2026-05-17
- 保存時とロード時の PDF バージョン コンプライアンスが、コンテナ タイプ認識付きで /AA (追加アクション) を認識するようになりました:Catalog /AA (文書レベル トリガー) -> PDF 1.4、Annot /AA (注釈トリガー) -> PDF 1.4、Page /AA (ページ トリガー) -> PDF 1.5。
- フォームフィールド /AA (PDF 1.2) は既存の PDF 1.3 保存契約でカバーされ続けます。新しいルールは不要です。
- PDFFeatureRules テーブルは 99 ルール (96 + 3 新規) を保持するようになりました。
v3.18.5 2026-05-17
- 保存時とロード時の PDF バージョン コンプライアンスが Page /Tabs を PDF 1.5 機能として正しく分類するようになりました。以前は PDF 1.4 として誤分類されていました。PDF 1.4 仕様変更ドキュメント (Adobe TN #5409) は /Tabs を列挙せず、PDF 1.5 Table 8.10 は "Tabs (Optional; PDF 1.5)" を導入します。
- 新ルール:AcroForm /NeedAppearances が PDF 1.5 Table 218 に従って PDF 1.5 機能として認識されます。
- PDFFeatureRules テーブルは 96 ルール (95 + 1 新規) を保持するようになりました。
v3.18.4 2026-05-13
- PDFlibZLib は常にバンドルされた静的 zlib-ng obj バックエンドを通常のライブラリ ビルドで使い、残っていた System.ZLib フォールバック パスを削除しました。
- zlib-ng 回帰カバレッジに境界サイズ ペイロード、PNG ライク スキャンライン データ、stored マルチブロック ストリーム、既知の zlib ストリームが Delphi と C++Builder テスト ランナーを通して含まれるようになりました。
- 検証:Delphi Win32 と Win64 の DUnitX スイートはそれぞれ 194/194 をパスし、C++Builder Win64x の GoogleTest は 58 テストをパスし、2 つの既存サンプル依存テストはスキップされました。
v3.18.3 2026-05-12
- PDF またはテキスト出力を生成する Delphi と C++Builder のデモは、保存成功後に生成されたドキュメントを自動的に開くようになりました。
- インストーラ パッケージングがビルド成果物をデモ フォルダから除外し、C++Builder サンプルと DLL、ActiveX/OCX モジュールをオプトイン コンポーネントにするようになりました。対応するファイルはコンポーネントが選択されたときのみインストールされます。
v3.18.2 2026-05-12
- Delphi と C++Builder の EditFormField デモが、フィールド値を更新する前に /NeedAppearances をクリアするようになり、編集された各テキスト フィールドが保存された PDF でリフレッシュされた normal appearance ストリームを取得します。
- これにより保存された /AP ストリームと保存された /V 値が同期し、フィールドにフォーカスを当てたときに静的フィールド外観から欠けていたテキストが表示されるビューア依存の差異を回避します。
v3.18.1 2026-05-10
- 保存時とロード時の PDF バージョン コンプライアンスがビット レベル フォーム フィールド /Ff フラグと AcroForm /SigFlags AppendOnly ビットも認識するようになりました:/Ff ビット 21 (FileSelect, mask 1048576) -> PDF 1.4、/Ff ビット 22 (MultiSelect, mask 2097152) -> PDF 1.4、/Ff ビット 23 (DoNotSpellCheck, mask 4194304) -> PDF 1.4、/Ff ビット 24 (DoNotScroll, mask 8388608) -> PDF 1.4、/Ff ビット 25 (Comb, mask 16777216) -> PDF 1.5、/Ff ビット 26 (RichText / RadiosInUnison, 33554432) -> PDF 1.5、/Ff ビット 27 (CommitOnSelChange, mask 67108864) -> PDF 1.5、/SigFlags ビット 2 (AppendOnly, mask 2) -> PDF 1.5。
- /Parent 継承は追跡されません:明示的に /Ff または /SigFlags を持つ辞書のみがルールをトリガーします。
- PDFFeatureRules テーブルは 95 ルール (87 + 8 新規ビット レベル) を保持するようになりました。
- 検証:Delphi Win32 と Win64 の DUnitX スイートはそれぞれ 191/191 をパスし、C++Builder Win64x の GoogleTest は 57/57 をパスしました。
v3.18.0 2026-05-10
- 保存時とロード時の PDF バージョン コンプライアンスが、さらに 9 つのサブキーとビット レベル機能を認識するようになりました:ビット レベル注釈フラグ (/F mask):Locked (128) -> PDF 1.4、ToggleNoView (256) -> PDF 1.5、LockedContents (512) -> PDF 1.7。区別的なカタログとページのサブキー:/BoxColorInfo (ページ) -> PDF 1.4、/Permissions、/Legal、/PresSteps -> PDF 1.5、/VP (ページ geospatial viewport) -> PDF 1.6、/Collection (カタログ portable collection) -> PDF 1.7。
- PDFFeatureRules テーブルは 87 ルール (78 章レベル + 9 サブキー / ビット レベル) を保持するようになりました。
- 検証:Delphi Win32 と Win64 の DUnitX スイートはそれぞれ 189/189 をパスし、C++Builder Win64x の GoogleTest は 57/57 をパスしました。
v3.17.0 2026-05-10
- さらに 8 つの PDFlib writer エントリ ポイントが Phase 3 EnsureMinVersion 経由でルーティングされ、emit される機能で要求される最低バージョンまで文書バージョンを自動 bump するようになりました:AddLinkToJavaScript、SetOpenActionJavaScript、AddGlobalJavaScript、FormFieldJavaScriptAction (PDF 1.3 - JavaScript アクション)、AddEmbeddedFile、AddFileAttachment (PDF 1.3 - ファイル添付)、SetXFAFromString (PDF 1.5 - XFA フォーム)、AddSWFAnnotationFromFile (PDF 1.7 - RichMedia 注釈)。
- v3.15.0 セット (SetTransparency、SetPageUserUnit、Encrypt、SetPageLayout) と合わせて、PDFlib は 13 個の高バージョン writer エントリ ポイントをエンドツーエンドでカバーするようになりました。
- 検証:Delphi Win32 と Win64 の DUnitX スイートはそれぞれ 187/187 をパスし、C++Builder Win64x の GoogleTest は 57/57 をパスしました。
v3.16.3 2026-05-10
- 新しい PDFlib API:LockSaveVersion(Version) は文書を Version にピン留めし、Phase 3 writer 側 EnsureMinVersion がそれを超えて自動 bump するのを止めます。UnlockSaveVersion はロックをクリアします。
- 保存時ゲートは変更されません:ロックされたバージョンを超える writer 出力機能は、ヘッダを silently に bump する代わりに保存時に LastErrorCode 602 を生成します。
- 検証:Delphi Win32 と Win64 の DUnitX スイートはそれぞれ 184/184 をパスし、C++Builder Win64x の GoogleTest は 57/57 をパスしました。
v3.16.2 2026-05-10
- ロード済み PDF は GetInformation(103) ("ContributorFeatures") を通じて、ロード時機能検出の contributor のみのビューを公開するようになりました。リストには最低必要バージョンが HeaderVersion (キー 100) より厳密に大きい機能のみが含まれ、"なぜ有効バージョンがファイル ヘッダーより高いのか?" という質問に直接答えます。
- GetInformation(101) ("DetectedFeatures") は変更されず、貢献に関係なくマッチしたすべての機能を引き続き列挙します。
- 検証:Delphi Win32 と Win64 の DUnitX スイートはそれぞれ 181/181 をパスし、C++Builder Win64x の GoogleTest は 57/57 をパスしました。
v3.16.1 2026-05-10
- ローダー側検出テストカバレッジを 6 つの追加合成フィクスチャで拡張:ページ内透明度 ExtGState (バージョン bump なし)、Catalog /MarkInfo (PDF 1.3 -> PDF 1.4)、/OCProperties + OCG コンテンツ (PDF 1.4 -> PDF 1.5)、/Type /3DStream (PDF 1.5 -> PDF 1.6)、複数機能組み合わせフィクスチャ、スナップショット安定性チェック。
- 検証:Delphi Win32 と Win64 の DUnitX スイートはそれぞれ 179/179 をパスし、C++Builder Win64x の GoogleTest は 57/57 をパスしました。
v3.16.0 2026-05-10
- ロード済み PDF 文書がコンテンツ駆動のバージョン検出パスを通過するようになりました:すべての間接オブジェクトが保存時ゲートで使われる feature-to-minimum-version テーブルを通じて走査され、コンテンツが実際により高いバージョンを要求するときに FVersion がリテラル %PDF-X.Y ヘッダー値を超えて bump されます。例として /UserUnit ページ エントリは、ファイル ヘッダーが PDF 1.4 と書かれていても、有効バージョンを PDF 1.6 まで bump します。
- 新しい GetInformation キー:100 は HeaderVersion (リテラル %PDF-X.Y) を返し、101 は DetectedFeatures (ロード時にマッチした機能、CRLF 区切り) を返し、102 は AutoBumpedFeatures (writer 側 EnsureMinVersion をトリガーした機能、CRLF 区切り) を返します。
- 保存時ゲートは影響を受けません:ロード時に有効バージョンが bump され、その後 SetInformation(0, ...) で明示的にダウングレードされた文書は、保存時に依然として LastErrorCode 602 を生成します。
- 検証:Delphi Win32 と Win64 の DUnitX スイートはそれぞれ 173/173 をパスし、C++Builder Win64x の GoogleTest は 57/57 をパスしました。
v3.15.0 2026-05-10
- 特定の最低 PDF バージョンを要求する機能を生成する writer エントリ ポイントが、文書の PDF バージョンを自動的に bump するようになりました。PDF 1.3 とマークされた文書で SetTransparency を呼び出すと、保存を LastErrorCode 602 で失敗させる代わりに、ヘッダーを PDF 1.4 に昇格させます。
- 同じ自動 bump が SetPageUserUnit (>=1.6)、Encrypt + Strength 1/2/3/4 (それぞれ >=1.4/1.6/1.7/1.7)、SetPageLayout の 2 ページ バリアント (>=1.5) にも組み込まれました。
- 3.14.x との動作の変更:以前 v3.12.6 の "保存ターゲットが writer 出力機能を拒否する" ゲートに依存していたアプリケーションは、bump されたバージョンで成功するようになりました。すでに高バージョン機能を含むロード済み PDF は依然として既存の保存時ゲートを通り、タグ付き PDF をロードして PDF 1.3 を選択すると依然として LastErrorCode 602 で失敗します。
- 検証:Delphi Win32 と Win64 の DUnitX スイートはそれぞれ 170/170 をパスし、C++Builder Win64x の GoogleTest は 57/57 をパスしました。
v3.14.3 2026-05-10
- 保存時 PDF バージョン コンプライアンスが残りの PDF 1.6 3D 辞書タイプ (/Type /3DStream /3DRef /3DBackground /3DRenderMode /3DLightingScheme /3DCrossSection /3DNode) と PDF 1.7 の Redact、RichMedia、Projection 注釈サブタイプおよび /Type /Requirement と /ReqHandler コンパニオン辞書も認識するようになりました。
- 検証:Delphi Win32 と Win64 の DUnitX スイートはそれぞれ 168/168 をパスし、C++Builder Win64x の GoogleTest は 57/57 をパスしました。
v3.14.2 2026-05-10
- 保存時 PDF バージョン コンプライアンスが PDF 1.5 機能も認識するようになりました:/XFA フォーム、/AlternatePresentations、/Renditions 名前ツリー、/Type /Rendition /MediaCriteria /MediaPermissions /MediaPlayers マルチメディア辞書、Screen 注釈サブタイプ。
- PDF 1.4 として保存すると、これらの機能を持つ文書を LastErrorCode 602 で拒否するようになりました。
- 検証:Delphi Win32 と Win64 の DUnitX スイートはそれぞれ 166/166 をパスし、C++Builder Win64x の GoogleTest は 57/57 をパスしました。
v3.14.1 2026-05-10
- 保存時 PDF バージョン コンプライアンスが PDF 1.4 機能も認識するようになりました:タグ付き PDF /StructTreeRoot /MarkInfo および StructElem 辞書、文書 /Lang とページ /Tabs エントリ、/OutputIntents と /OutputIntent 辞書、/UR3 使用権利署名、および PDF 1.4 の注釈サブタイプ Polygon、PolyLine、Caret、Ink、Popup、Watermark。
- PDF 1.3 として保存すると、これらの機能を持つ文書を LastErrorCode 602 で拒否するようになりました。
- 検証:Delphi Win32 と Win64 の DUnitX スイートはそれぞれ 165/165 をパスし、C++Builder Win64x の GoogleTest は 57/57 をパスしました。
v3.14.0 2026-05-10
- 保存時 PDF バージョン コンプライアンスがスムース シェーディング、function オブジェクト、ICCBased と DeviceN 色空間、/TrimBox /BleedBox /ArtBox ページ エントリ、/ToUnicode CMap、ファイル添付および /Sound と /Movie 注釈、/Type /Filespec と /Type /EmbeddedFile 辞書、/Group /EF /Alternates /Mask キー、JavaScript アクションなど、PDF 1.3 機能も認識するようになりました。
- PDF 1.2 呼び出し元は現在 PDF 1.3 契約で保存します:リテラル %PDF-1.2 ヘッダーは保持されますが、ゲートは PDF 1.3 機能を受け入れます。PDF 1.4 以降の機能は依然として LastErrorCode 602 で拒否されます。
- 検証:Delphi Win32 と Win64 の DUnitX スイートはそれぞれ 162/162 をパスし、C++Builder Win64x の GoogleTest は 57/57 をパスしました。
v3.13.0 2026-05-10
- 高バージョン機能を保存時に拒否する PDF バージョン コンプライアンス ゲートを専用モジュールにリファクタリングし、文書コアを乱すことなくルール セットを拡張できるようにしました。
- v3.12.7 と比較してユーザー可視の動作変更なし:同じ範囲外バージョン機能が依然として LastErrorCode 602 で拒否されます。
- 検証:Delphi Win32 と Win64 の DUnitX スイートはそれぞれ 155/155 をパスし、C++Builder Win64x の GoogleTest は 57/57 をパスしました。
v3.12.7 2026-05-09
- Delphi DUnitX と C++Builder GoogleTest スイートで PdfToImage 直接アクセス レンダリング ワークフローの自動テスト カバレッジを拡張しました。
- Delphi VCL GUI テスト ランナーが Syntax と XRef フィクスチャを登録し、コンソール ランナーのカバレッジと一致するようになりました。
- 検証:Delphi Win32 と Win64 の DUnitX スイートはそれぞれ 147/147 をパスし、C++Builder Win64x の GoogleTest は 57/57 をパスしました。
v3.12.6 2026-05-09
- PDF 1.3、1.4、1.5、1.6、または 1.7 として保存すると、選択されたバージョンがフル保存出力契約として強制されるようになりました。
- フル保存はカタログ /Version オーバーライドを削除し、低ターゲット用のサポートされていないカタログ拡張とメタデータ エントリを削除し、PDF 1.3 として保存するときに PDF 1.4 XMP メタデータ ストリームを抑制します。
- SaveToFile、SaveToString、SaveToStream は、選択された PDF ターゲット バージョンが透明度、optional content、JPX、UserUnit、3D、AES crypt-filter 機能など文書に依然として存在する機能より低いとき、LastErrorCode 602 で失敗するようになりました。
v3.12.5 2026-05-09
- PDF 1.7 リテラル文字列解析を改善し、未知のエスケープ シーケンスが標準で要求されるようにバックスラッシュを無視するようにしました。
- リテラル文字列の 8 進エスケープが 8 進数字のみを消費し、続く非 8 進数字を通常の文字列データとして保存するようになりました。
- 未知のリテラル文字列エスケープと混合 8 進/非 8 進エスケープ シーケンスの回帰カバレッジを追加しました。
- 検証:Delphi Win32 と Win64 の DUnitX スイートはそれぞれ 141/141 をパスしました。
v3.12.4 2026-05-09
- PDF 1.7 字句解析を改善し、name オブジェクトが右中括弧区切り文字で正しく停止するようになりました。
- SmartAccess の xref ストリーム圧縮オブジェクト エントリのロードで、オブジェクト ストリーム番号が PDF バイト長より大きい場合を修正しました。
- 右中括弧 name 区切り文字と疎な圧縮オブジェクト xref ストリーム エントリの回帰カバレッジを追加しました。
- 検証:Delphi Win32 と Win64 の DUnitX スイートはそれぞれ 139/139 をパスしました。
v3.12.3 2026-05-08
- StrF、StmF、EFF、Identity、None、または StdCF スタイルの名前付き crypt フィルタを使う標準セキュリティ ハンドラ ファイルの PDF 1.7 暗号化文書の互換性を改善しました。
- メタデータ ストリームが復号化、暗号化、コピー/保存ワークフロー中に EncryptMetadata=false を尊重するようになり、通常のストリームのように処理されなくなりました。
- 埋め込みファイル ストリームが /Type /EmbeddedFile を持ち、暗号化文書のロードまたは保存時に埋め込みファイル crypt フィルタ決定パスを使うようになりました。
- 外部埋め込みファイル ストリームが FFilter を Filter に昇格させるときに FDecodeParms も DecodeParms に昇格させ、ストリームの decode パラメータを保持するようになりました。
- 新しい AES 暗号化 PDF が crypt フィルタの Length 値をビット長として書き出すようになり、PDF 1.7 crypt フィルタ辞書契約と一致するようになりました。
- XRef ストリームの Prev/XRefStm 値と大きな数値オフセットがパーサと SmartAccess パスを通じて 64 ビット精度を保持するようになりました。
- 検証:Delphi Win32 と Win64 の DUnitX スイートはそれぞれ 137/137 をパスしました。
v3.12.2 2026-05-08
- PDF 1.7 ストリーム デコード互換性を改善しました。汎用ストリーム デコードが /DP を DecodeParms エイリアスとして尊重し、間接 decode-parameter 配列エントリを解決し、/AHx と /LZW 標準フィルタ略語を受け入れるようになりました。
- 大ファイル PDF 出力が xref、startxref、linearization、デジタル署名 ByteRange オフセットを 64 ビット フォーマット パスを通じて書き出すようになり、32 ビット整数ヘルパーを通じてこれらの値を狭めなくなりました。
- ロード済み文書がカタログ /Version エントリをファイル ヘッダー バージョンより新しいときに有効 PDF バージョンとして扱うようになりました。
- 書き換えられた xref-stream trailer が PDFlibPas によって古典的 trailer 辞書として保存されるとき、ストリーム専用の DecodeParms キーを保持しなくなりました。
- 検証:Delphi Win32 と Win64 の DUnitX スイートはそれぞれ 134/134 をパスしました。
v3.12.1 2026-05-06
- 生成された PDF が最初のページがビューアー ウィンドウの利用可能な高さに合わせられた状態で開くようになり、最初のページ全体がウィンドウに合う最大のズームで上から下まで表示されます。文書にカスタム OpenAction (SetOpenActionDestination、SetOpenActionMenu、SetOpenActionJavaScript) を設定するとこのデフォルトをオーバーライドできます。
v3.12.0 2026-05-06
- Windows 静的バックエンドに libjpeg-turbo NASM SIMD オブジェクトが Win32 と Win64 用に含まれるようになり、Win64x zlib-ng セット用の zlib-ng x86 SIMD ディスパッチ オブジェクトも追加されました。
- zlib-ng リビルド スクリプトを再設計し、Win64x bcc64x と診断用 MSVC ビルドが汎用、SSE2、SSSE3、SSE4.1/SSE4.2、PCLMULQDQ、AVX2 のソース ファイルをファイルごとの機能フラグでコンパイルし、1 つのグローバル コンパイラ スイッチに依存しないようにしました。
- 静的 C ライブラリ用に 32 バイト アラインの malloc/calloc/realloc/free CRT スタブを追加し、TPDFJPEGImage.Compress を修正して jpeg_mem_dest バッファを割り当てたのと同じ C free パスで解放するようにしました。
- 公開検証ノートを拡張して、本リリースの厳格な自動カバレッジ:ライブラリ ビルド、圧縮ラウンドトリップ、HelloWorld /FlateDecode 出力、JPEG レンダリング、画像ワークフロー、フォント、フォーム、セキュリティ、署名、印刷、C++Builder デモ派生ワークフローを明示するようにしました。
v3.11.0 2026-05-05
- Windows Flate 圧縮と解凍を zlib-compatible モードの zlib-ng に切り替えました。Win32、Delphi Win64、C++Builder Win64x が Lib\thirdparty\Win32、Lib\thirdparty\Win64、Lib\thirdparty\Win64x からの ABI 一致 zlib-ng 静的オブジェクト セットをリンクするようになりました。
- Win64 パスは Delphi の System.ZLib ユニットを経由しなくなり、PDF ストリーム圧縮/解凍は 32 ビット ビルドと同様に zlib-ng バックエンドの恩恵を受けられるようになりました。
- Win64 ビルド用に小さな zlib-ng ブリッジ オブジェクトを追加し、Pascal コードが安定した zlib 互換エントリ ポイントを保持しつつ、Delphi と C++Builder がそれぞれのリンカ互換オブジェクト セットを消費できるようにしました。
- すべての C++Builder デモ プロジェクトを PDFLIB_CPPBUILDER を定義するように更新し、GoogleTest ランナーと一致させ、Win64x デモが Delphi Win64 の zlib-ng オブジェクトをリンクするのを防ぎました。
v3.10.3 2026-05-01
- C++Builder GoogleTest スイートを Demo\C++Builder 配下のすべてのデモをカバーするように拡張しました。7 フィクスチャの phase-1 レイアウトが 15 フィクスチャ / 52 GoogleTest ケースに成長し、すべて Win64x でパスしました。新たにカバーされたデモ:AddFormattedTitle、AddTextImage、AddTrueTypeSubsettedFont、AddWebLink、CanvasText、CaptureToNewSize、CopyPageRanges、CreateWithImage、CreateWithImageToStream、DoInTheStream、DrawWrappedText、EditFormField、EmbeddedFonts、ExtractAnnotAttach、ExtractEmbeddedFonts、ExtractImage、ImageToPdf、ImportEMF、MultiFunction (renderer 切り替え)、PageOperations、PdfDecrypt、PdfPermission、PrintPDF、TextMeasure、TextPaging。
v3.10.2 2026-05-01
- Tests\C++Builder の下に C++Builder GoogleTest ランナーを追加し、C++Builder デモが使用するのと同じ {$JPHNE} 生成 HPP ヘッダを通じて Lib\PDFlibrary.pas を駆動します。最初のフェーズで 7 つのコア Delphi シナリオ (HelloWorld、DrawShapes、CreateTable、PdfEncrypt、ExtractText、PdfSigning、PdfToImage レンダリング) を 17 GoogleTest ケースとしてミラーし、すべて Win64x でパスしました。
- Delphi DUnitX スイートを Tests.Print で拡張し、PrintPDF と ShowPrinterBins デモをカバー (デフォルト プリンタ列挙、カスタム プリンタ セットアップ、印刷オプション、ファイルへのリダイレクト印刷ジョブ)、Tests.Render に MultiFunction デモの同じソース PDF 上の GDI+ / PDFium / Cairo エンジン選択を行う renderer 切り替えテストを追加しました。
v3.10.1 2026-05-01
- SetPageSize に 57 個の名前付きページサイズを追加し、同じ正規ページサイズ名をここでも使用できるようにしました: SIZE8X11, QUADA0, DOUBA0, B0PLUS, ENVB4/B5/C6/DL/MONARCH, ENV9/10/11, ANSIA/B/C/D/E, ARCHA/B/C/D/E1/E, SHIROKU, G1K, USBC/EUBC/ASBC, ID1/ID2/ID3, ONEINCH/TWOINCH/L2INCH/USVISA, P2R..P24R / S8R / P4D photo prints, plus the Chinese / Taiwanese octavo and sextodecimo sheet formats LARGE/STANDARD/CROWN/ROC 8K and the matching 16K halves.
v3.10.0 2026-04-30
- Demo 配下のすべての Delphi サンプル用にネイティブ C++Builder バージョンを追加しました。PDF 作成、ページ操作、フォント、画像、セキュリティ、署名、レンダリング、印刷のデモが、Delphi 側のラッパーなしで C++Builder からビルドして実行できるようになりました。
- 各新規デモは Demo\C++Builder\<Name>\ にあり、Lib\PDFlibrary.pas を直接消費するコンソール プロジェクトで、実行に必要な入力ファイルを同梱しています。
- 各 Delphi デモ フォルダに簡潔な英語の Readme.txt を追加し、デモが何を示すか、フォーカスする API、実行方法を記述しました。Demo\Delphi\index.html の HTML 概要がトピックでグループ化してすべてのデモにリンクします。
- 各 C++Builder デモに同じ Readme.txt をミラーし、Run セクションをコンソール ワークフロー用に書き直しました (Open/SaveDialogs の代わりに argv 引数)。対応する Demo\C++Builder\index.html が同じトピック グループですべての C++Builder デモを列挙します。
- ImportEMF デモのメモリ リークを修正しました (TPDFlib インスタンスが作成されたものの解放されていませんでした)。
v3.9.14 2026-04-30
- ページ範囲コピー デモを修正し、常に失敗を報告するのではなく実際にページをコピーするようにしました。
- ラップ テキストと HTML ページネーション デモを整理し、各デモが自身の API にフォーカスして単一ボタンから実行されるようにしました。
- 2 つのデモ プロジェクト (EmbeddedFonts と PdfPermission) をリネームし、コンパイルされた実行可能ファイルが古いプロトタイプ名ではなくフォルダ名と一致するようにしました。
v3.9.13 2026-04-30
- 内部バッファ リーダーのストリーム位置バグを修正しました:2 バイト ワード読み取りが読み取りカーソルを 2 バイトではなく 4 バイト進めていました。2 バイトより長いバッファでは、後続の読み取りが間違ったオフセットに着地し、silently に誤ったデータを返します。バイトとワード読み取りを混在させるバイナリ データ構造を解析するときに最も顕著でした。
- ユーティリティ ユニット (buffer、AES、ZLib、Unicode、ダイジェスト ハッシュ) とドキュメント作成、ファイルへの保存とストリームへの保存、ロード ラウンドトリップ、AES-128/AES-256 暗号化を含むライブラリ レベル ワークフローをカバーする自動 DUnitX テスト スイート (コンソールと VCL GUI ランナー) を導入しました。
v3.9.12 2026-04-30
- GDI+ 画像レンダリングが画面または出力解像度にラスタ画像をスケーリングするときに、デフォルトでスムースで高品質のバイキュービック補間を使うようになりました。以前はデフォルトが最近傍法で、画面プレビューや高 DPI 出力のために拡大された小さな画像 (ロゴ、サムネイル) で目に見える階段状のアーティファクトを生成していました。よりシャープな最近傍モードを好む呼び出し元は SetGDIPlusOptions で古い動作を復元できます。
v3.9.11 2026-04-30
- 色キー透明度 (画像辞書の /Mask 色範囲配列) を使う PDF 画像の Cairo レンダリングを修正しました。以前は、ページがこの形式の透明度を持つ画像を含むと、Cairo レンダラーは画像をページ背景に合成する代わりに完全に省略していました。修正により、宣言された色キー範囲からピクセルごとのアルファ チャネルが派生し、透明画像としてレンダリングされ、GDI+ レンダラーと視覚的に一貫した出力が生成されます。
v3.9.10 2026-04-30
- クリップされた画像シーケンスに続くすべてのページ コンテンツが画像のクリッピング矩形内に誤って制限されていた Cairo レンダリング回帰を修正しました。グラフィックス状態を保存し、クリップ パスを適用し、画像をペイントし、状態を復元する PDF ページ — 額入りや境界付き画像の一般的なレイアウト技法 — は、後続のすべてのテキスト、シェイプ、グラフィックスがクリップされた領域内のみにレンダリングされていました。Cairo の状態保存と復元が PDF q/Q 演算子に正しくマップされるようになり、画像が描かれた後にクリッピング領域が破棄されます。
v3.9.9 2026-04-29
- GDI+ と PDFium に加えて Cairo ベースの PDF レンダリング エンジンを 3 つ目のレンダリング オプションとして追加しました。レンダリングする前に SelectRenderer(2) を呼び出して有効化します。エンジンはバンドルされた DLL\Cairo フォルダの cairo.dll が必要です。Cairo レンダリングは GDI+ と同じ出力モードをサポートします:ビットマップ ファイルとストリーム エクスポート (BMP、JPEG、PNG、GIF、TIFF、G4 TIFF)、デバイス コンテキスト レンダリング、直接プリンタ出力。
- MultiFunction View/Print デモは 3 方向 renderer セレクタを公開するようになり、ユーザーは同じ文書上で GDI+、PDFium、Cairo の出力をコード変更なしで並べて比較できます。
v3.9.8 2026-04-29
- RAD Studio 13.1 以降で現れた Win32 C ランタイム シムの 2 つの偽コンパイラ診断を抑制しました。コンパイラ バージョン能力ガードが Delphi 2009 以降のコンパイラに伝播しなかったため、廃止予定メモリ マネージャ API に対してコンパイルされる廃止予定警告 (W1000) が発生しました。Delphi 7 ビルドのためにのみ必要な内部互換変数の未使用変数ヒント (H2164) が発生しました。それはそのバージョンの条件ブロックにスコープされるようになりました。両方の問題は診断のみでランタイムへの影響はありません。
v3.9.7 2026-04-29
- Windows でオプションの PDFium ベースのページ レンダリングを追加し、BMP ストリーム レンダリング、デバイス コンテキスト レンダリング、メモリ レンダリング、プリンタ出力を含みます。
- Delphi MultiFunction View/Print デモを renderer セレクタで更新し、ユーザーが既存の GDI+ レンダラーと PDFium の間で切り替えられるようにしました。
v3.9.6 2026-04-29
- 完全な PDFlibPas パッケージとトライアル パッケージ用に別々の Inno Setup スクリプトを提供し、バージョン管理メタデータ、ビルド出力、IDE キャッシュ、ローカル エージェント ファイル、出荷パッケージに含まれないバンドル サードパーティ ソース ツリーをリリース重視で除外します。
- トライアル インストーラがセットアップ実行可能ファイルを生成する前に、RAD Studio 11.3、12.3、13.1 用のトライアル バイナリ ライブラリとトライアル Delphi デモをビルドしてパッケージするようになりました。
v3.9.5 2026-04-29
- RAD Studio 9.0 / Delphi XE2 での Win32 ライブラリ ビルドを修正しました。ビルド スクリプトが渡していた DCU 出力ディレクトリ フラグは Delphi 2010 以降にのみ存在しました。XE2 のコンパイラはそのフラグを違う方法で解釈し、ソース ファイル処理前に文字化けした出力パスと致命的エラーを生成していました。スクリプトはターゲット コンパイラ バージョンに基づいて適切なフラグを自動的に選択するようになりました。
- ライブラリ ソース内の関連するコンパイラ バージョン ガードを修正しました。XE2+ 条件下で XE4 で導入された名前修飾ランタイム関数を呼び出していました。XE2 と XE3 ターゲット ビルドは正しい互換インポートを解決するようになりました。
v3.9.4 2026-04-29
- ネットワーク プリンタとサーバー共有プリンタのプリンタ セットアップを修正しました。プリンタ デバイス コンテキスト ハンドルではなく、プリンタ DEVMODE ハンドルを通じて用紙トレイ、メディア、両面、品質、その他の印刷設定を適用するようになりました。
v3.9.3 2026-04-29
- バンドルされた AES バックエンドを Win32 と Win64 の両方で Brian Gladman の 2018 AES ソースにリフレッシュしました。再現可能なビルド スクリプトにより、静的 AES オブジェクトをいつでもソースからリビルドできるようになりました。プロセスで Pascal バインディングの ABI 欠陥が発見され修正されました:AES-CBC 暗号化と復号化関数の C 呼び出し規約宣言が欠けていたため、Win32 ビルドは silently に引数を間違ったレジスタ順で渡し、誤った暗号化出力を生成する可能性がありました。Win64 ビルドはプラットフォームが統一された呼び出し規約を強制するため影響を受けませんでした。
- サードパーティ リビルド スクリプトを強化し、MSVC ベースの zlib、JPEG、CRT スタブ スクリプトがリポジトリ ルートと thirdparty ディレクトリの両方から起動できるようになりました。以前は作業ディレクトリを thirdparty フォルダに設定することが必要でした。
v3.9.2 2026-04-29
- JPEG 2000 バックエンドを Win32 と Win64 の両方で旧来の OpenJPEG 1.5 から OpenJPEG 2.5.4 にアップグレードしました。両プラットフォームが静的オブジェクト リンクを使うようになり、JPEG 2000 のエンコードとデコードが追加のランタイム DLL なしで動作します。現代の codec は最新の JP2/J2K ヘッダー処理、コールバック駆動のストリーム API、上流プロジェクトから蓄積されたバグと安全性の修正をもたらします。公開 TJpeg2000Bitmap API は変更されていません。
v3.9.1 2026-04-29
- libjpeg-turbo アップグレード後の JPEG ページ レンダリングと画像エクスポートを修正し、Win32 と Win64 での PdfToImage JPG 変換と TPDFJPEGImage.SaveToStream 出力を復元しました。
- Win32 libjpeg-turbo ABI バインディングを修正し、コールバック、構造アラインメント、ブール フィールド、メモリ ベースの JPEG 出力先が libjpeg-turbo 3.1.90 と一致するようにしました。
- バンドル zlib 1.3.2 バックエンドの Win32 FlateDecode ストリーム解凍を修正し、PdfToImage サンプル文書などのファイルの PDF xref ストリーム ロードを復元しました。
v3.9.0 2026-04-29
- バンドルされた JPEG 2000 バックエンドを旧来の OpenJPEG 1.5 から OpenJPEG 2.5.4 にアップグレードしました。JPEG 2000 のロードと保存が現代の codec、コールバック駆動のストリーム API、現在の JP2/J2K ヘッダー処理を使うようになり、公開 TJpeg2000Bitmap API は保持されます。
- JPEG 2000 出力が小さい画像に有効な OpenJPEG 解像度カウントを自動的に選択するようになり、Win32 静的バックエンドが欠けている MSVCRT ヘルパー エクスポートに依存しなくなりました。
v3.8.1 2026-04-29
- Win32 と Win64 上のすべての 16 の装飾的リンカ W1028 "Bad global symbol definition" 警告を排除しました。ソース レベルのリネームで余分な Pascal 側重複が削除されます (jpeg_std_error と jmemnobs アロケータ スタブが obj レイヤーからのみ解決されるようになりました)。残りの 3 つの bcc32 / vc64 obj シンボル (jpeg_natural_order、jpeg_aritab、jpeg_nbits_table) は Pascal 側データに対してリンク解決を維持する必要があり、それらは thirdparty\build-jpeg-vc64.bat の ObjConv 後処理パスで COFF シンボル名が剥がされます。公開 API 変更なし。Delphi Win32 と Win64 ビルドのクリーンなリンカ出力。
v3.8.0 2026-04-29
- Win64 JPEG codec を IJG スタイル libjpeg から libjpeg-turbo 3.1.90 にアップグレードし、v3.7.0 (Win32) で開始された JPEG 移行を完了しました。Win32 と Win64 のパスは現在、同じ現代の JPEG codec を共有し、同じ SIMD 最適化された内部ループと上流から累積された 30 以上の CVE / fuzz 修正を持ちます。公開 PDFlibPas API は変更されていません。
v3.7.0 2026-04-28
- Win32 JPEG codec を IJG libjpeg-6b から libjpeg-turbo 3.1.90 にアップグレードしました。SIMD 最適化された内部ループによる大幅に高速な JPEG エンコード/デコード、libjpeg-turbo 上流で累積された 30 以上の CVE / fuzz 修正。公開 PDFlibPas API (TPDFJPEGImage クラス、DumpJPEG 関数) は変更されていません。既存の PDF/JPEG コード パスはソース変更なしで高速に動作します。
v3.6.0 2026-04-28
- Win32 zlib を 1.2.x から 1.3.2 にアップグレードしました。1.2.8 以降上流で累積された標準の 25 以上の CVE / fuzz 修正、加えて 64 ビット ウィンドウ ストリームで使用される新しい inflateBack9 / inflateTree9 エントリ ポイントを含みます。公開 PDFlibPas API (DeflateStr / InflateStr / InflateStrParms) は変更されていません。
- 本リリースでは Win64 zlib パスは変更されていません — 引き続き Delphi バンドルの System.ZLib ユニットを使用します。
- Win32 zlib パスに Win64 リンク時 CRT シム PDFlibCLibs.pas (v3.5.0 で導入) を有効化し、新しい zlib 1.3.2 obj ファイルが参照する memcpy / memset / malloc / free シンボルを提供します。
v3.5.0 2026-04-28
- バンドル C 画像 / 圧縮ライブラリ用にフレッシュなビルド インフラストラクチャをベンダリングしました:zlib 1.3.2、libjpeg-turbo 3.1.90、libtiff 4.7.1。Embarcadero bcc32 (Win32) と MSVC cl.exe (Win64) の両方のビルド スクリプトがソース ツリーと並んで Lib/thirdparty/ にあり、RAD Studio + VS2022 を持つ誰でもクリーン ソースから静的 obj ファイルをリビルドできます。
- OpenJPEG 2.5.4 用のビルド インフラストラクチャを追加しました。OpenJPEG ソース ツリー自体はユーザーが独立に取得します (git clone uclouvain/openjpeg を Lib/thirdparty/OpenJPEG/ に)。これにより PDFlibPas のビルド設定に触らずアップグレードできます。
- Lib/PDFlibCLibs.pas を追加しました。これは Win64 バックエンドで使用する Win64 リンク時 CRT shim です。MSVC でコンパイルされた C obj ファイルと、msvcrt.dll を自動的に取り込まない Delphi の Win64 リンカー (dcc64 / Win64x ld.lld / BCB ilink64) との間を橋渡しします。
v3.4.0 2026-04-28
- 暗号化キー、AES 初期化ベクトル、Perms 権限ブロック生成を予測可能な乱数源に対して強化しました。壁時計時刻が近いシステムで生成された暗号化 PDF はもはや簡単に関連付けできず、AES-256 文書は完全なキー強度を維持します。
- 不合理な Width、Height、BitsPerComponent、DeviceN コンポーネント数を宣言する不正または敵対的な PDF に対して画像辞書解析を強化しました。範囲外の値はピクセル バッファ演算の前にクランプされ、そのようなファイルを開いたときのクラッシュを防ぎます。
- /Prev xref チェーンまたは /Parent ページ リンクがサイクルを形成するか過度に深い文書に対してクロス リファレンスとページ ツリー トラバーサルを強化しました。リーダーは現在、スタックを使い切るまで再帰する代わりに不正な構造をクリーンに拒否します。
v3.3.1 2026-04-27
- コンポーネントごとの Windows ビルド スクリプトを合理化しました。DLL/、OCX/、Dylib/ フォルダはもはや別の build12-* / build13-* バリアントを持ちません:各プラットフォームは今や単一の build-Win32 / build-Win64 スクリプトを持ち、最新の RAD Studio にピン留めし、オプションの "debug" 引数を受け付けます。
- PDFlibRenderer.pas の初期 Git ベースラインにすでに存在していたレンダー修正の周りにインライン根拠コメントを追加しました。コメントは SetPen がストローク幅をアクティブ canvas 変換でスケーリングする理由、Type 3 フォント CharProc d0/d1 演算子がそれらのオペランドを消費しなければならない理由を文書化します。ランタイム動作の変更はありません。
v3.3.0 2026-04-26
- PDFlibRenderer.pas での変換されたストローク レンダリングを修正しました。SetPen は Picasso を呼ぶ前に PDF 線幅に現在の canvas 変換スケールを適用し、すでに座標が変換されているパスでストロークが過大または過小サイズになるのを防ぎます。これは Type 3 グリフ アウトラインが太く不規則なブロックとしてレンダリングされる可能性のある問題を修正します。
- コンテンツ ストリーム パーサでの Type 3 フォント CharProc d0/d1 処理を修正しました。d0 は 2 つの幅オペランドを消費し、d1 は 6 つの幅/バウンディング ボックス オペランドを後続の描画コマンドが実行される前に消費し、古いオペランドがグリフまたはパス ジオメトリを破損するのを防ぎます。