PDFium Delphi Component Docs

RenderPageBandedToEncoder метод

Component: TPdf  ·  Unit: PDFium
Рендерить поточну сторінку обрізаними горизонтальними смугами й передає бітову карту кожної смуги наданому викликачем смуговому кодувальнику зображень

Syntax

function RenderPageBandedToEncoder(Width, Height, BandHeight: Integer;
  Encoder: TPdfBandedImageEncoder; Rotation: TRotation = ro0;
  Options: TRenderOptions = []; Color: TColor = clWhite): TPdfBandedImageReport;

Width, HeightInteger. Розмір зображення повної сторінки в пікселях, ніби його відрендерено цілим шматком
BandHeightInteger. Висота кожної смуги в пікселях. Остання смуга коротша, коли Height не є її кратним
EncoderTPdfBandedImageEncoder. Екземпляр кодувальника у власності викликача, який отримує потік смуг
RotationTRotation. Обертання показу, застосоване до сторінки: ro0, ro90, ro180 або ro270
OptionsTRenderOptions. Прапорці рендерингу
ColorTColor. Заливка тла, застосовувана до кожної смуги перед рендерингом
ResultTPdfBandedImageReport. Кількість смуг, закодованих рядків, пікові байти смуги, вихідні байти та прапорець завершення

Description

Метод керує тим самим смуговим циклом, що й RenderPageBanded, але замість зворотного виклику застосунку пропускає щойно відрендерену бітову карту Width x висоти смуги через внутрішній місток у три віртуальні методи наданого викликачем кодувальника: спершу виконується BeginImage(Width, Height), WriteBand(BandIndex, BandTopY, Bitmap) отримує один виклик на смугу згори донизу, а EndImage(Completed) закриває зображення

BandIndex нумерується від нуля, а BandTopY — це y-зсув верху смуги в пікселях повної сторінки, саме те, що потрібно записувачу смужок для розміщення рядків у вихідному файлі. Бітова карта належить циклу рендерингу та звільняється одразу після повернення з WriteBand, тож кодувальнику, якому треба зберегти пікселі, доведеться їх скопіювати

WriteBand повертає True, щоб продовжити, або False, щоб чисто скасувати решту смуг. EndImage(True) викликається лише коли кожен запитаний рядок було закодовано; скасований або невдалий запуск отримує EndImage(False), причому винятки з цього шляху збою придушуються

Повернутий звіт несе Format = pbifCustom, кількість відрендерених і прийнятих смуг у BandsRendered і BandsEncoded, прийняті рядки в RowsEncoded, найбільшу бітову карту смуги як Width x висоту смуги x 4 байти в PeakBandBytes, значення Encoder.GetBytesWritten у OutputBytes, і Completed = True рівно тоді, коли RowsEncoded = Height

Пікова пам'ять під пікселі сторінки залишається на рівні однієї бітової карти смуги, тож постери та інженерні креслення можна експортувати в роздільності друку, ніколи не виділяючи повне цільове зображення

Remarks

Передача nil-кодувальника, непозитивних розмірів або непозитивної висоти смуги породжує EPdfError

Добуток Width і Min(BandHeight, Height) має залишатися в межах чверті адресованого діапазону Integer, інакше EPdfError повідомить, що буфер смуги перевищує адресований розмір

Перевизначте GetBytesWritten у нащадку кодувальника, щоб передавати специфічну для кодувальника телеметрію виходу в OutputBytes; базова реалізація повертає 0

Example

type
  TRawStripEncoder = class(TPdfBandedImageEncoder)
  public
    procedure BeginImage(Width, Height: Integer); override;
    function WriteBand(BandIndex, BandTopY: Integer;
      Bitmap: TBitmap): Boolean; override;
    procedure EndImage(Completed: Boolean); override;
  end;

Encoder := TRawStripEncoder.Create;
try
  Report := Pdf.RenderPageBandedToEncoder(4960, 7016, 512, Encoder);
  LogBandedExport(Report.BandsEncoded, Report.PeakBandBytes);
finally
  Encoder.Free;
end;

See Also

RenderPageBanded, RenderPageBandedToStream, RenderPage, RenderTile