PDFium Delphi Component Docs

Volitelné nativní vykreslování

Jednotka: PDFium
Poskytuje Skia vykreslování řízené schopnostmi a verzovanou volitelnou ABI pro přesný výstup spot desek a overprintu

Dotazy na schopnosti

function GetSkiaRenderCapabilities: TPdfSkiaRenderCapabilities;
function GetPrintOutputCapabilities: TPdfPrintOutputCapabilities;

Oba dotazy v případě potřeby načtou vybraný modul PDFium a hlásí jen ty exporty, které jsou v daném konkrétním modulu přítomné

Chybějící volitelné exporty nikdy nebrání normálnímu načtení PDFium, bitmapovému vykreslování, editaci ani ukládání

TPdfSkiaRenderCapabilities.PageSceneCache označuje, že RenderPageSkiaByIndex může znovu použít ohraničenou cache parsovaných stránek vlastněnou TPdf

TPdfSkiaRenderCapabilities.FormOverlay označuje, že samostatný volitelný formulářový export dokáže nakreslit formulářovou overlay po obsahu stránky

TPdfPrintOutputCapabilities.VersionCompatible je true jen tehdy, když rozšíření vrátí přesnou hodnotu PdfPrintOutputAbiVersion

TPdfPrintOutputCapabilities.ExtensionPresent je true, jakmile se rozšíření tiskového výstupu načte, a AbiVersion nese surové číslo ABI, které rozšíření hlásí

SpotPlateRendering, OverprintDetection a OverprintPreview střeží RenderSpotPlate, PageUsesOverprint a RenderOverprintPreview

Vykreslování stránek a formulářů pomocí Skia

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);

Volající vlastní nativní SkCanvas a předává ho jako FPDF_SKIA_CANVAS

RenderPageSkia kreslí aktivní stránku, zatímco RenderPageSkiaByIndex kreslí libovolnou stránku indexovanou od jedničky beze změny PageNumber

Když je to požadováno a existuje prostředí pro plnění formulářů, kreslí se formulářová overlay po obsahu stránky přes samostatný volitelný formulářový export

Nativní Skia API přijímá velikost v pixelech, ale nevystavuje parametry rotace ani příznaků bitmapového rendereru

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;

Tyto metody volají volitelné rozšíření tiskového výstupu jen tehdy, když souhlasí jeho verze, bit schopností i odpovídající export funkce

Vrácené bitmapy vlastní volající a používají stejnou ohraničenou cestu bitmap PDFium jako normální vykreslování

Když rozšíření chybí, vyvolá každá operace EPdfError místo simulace desek z RGB výstupu nebo tvrzení o nepřesném chování overprintu

ABI tiskového výstupu verze 1

ExportContract
PDFiumPas_GetPrintOutputAbiVersionVrací PdfPrintOutputAbiVersion jako 32bitovou hodnotu bez znaménka
PDFiumPas_GetPrintOutputCapabilitiesVrací deklarované bity schopností pro výčet spot desek, vykreslování spot desek, detekci overprintu a náhled overprintu
PDFiumPas_PageCountSpotPlatesVrací ohraničený nezáporný počet desek pro jeden FPDF_PAGE
PDFiumPas_PageGetSpotPlateNameVrací počet bajtů UTF-8 včetně koncové nuly a zapisuje jen v mezích dodaného bufferu
PDFiumPas_PageUsesOverprintVrací 32bitový FPDF_BOOL pro jednu stránku
PDFiumPas_RenderSpotPlateVyrenderuje jednu desku indexovanou od nuly do FPDF_BITMAP vlastněného volajícím
PDFiumPas_RenderOverprintPreviewVyrenderuje barevně řízený náhled overprintu do FPDF_BITMAP vlastněného volajícím

Všechny funkce ABI používají cdecl, 32bitové celočíselné a FPDF_BOOL hodnoty, handly velikosti ukazatele a sémantiku stránek vlastněných PDFium

Renderovací funkce musí proběhnout synchronně a nesmí si ponechat dodanou bitmapu ani handle stránky

Neznámé bity schopností se zachovají v RawCapabilityBits, ale nepovažují se za podporované chování

Příklad

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

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

Viz také

TPdf.RenderPageByIndex, TPdf.ClearPageSceneCache