PDFium Delphi Component Docs

Transaktionel navigationsmerge

Tilføj FPdfMerge i uses for at bruge TPdfNavigationMergeHelper.MergeFilesWithNavigation, eller kald den globale MergePdfFilesWithNavigation med et eksplicit måldokument

Hjælperen forbereder native sideimport, genopbygger hierarkiske outlines, kombinerer named destinations, remapper sidelinks og genåbner resultatet uafhængigt før erstatning af kalderens dokument

pmnPreserve bevarer kildehierarkiet; pmnGroupBySource tilføjer en overskrift med hver kildefils navn

Titler, parent-forhold, styles, farver, udfoldede grene, URI actions og opløste interne sidedestinationer bevares; valgte, gentagne og omordnede sider peger på den første importerede forekomst, og destinationer til udeladte sider bliver overskrifter

Eksisterende mål-outlines forskydes ved sideindsættelse; kildefiler holdes åbne uden write sharing, mens navigation og native sideimport indsamles

Kun stop-on-error-merge understøttes; signerede mål, ikke-understøttede outline actions og krypteret postprocessing afvises med en fejlrapport, og fejl eller cancellation bevarer kalderens dokument

API'et bevarer den eksisterende native form-politik; brug FPdfFormMerge, hvis du har brug for avanceret AcroForm-kollisions- og ressourcehåndtering

Navngivne destinationer og sidelinks

PreserveNamedDestinations og PreservePageLinks er begge True som standard; False springer den pågældende del af den ekstra navigationsbehandling over

Named destinations læses fra både det gamle catalog-/Dests-dictionary og /Names/Dests-name tree, inklusive hierarkiske træer, indirect arrays og destination dictionaries med /D; definerer begge samme key, har name-tree-værdien prioritet

Resultatet bruger et balanceret /Names/Dests-træ og bevarer uvedkommende name trees i målet såsom /EmbeddedFiles; hjælperen importerer ikke kildetræer, der ikke vedrører destinationer

Keys bevarer deres originale PDF string-bytes, inklusive UTF-16BE; præcis view mode og parametre bevares, herunder /FitH null og /XYZ null 34 null

PolitikAdfærd
pndRejectEn kildekey, som allerede findes i målet, afviser hele transaktionen
pndRenameStandardpolitikken bevarer navne uden konflikter og præfikser konfliktnavne med DestinationPrefix, som er Imported_ som standard; yderligere kollisioner bruger deterministiske præfikser såsom 2_Imported_Shared
pndNamespaceHver kildekey præfikses med DestinationPrefix, sit étbaserede kildeindeks og en underscore, såsom Imported_1_Shared; resterende kollisioner får et deterministisk numerisk præfiks

DestinationPrefix skal indeholde 1 til 256 printbare ASCII-tegn; præfikser indsættes efter en UTF-16BE BOM, når en key bruger denne encoding

Interne link annotations med /Dest eller en enkelt /A /GoTo-action omskrives til eksplicitte destinationer; derfor er navngivne linkmål stadig korrekte efter kollisionsrename

Eksisterende link-owner-sider og mål forskydes ved sideindsættelse; hver forekomst af en gentaget importeret side får en uafhængig link annotation, mens interne mål peger på målsidens første valgte forekomst

Destinationer med udeladt målside fjernes fra named-destination-træet; det berørte link mister sin /Dest eller GoTo-action, men beholder annotationen og dens øvrige egenskaber

URI-links forbliver intakte; kædede link actions med /Next afvises, da action-chain-remapping er uden for hjælperens nuværende scope

Fejlformede eller cykliske destinationstræer, utilgængelige object references og dublerede name-tree-keys afviser transaktionen; fejl, cancellation eller overskredne grænser efterlader kalderens dokument uændret

Grænser og rapporter

Standardgrænserne er 10,000 outline-poster, dybde 128, 1,048,576 titel-tegn, 10,000 named destinations, 100,000 sidelinks og 256 MiB dokumentbytes; dokumentbytegrænsen må ikke overstige MaxInt

Med ekstra destinations- eller linkbehandling er maksimal konfigureret dybde 256, named-destination-grænsen højst 65,536 og page-link-grænsen højst 1,000,000; kildeindsamling begrænser også rå key-bytes til 1 MiB

Kombinerede named keys har et separat bytebudget svarende til MaxTitleCharacters; hver kilde indsamles inden for grænserne før filtrering af valgte sider

PreservedNamedDestinationCount tæller endelige named destinations, RenamedNamedDestinationCount importerede keys ændret af politikken og RemovedNamedDestinationCount uopløste eller udeladte named targets

RemappedPageLinkCount tæller endelige interne destinationer i både eksisterende og importerede links, og RemovedPageLinkCount fjernede interne destinationer; et link med både /Dest og GoTo tæller én gang for hver destination

Offentlige deklarationer

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;

Streambehandling på lavt niveau

FPdfCompress leverer CapturePdfNavigation og WritePdfNavigation til kode, der selv håndterer sideimport og sparse PDF revisions

TPdfNavigationNamedDestination.NameKey indeholder rå PDF key-bytes; sidenumre er absolutte og étbaserede, mens nul angiver et uopløst mål

TPdfNavigationPageLink.PageNumber angiver owner-siden; AnnotationIndex er det nulbaserede ordinal blandt alle originale annotations, og LinkIndex kun blandt link annotations

Writer identificerer links via LinkIndex, kloner hver annotation med dens endelige sideejer og skriver de leverede sidemål og eksakte destinationssuffikser; kalderen skal levere hele mappingen for sine importer

Writer kræver forskellige kilde- og outputstreams og et ukrypteret, usigneret dokument; identiske streams afvises uden ændring af kilden, mens andre fejl rydder den separate outputstream

Disse streamfunktioner importerer ikke sider eller erstatter et levende TPdf-dokument; brug den transaktionelle funktion på højere niveau til komplet navigationsmerge

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;