function RenderPageBandedToEncoder(Width, Height, BandHeight: Integer;
Encoder: TPdfBandedImageEncoder; Rotation: TRotation = ro0;
Options: TRenderOptions = []; Color: TColor = clWhite): TPdfBandedImageReport;
| Width, Height | Integer. Розмір зображення повної сторінки в пікселях, ніби його відрендерено цілим шматком |
| BandHeight | Integer. Висота кожної смуги в пікселях. Остання смуга коротша, коли Height не є її кратним |
| Encoder | TPdfBandedImageEncoder. Екземпляр кодувальника у власності викликача, який отримує потік смуг |
| Rotation | TRotation. Обертання показу, застосоване до сторінки: ro0, ro90, ro180 або ro270 |
| Options | TRenderOptions. Прапорці рендерингу |
| Color | TColor. Заливка тла, застосовувана до кожної смуги перед рендерингом |
| Result | TPdfBandedImageReport. Кількість смуг, закодованих рядків, пікові байти смуги, вихідні байти та прапорець завершення |
Метод керує тим самим смуговим циклом, що й 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
Пікова пам'ять під пікселі сторінки залишається на рівні однієї бітової карти смуги, тож постери та інженерні креслення можна експортувати в роздільності друку, ніколи не виділяючи повне цільове зображення
Передача nil-кодувальника, непозитивних розмірів або непозитивної висоти смуги породжує EPdfError
Добуток Width і Min(BandHeight, Height) має залишатися в межах чверті адресованого діапазону Integer, інакше EPdfError повідомить, що буфер смуги перевищує адресований розмір
Перевизначте GetBytesWritten у нащадку кодувальника, щоб передавати специфічну для кодувальника телеметрію виходу в OutputBytes; базова реалізація повертає 0
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;