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
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
| Politik | Adfærd |
|---|---|
pndReject | En kildekey, som allerede findes i målet, afviser hele transaktionen |
pndRename | Standardpolitikken 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 |
pndNamespace | Hver 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
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
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;
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;