PDFium Delphi Component Docs

เมธอด RenderPageBandedToStream

Component: TPdf  ·  Unit: PDFium
encode หน้าปัจจุบันทีละ band ลง stream ที่ผู้เรียกเป็นเจ้าของ ในรูปแบบ PNG หรือ TIFF โดยไม่ต้องจอง bitmap เต็มหน้าเลย

Syntax

function RenderPageBandedToStream(Stream: TStream; Width,
  Height: Integer; const StreamOptions: TPdfBandedImageStreamOptions;
  Rotation: TRotation = ro0; Options: TRenderOptions = [];
  Color: TColor = clWhite): TPdfBandedImageReport;

StreamTStream. เอาต์พุตแบบเขียนได้ที่ผู้เรียกเป็นเจ้าของ วางตำแหน่งไว้ตรงจุดที่ภาพจะเริ่ม
StreamOptions.FormatpbifPng สำหรับ PNG 8-bit RGB แบบบีบอัด หรือ pbifTiff สำหรับ TIFF strip แบบคลาสสิก little-endian ไม่บีบอัด
StreamOptions.BandHeightความสูงของ band และ TIFF strip ต้องเป็นบวก ค่า default คือ 256 แถว
StreamOptions.CompressionLevelระดับ zlib ของ PNG ตั้งแต่ 0 ถึง 9 default คือ 6 และ TIFF ไม่สนใจค่านี้
StreamOptions.MaxOutputBytesเพดานไบต์ของเอาต์พุตแบบบังคับเด็ดขาด ศูนย์หมายถึงไม่จำกัด
RotationTRotation. การหมุนมุมมองที่ใช้กับหน้า
OptionsTRenderOptions. flag ของการเรนเดอร์
ColorTColor. สีพื้นหลังที่เติมให้แต่ละ band ก่อนเรนเดอร์
ResultTPdfBandedImageReport. จำนวน band แถวที่ encode ไบต์สูงสุดต่อ band ไบต์เอาต์พุต flag บอกความสำเร็จ และรูปแบบที่เลือก

Description

เมธอดนี้ห่อ stream ด้วย built-in encoder ที่ระบุ คือ TPdfPngBandedImageEncoder หรือ TPdfTiffBandedImageEncoder แล้วขับ pipeline แบบ band ชุดเดียวกับ RenderPageBandedToEncoder รายงานที่ได้จะระบุ Format ที่เลือกไว้แทน pbifCustom

encoder ฝั่ง PNG บีบอัดแต่ละ scanline ลง IDAT chunk เรียงต่อกันโดยตรง ส่วน encoder ฝั่ง TIFF เขียน RGB strip หนึ่งชุดต่อหนึ่ง render band แล้วเขียน image file directory ต่อท้ายข้อมูลพิกเซล ทั้งสองตัวเขียนไปข้างหน้าอย่างเดียวและไม่ seek stream ของผู้เรียกเด็ดขาด

หน่วยเก็บพิกเซลของหน้าที่จุดสูงสุดคือ bitmap BGRA ขนาด Width x BandHeight หนึ่งชิ้น ไม่ใช่ Width x Height รายงานเปิดเผย PeakBandBytes ที่วัดได้เพื่อให้ผู้ส่งออกตรวจสอบนโยบายหน่วยความจำได้ และ OutputBytes สะท้อนจำนวนที่เขียนลง stream จริง

เริ่มจาก TPdfBandedImageStreamOptions.Default(pbifPng) หรือ Default(pbifTiff) ก่อนไปแก้ค่าจำกัดรายตัว โดย default คือ BandHeight = 256, CompressionLevel = 6 และ MaxOutputBytes = 0

Remarks

stream เป็น nil, BandHeight ไม่เป็นบวก หรือ MaxOutputBytes ติดลบ จะทำให้เกิด EPdfError และ pbifCustom ถูกปฏิเสธเพราะต้องเป็นรูปแบบ PNG หรือ TIFF แบบ built-in

เมื่อภาพที่ encode แล้วจะล้น MaxOutputBytes การเขียนจะ raise EPdfError พร้อมข้อความ Encoded image exceeds the output byte budget

สำหรับรูปแบบ container อื่นหรือ external codec ให้ใช้ RenderPageBandedToEncoder คู่กับ descendant ของ TPdfBandedImageEncoder ที่เขียนเอง

Example

StreamOptions := TPdfBandedImageStreamOptions.Default(pbifTiff);
StreamOptions.BandHeight := 256;
StreamOptions.MaxOutputBytes := Int64(512) * 1024 * 1024;
Report := Pdf.RenderPageBandedToStream(OutputStream, 4960, 7016,
  StreamOptions);
if not Report.Completed then
  RaiseBandedExportIncomplete;

See Also

RenderPageBandedToEncoder, RenderPageBanded, RenderPage, RenderPageProgressive