PDFium Delphi Component Docs

Transactionele navigatiesamenvoeging

Voeg FPdfMerge toe aan de uses-clause om TPdfNavigationMergeHelper.MergeFilesWithNavigation beschikbaar te maken, of roep de globale functie MergePdfFilesWithNavigation aan met een expliciet doeldocument

De helper zet native pagina-imports klaar, bouwt hiërarchische outlines opnieuw op, combineert named destinations, wijst paginalinks opnieuw toe en heropent het resultaat onafhankelijk voordat het document van de aanroeper wordt vervangen

pmnPreserve behoudt de bronhiërarchie; pmnGroupBySource voegt een kop toe met de naam van elk bronbestand

Titels, ouderrelaties, stijlen, kleuren, uitgeklapte takken, URI-acties en opgeloste interne paginabestemmingen blijven behouden; geselecteerde, herhaalde en herordende pagina's verwijzen naar de eerst geïmporteerde occurrence, en bestemmingen van weggelaten pagina's worden koppen

Bestaande bestemmingsoutlines schuiven mee wanneer pagina's worden ingevoegd; bronbestanden blijven open met write sharing geweigerd zolang de navigatie en de native pagina-imports worden vastgelegd

Alleen samenvoegen met stop-on-error wordt ondersteund; ondertekende bestemmingen, niet-ondersteunde outline-acties en versleutelde nabewerking worden geweigerd met een foutrapport, en mislukking of annulering laat het document van de aanroeper onaangetast

Deze API behoudt het bestaande native formulierbeleid; gebruik FPdfFormMerge wanneer geavanceerde afhandeling van AcroForm-veldbotsingen en resources nodig is

Named destinations and page links

PreserveNamedDestinations en PreservePageLinks staan beide standaard op True; zet een van die opties op False om dat deel van de aanvullende navigatieverwerking over te slaan

Named destinations worden gelezen uit zowel de verouderde /Dests-dictionary van de catalogus als de naamboom /Names/Dests, inclusief hiërarchische bomen, indirecte arrays en bestemmingsdictionary's met /D; wanneer beide vormen dezelfde sleutel definieren, wint de waarde uit de naamboom

Het resultaat gebruikt een gebalanceerde /Names/Dests-boom en behoudt niet-gerelateerde bestemmingsnaambomen zoals /EmbeddedFiles; bronnbomen die niets met bestemmingen te maken hebben, importeert deze helper niet

Sleutels behouden hun oorspronkelijke PDF-stringbytes, inclusief UTF-16BE-codering; de exacte view mode en parameters blijven behouden, inclusief /FitH null en /XYZ null 34 null

PolicyGedrag
pndRejectEen bronsleutel die al in het doel bestaat, verwerpt de hele transactie
pndRenameHet standaardbeleid houdt niet-conflicterende namen aan en voorziet conflicterende namen van het voorvoegsel DestinationPrefix, dat standaard Imported_ is; verdere botsingen krijgen deterministische voorvoegsels zoals 2_Imported_Shared
pndNamespaceElke bronsleutel krijgt het voorvoegsel DestinationPrefix, de op 1 gebaseerde bronindex en een underscore, zoals Imported_1_Shared; overgebleven botsingen krijgen een deterministisch numeriek voorvoegsel

DestinationPrefix moet 1 tot 256 printbare ASCII-tekens bevatten; voorvoegsels worden na een UTF-16BE-BOM ingevoegd wanneer een sleutel die codering gebruikt

Interne linkannotaties met /Dest of een enkele /A /GoTo-actie worden herschreven als expliciete bestemmingen; genoemde linkdoelen blijven dus correct na een hernoeming bij botsing

Bestaande pagina's die eigenaar zijn van links en hun doelen schuiven mee wanneer pagina's worden ingevoegd; elke occurrence van een herhaald geïmporteerde pagina krijgt een eigen linkannotatie, terwijl de interne doelen ervan verwijzen naar de eerst geselecteerde occurrence van de doelpagina

Bestemmingen waarvan de doelpagina is weggelaten, worden uit de named-destination-boom verwijderd; een getroffen link verliest zijn /Dest of GoTo-actie, terwijl de annotatie en de overige eigenschappen behouden blijven

URI-links blijven intact; gekoppelde linkacties met /Next worden geweigerd, omdat het opnieuw toewijzen van actieketens buiten het huidige bereik van deze helper valt

Misvormde of cyclische bestemmingsbomen, onbeschikbare objectreferenties en dubbele naamboomsleutels verwerpen de transactie; mislukking, annulering of een overschreden budget laat het document van de aanroeper ongewijzigd

Budgets and reports

Standaardlimieten zijn 10,000 outline-items, diepte 128, 1,048,576 titeltekens, 10,000 named destinations, 100,000 paginalinks en 256 MiB aan documentbytes; het documentbyteplafond mag niet boven MaxInt uitkomen

