PDFiumPas 說明文件

SaveAsPdfAToStream 方法

此 API 頁面保留識別符號、簽名、程式碼區塊與 PDF 術語原樣
元件: TPdf  ·  單元: PDFium
SaveAsPdfA 的記憶體版本,會把 PDF/A-1b 輸出直接寫進任何 TStream,不需要先落地成暫存檔

語法

function SaveAsPdfAToStream(Stream: TStream; const Options: TPdfASaveOptions): Boolean;

說明

SaveAsPdfAToStream 是 SaveAsPdfA 的串流版本,產生的 PDF/A-1b 輸出完全相同,只是結果會寫進呼叫端提供的任何可定位 TStream,不用經過暫存檔,適合 HTTP 上傳流程、BLOB 欄位、記憶體快取層、封存容器(ZIP / TAR)或任何不想讓 PDF/A 位元組碰到磁碟的工作流程

後處理邏輯和 SaveAsPdfA(FileName, Options) 完全一致,先執行基底 SaveAs,再以遞增更新注入 XMP 中繼資料串流,按照 ISO 19005-1 6.7.3 / Cor.1 Table 1 把 Document Information Dictionary 轉成 XMP 形式,並嵌入 6.7.8 要求的 pdfaid extension schema 說明,再加入參照內嵌 ICC profile 的 OutputIntent,預設使用 sRGB,也可透過 Options.IccProfileData 自訂,接著更新 catalog 讓它們彼此連結,最後補上 6.1.3 所需的 trailer /ID 陣列,留白的 Options 欄位會由 FPDF_GetMetaTextFPDF_GetFileIdentifier 自動補值,所以一般呼叫只要設 Conformance

成功時回傳 True,輸出串流會停在最後一個寫入位元組之後的位置,若基底 SaveAs 失敗,或 PDF/A 後處理無法掛上去,則回傳 False,常見原因是來源 PDF 已加密,而 PDF/A 不允許這種情況

注意事項

實例

var
  Stream: TMemoryStream;
  Opts: TPdfASaveOptions;
begin
  Stream := TMemoryStream.Create;
  try
    Opts := Default(TPdfASaveOptions);
    Opts.Conformance := pac1b;
    if Pdf1.SaveAsPdfAToStream(Stream, Opts) then
    begin
      Stream.Position := 0;
      UploadToArchive(Stream);
    end;
  finally
    Stream.Free;
  end;
end;

另請參閱

SaveAsPdfA, ValidatePdfA, PdfAConformance, SaveAs