PDFium Delphi Component Docs

선택적 네이티브 렌더링

유닛: PDFium
capability 게이트가 적용된 Skia 렌더링과 버전이 매겨진 선택적 ABI로 정확한 spot plate와 overprint 출력을 제공합니다

Capability Queries

function GetSkiaRenderCapabilities: TPdfSkiaRenderCapabilities;
function GetPrintOutputCapabilities: TPdfPrintOutputCapabilities;

두 질의 모두 필요하면 선택된 PDFium 모듈을 로드하고 그 정확한 모듈에 존재하는 export만 보고합니다

선택적 export가 없다고 해서 평범한 PDFium 로딩, 비트맵 렌더링, 편집, 저장이 막히는 일은 없습니다

TPdfSkiaRenderCapabilities.PageSceneCache는 RenderPageSkiaByIndex가 TPdf가 소유한 유한한 파싱 페이지 캐시를 재사용할 수 있음을 나타냅니다

TPdfSkiaRenderCapabilities.FormOverlay는 별도의 선택적 폼 export가 페이지 콘텐츠 뒤에 폼 오버레이를 그릴 수 있음을 나타냅니다

TPdfPrintOutputCapabilities.VersionCompatible는 확장이 정확한 PdfPrintOutputAbiVersion 값을 반환할 때만 true입니다

TPdfPrintOutputCapabilities.ExtensionPresent는 print-output 확장이 로드되면 true이고 AbiVersion은 그 확장이 보고하는 원시 ABI 번호를 담습니다

SpotPlateRendering, OverprintDetection, OverprintPreview는 RenderSpotPlate, PageUsesOverprint, RenderOverprintPreview의 게이트입니다

Skia Page and Form Rendering

procedure TPdf.RenderPageSkia(Canvas: FPDF_SKIA_CANVAS; Width, Height: Integer; DrawFormOverlay: Boolean = True);
procedure TPdf.RenderPageSkiaByIndex(Canvas: FPDF_SKIA_CANVAS; PageNumber, Width, Height: Integer; DrawFormOverlay: Boolean = True);

호출자가 네이티브 SkCanvas를 소유하며 FPDF_SKIA_CANVAS로 넘깁니다

RenderPageSkia는 활성 페이지를 그리고 RenderPageSkiaByIndex는 PageNumber를 바꾸지 않고 1 기반 임의 페이지를 그립니다

요청했고 폼 작성 환경이 존재하면 폼 오버레이는 별도의 선택적 폼 export를 통해 페이지 콘텐츠 뒤에 그려집니다

네이티브 Skia API는 픽셀 크기를 받지만 비트맵 렌더러의 회전이나 플래그 파라미터는 노출하지 않습니다

function TPdf.SpotPlates: TPdfSpotPlateInfos;
function TPdf.PageUsesOverprint: Boolean;
function TPdf.RenderSpotPlate(PlateIndex, Width, Height: Integer; Rotation: TRotation = ro0; Options: TRenderOptions = []; Color: TColor = clWhite): TBitmap;
function TPdf.RenderOverprintPreview(Width, Height: Integer; Rotation: TRotation = ro0; Options: TRenderOptions = []; Color: TColor = clWhite): TBitmap;

이 메서드들은 확장의 버전, capability 비트, 해당 함수 export가 모두 일치할 때만 선택적 print-output 확장을 호출합니다

반환된 비트맵은 호출자가 소유하며 평범한 렌더링과 같은 유한한 PDFium 비트맵 경로를 사용합니다

확장이 없으면 각 연산은 RGB 출력으로 plate를 흉내 내거나 부정확한 overprint 동작을 주장하는 대신 EPdfError를 일으킵니다

Print-output ABI version 1

ExportContract
PDFiumPas_GetPrintOutputAbiVersionPdfPrintOutputAbiVersion을 32비트 부호 없는 값으로 반환합니다
PDFiumPas_GetPrintOutputCapabilities선언된 spot 열거, spot 렌더링, overprint 감지, overprint 미리보기 capability 비트를 반환합니다
PDFiumPas_PageCountSpotPlates하나의 FPDF_PAGE에 대해 유한하고 음수가 아닌 plate 개수를 반환합니다
PDFiumPas_PageGetSpotPlateName끝의 0을 포함한 UTF-8 바이트 수를 반환하고 공급된 버퍼 안에서만 씁니다
PDFiumPas_PageUsesOverprint한 페이지에 대해 32비트 FPDF_BOOL을 반환합니다
PDFiumPas_RenderSpotPlate0 기반 plate 하나를 호출자가 소유하는 FPDF_BITMAP으로 렌더링합니다
PDFiumPas_RenderOverprintPreview컬러가 관리되는 overprint 미리보기를 호출자가 소유하는 FPDF_BITMAP으로 렌더링합니다

모든 ABI 함수는 cdecl, 32비트 정수와 FPDF_BOOL 값, 포인터 크기 핸들, PDFium 소유 페이지 의미론을 사용합니다

렌더 함수는 동기적으로 완료되어야 하며 공급된 비트맵이나 페이지 핸들을 붙잡아 두면 안 됩니다

알 수 없는 capability 비트는 RawCapabilityBits에 보존되지만 지원되는 동작으로 취급되지는 않습니다

Example

SkiaCaps := GetSkiaRenderCapabilities;
if SkiaCaps.PageRender then
  Pdf.RenderPageSkiaByIndex(SkCanvas, 1, 1200, 1600);

PrintCaps := GetPrintOutputCapabilities;
if PrintCaps.SpotPlateEnumeration then
  Plates := Pdf.SpotPlates;

See Also

TPdf.RenderPageByIndex, TPdf.ClearPageSceneCache