function SaveAsPdfR(const FileName: string): Boolean; overload;
function SaveAsPdfR(const FileName: string; const Options: TPdfRSaveOptions): Boolean; overload;
SaveAsPdfR はまず通常の SaveAs を実行し、その保存バイトの上に増分更新を重ねて、PDF/R-1 のファイル形式マーカーを付けます。PDF/R-1(ISO 23504-1:2020)は、TWAIN Working Group がスキャン文書ワークフローで使う PDF の厳格なラスター画像転送サブセットです。ページごとに固定サイズのラスターバッファを持ち、ビトーナル / グレースケール / RGB 画像と FlateDecode / CCITTFaxDecode / DCTDecode 圧縮のみに対応します
後処理は保存済み stream へ次の 5 種類のバイトを注入します:
%PDF-raster-1.0 のバージョン識別コメント。trailer 辞書と startxref キーワードの間に書き込みます(ISO 23504-1 §5)。これは PDF/R 固有の手法で、他の PDF/x 標準は XMP と Info 辞書 entry で自己識別します出力は元の PDF の終端までは、ベースの SaveAs 結果とバイト単位で同一です。追加されるのは増分更新だけです(ソースのカタログ / Info は同一オブジェクト番号の書き換えで、削ぎ落とした版へ置き換えられます)。2 つのオーバーロードの違いは設定の渡し方だけで、ファイル名だけの形式は TPdfRSaveOptions.Default を使って 4 つの Info フィールドと DocumentId を FPDF_GetMetaText / FPDF_GetFileIdentifier から自動補完します
成功時は True を返します
[0 0 w h]、許される filter は FlateDecode / CCITTFaxDecode(ビトーナル)/ DCTDecode(8 ビットグレーか RGB)のみ、object stream は禁止、すべての間接参照の世代番号は 0、各ページは実質 1 枚のラスター画像です。すでにこの形に合う PDFium 生成ドキュメント(例: 再パッケージのために PDFium を通したスキャナー出力)はうまくいきますが、コンテンツの豊富な任意の PDF は通常うまくいきませんTPdfRSaveOptions.StripCatalogOptionalEntries と StripInfoOptionalEntries のデフォルトは True です。注入器にソース entry をすべて保持させたいなら False にします(その場合出力は §6.3 / §6.4.3 を満たしませんが、バージョンマーカーと XMP は付きます)%PDF-2.0 ヘッダーと AES 暗号化に限られます。PDFium が生成する PDF は 1.x ヘッダーなので、暗号化出力はさらに保存し直さない限り PDF/R-1 の候補になりません
// Simple PDF/R-1 output; only meaningful when the source PDF is
// already a raster scan (one image per page, allowed filters only).
if Pdf1.SaveAsPdfR('C:\Scan.pdfr.pdf') then
ShowMessage('Saved with PDF/R-1 markers');
// Validate to see whether structural rules are also satisfied
Pdf1.FileName := 'C:\Scan.pdfr.pdf';
Pdf1.Active := True;
if Pdf1.ValidatePdfR.IsCompliant then
ShowMessage('PDF/R-1 conformant');