PDFium Delphi Component Docs

เมธอด ExtractAttachmentsToStreams

Component: TPdf  ·  Unit: PDFium
ถอดรหัสไฟล์แนบที่ฝังระดับเอกสารทุกรายการ แล้วเขียนไบต์ payload ลงสู่ stream ที่ผู้เรียกเตรียมไว้ ภายใต้การควบคุมขนาด การแบ่งชิ้น การยกเลิก และการรายงาน error ที่ระบุชัด

Syntax

function ExtractAttachmentsToStreams(const Destinations: array of TStream; const Options: TPdfAttachmentBatchOptions; out Report: TPdfAttachmentBatchReport; const CancellationToken: IPdfCancellationToken = nil): Boolean;

DestinationsOpen array of TStream หนึ่ง stream ต่อไฟล์แนบหนึ่งรายการ เรียงตามลำดับในเอกสาร ช่องที่เป็น nil จะข้ามไฟล์แนบนั้นโดยไม่เขียนอะไรเลย และ stream ยังคงเป็นของผู้เรียก
OptionsTPdfAttachmentBatchOptions ขีดจำกัดและพฤติกรรมของชุดงาน: MaxAttachments, MaxFileBytes, MaxTotalBytes, ChunkBytes และ StopOnError เริ่มจาก TPdfAttachmentBatchOptions.Default
ReportTPdfAttachmentBatchReport เมื่อคืนค่าจะมีหนึ่งรายการต่อไฟล์แนบ (Metadata, State, BytesWritten, ErrorMessage) บวกตัวนับรวม (AttachmentCount, ExtractedCount, SkippedCount, FailedCount, BytesWritten, PeakBufferBytes, Cancelled, Completed)
CancellationTokenIPdfCancellationToken token เสริมที่ถูกตรวจก่อนขึ้นกับไฟล์แนบแต่ละรายการและระหว่างการเขียนแต่ละชิ้น หากเป็น nil จะรันชุดงานโดยไม่ตรวจการยกเลิก
ResultBoolean คืน True เมื่อชุดงานเสร็จสมบูรณ์โดยไม่ถูกยกเลิกและไม่มีไฟล์แนบใดล้มเหลว รายการที่ถูกข้ามไม่นับเป็นความล้มเหลว

Description

ฉบับทำเป็นชุดของการอ่าน Attachment ทีละ index ไฟล์แนบของเอกสารถูกเก็บภาพไว้ครั้งเดียว แล้ว payload แต่ละรายการถูกถอดรหัสและส่งเข้า stream ปลายทางของมัน โดยบันทึกผลของทุกไฟล์แนบไว้ใน Report.Items

อาร์เรย์ปลายทางต้องมี stream พอดีหนึ่งตัวต่อไฟล์แนบหนึ่งรายการในเอกสาร มิฉะนั้นจะเกิด EPdfError ก่อนที่ไบต์ใดจะถูกอ่าน ส่วนรายการที่เป็น nil ในอาร์เรย์จะทำเครื่องหมายไฟล์แนบนั้นว่าถูกข้าม (paesSkipped) แทนการยุติชุดงานทั้งหมด

options จะถูกตรวจตั้งแต่ต้นและเกิด EPdfError เมื่อค่าไม่ถูกต้อง: MaxAttachments ต้องมากกว่าศูนย์ MaxFileBytes และ MaxTotalBytes ติดลบไม่ได้ และ ChunkBytes ต้องมากกว่าศูนย์ ค่าจาก TPdfAttachmentBatchOptions.Default ให้ไฟล์แนบสูงสุด 10000 รายการ, ขีดจำกัดต่อไฟล์ 256 MB, ขีดจำกัดรวม 1 GB, เขียนทีละ 1 MB และ StopOnError = True

ไฟล์แนบแต่ละรายการจะจบในสถานะใดสถานะหนึ่งของ TPdfAttachmentExtractionState: paesExtracted เมื่อสำเร็จ, paesSkipped เมื่อปลายทางเป็น nil, paesUnreadable เมื่อเปิดหรือถอดรหัส payload ไม่ได้, paesFileLimit หรือ paesAggregateLimit เมื่อขนาดเกินขีดจำกัด, paesWriteFailed เมื่อ stream ปลายทาง raise และ paesCancelled เมื่อ token ยิง หากเปิด StopOnError ไว้ ความล้มเหลวแรกจะหยุดลูปทันที และรายการที่เหลือจะยังคงเป็น paesNotProcessed

function คืน True เฉพาะเมื่อ Report.Completed ถูกตั้ง (ไม่มีการยกเลิก ไม่มีรายการค้าง) และ FailedCount เป็นศูนย์ กรณียกเลิกจะคืน False พร้อมตั้ง Report.Cancelled แทนการ raise

Remarks

Example

var
  Options: TPdfAttachmentBatchOptions;
  Report: TPdfAttachmentBatchReport;
  Streams: array of TStream;
  I: Integer;
begin
  Pdf1.LoadFromFile('with-attachments.pdf');
  SetLength(Streams, Pdf1.AttachmentCount);
  for I := 0 to High(Streams) do
    Streams[I] := TFileStream.Create('out\' + Pdf1.AttachmentName[I], fmCreate);
  try
    Options := TPdfAttachmentBatchOptions.Default;
    Options.StopOnError := False;
    if not Pdf1.ExtractAttachmentsToStreams(Streams, Options, Report) then
      ShowMessage(Format('%d extracted, %d failed, %d skipped',
        [Report.ExtractedCount, Report.FailedCount, Report.SkippedCount]));
  finally
    for I := 0 to High(Streams) do
      Streams[I].Free;
  end;
end;

See Also

ReadAttachmentMetadata, Attachment, AttachmentCount, AttachmentName