Wanneer aanvullende verwerking van bestemmingen of links is ingeschakeld, is de maximaal ingestelde diepte 256, mag de named-destination-limiet niet boven 65,536 uitkomen en mag de paginalinklimiet niet boven 1,000,000 uitkomen; het vastleggen van bronnen begrenst ruwe sleutelbytes bovendien op 1 MiB

Gecombineerde named keys gebruiken een apart bytebudget gelijk aan MaxTitleCharacters; elke bron wordt binnen de ingestelde budgetten vastgelegd vóór het filteren op geselecteerde pagina's

PreservedNamedDestinationCount telt de uiteindelijke named destinations, RenamedNamedDestinationCount telt geïmporteerde sleutels die door het gekozen beleid zijn gewijzigd en RemovedNamedDestinationCount telt onopgeloste of weggelaten named targets

RemappedPageLinkCount telt de uiteindelijke interne bestemmingen over bestaande en geïmporteerde links samen, en RemovedPageLinkCount telt verwijderde interne bestemmingen; een link met zowel /Dest als een GoTo-actie telt per bestemming één keer mee

Public declarations

type
  TPdfMergeNavigationPolicy= (pmnPreserve, pmnGroupBySource);
  TPdfMergeNamedDestinationPolicy= (pndReject, pndRename, pndNamespace);

  TPdfNavigationMergeOptions= record
    NativeOptions: TPdfBatchMergeOptions;
    NavigationPolicy: TPdfMergeNavigationPolicy;
    MaxOutlineItems: Integer;
    MaxOutlineDepth: Integer;
    MaxTitleCharacters: Integer;
    MaxDocumentBytes: Int64;
    PreserveNamedDestinations, PreservePageLinks: Boolean;
    NamedDestinationPolicy: TPdfMergeNamedDestinationPolicy;
    DestinationPrefix: string;
    MaxNamedDestinations, MaxPageLinks: Integer;
    class function Default: TPdfNavigationMergeOptions; static;
  end;

  TPdfNavigationMergeReport= record
    Succeeded: Boolean;
    Cancelled: Boolean;
    ImportedSourceCount: Integer;
    ImportedPageCount: Integer;
    PreservedOutlineCount: Integer;
    RemovedDestinationCount: Integer;
    SourceGroupCount: Integer;
    PreservedNamedDestinationCount, RenamedNamedDestinationCount: Integer;
    RemovedNamedDestinationCount, RemappedPageLinkCount, RemovedPageLinkCount: Integer;
    ErrorMessage: string;
  end;

  // The caller's document is replaced only after the complete staged result
  // has been independently reopened and its outline destinations checked
  TPdfNavigationMergeHelper= class helper for TPdf
    function MergeFilesWithNavigation(const Sources: TPdfBatchMergeSources;
      const Options: TPdfNavigationMergeOptions;
      out Report: TPdfNavigationMergeReport): Boolean;
  end;

function MergePdfFilesWithNavigation(Destination: TPdf;
  const Sources: TPdfBatchMergeSources;
  const Options: TPdfNavigationMergeOptions;
  out Report: TPdfNavigationMergeReport): Boolean;

Low-level stream processing

FPdfCompress stelt CapturePdfNavigation en WritePdfNavigation beschikbaar voor aanroepers die hun eigen pagina-imports en spaarzame PDF-revisies beheren

TPdfNavigationNamedDestination.NameKey bevat rauwe PDF-sleutelbytes; paginanummers zijn absoluut en op 1 gebaseerd, waarbij nul een onopgelost doel aanduidt

TPdfNavigationPageLink.PageNumber identificeert de pagina die eigenaar is; AnnotationIndex is de op 0 gebaseerde volgorde tussen alle oorspronkelijke annotaties en LinkIndex is de op 0 gebaseerde volgorde uitsluitend tussen linkannotaties

De schrijver identificeert links aan de hand van LinkIndex, kloont elke annotatie met zijn definitieve pagina-eigenaar en schrijft de opgegeven paginadoelen en exacte bestemmingsachtervoegsels; aanroepers moeten de volledige mapping aanleveren die hun imports nodig hebben

De schrijver vereist verschillende bron- en uitvoerstreams en een niet-versleuteld, niet-ondertekend document; weigering van argumenten bij identieke streams laat de bron staan, en andere fouten maken de aparte uitvoerstream leeg

Deze streamfuncties importeren geen pagina's en vervangen geen live TPdf-document; gebruik de hogere transactionele functie voor volledige navigatiesamenvoeging

function CapturePdfNavigation(Source: TStream; MaxNamedDestinations,
  MaxPageLinks, MaxDepth: Integer; out Names: TPdfNavigationNamedDestinations;
  out Links: TPdfNavigationPageLinks; out ErrorText: string): Boolean;

function WritePdfNavigation(Source, Output: TStream;
  const Names: TPdfNavigationNamedDestinations;
  const Links: TPdfNavigationPageLinks; ReplaceNamedDestinations: Boolean;
  out ErrorText: string): Boolean;