PDFium Delphi Component Docs

İşlemsel gezinme birleştirme

TPdfNavigationMergeHelper.MergeFilesWithNavigation özelliğini etkinleştirmek için uses yan tümcesine FPdfMerge ekleyin veya genel MergePdfFilesWithNavigation işlevini açık bir hedef belgeyle çağırın

Yardımcı, yerel sayfa içe aktarmalarını aşamalandırır, hiyerarşik outline'ları yeniden oluşturur, adlandırılmış hedefleri birleştirir, sayfa bağlantılarını yeniden eşler ve çağıranın belgesini değiştirmeden önce sonucu bağımsız olarak yeniden açar

pmnPreserve kaynak hiyerarşisini korur; pmnGroupBySource her kaynak dosyanın adını taşıyan bir başlık ekler

Başlıklar, üst ilişkileri, stiller, renkler, genişletilmiş dallar, URI eylemleri ve çözümlenmiş iç sayfa hedefleri korunur; seçilen, tekrarlanan ve yeniden sıralanan sayfalar ilk içe aktarma örneğine eşlenir ve atlanan sayfalara giden hedefler başlığa dönüşür

Sayfalar eklendiğinde mevcut hedef outline'ları kayar; gezinme ve yerel sayfa içe aktarmaları yakalanırken kaynak dosyalar yazma paylaşımı engellenmiş şekilde açık kalır

Yalnızca hatada duran birleştirme desteklenir; imzalı hedefler, desteklenmeyen outline eylemleri ve şifreli son işlem hata raporuyla reddedilir; başarısızlık veya iptal çağıranın belgesini korur

Bu API, mevcut yerel form ilkesini korur; gelişmiş AcroForm alan çakışması ve kaynak işlemeye ihtiyacınız olduğunda FPdfFormMerge kullanın

Named destinations and page links

PreserveNamedDestinations ve PreservePageLinks varsayılan olarak True değerindedir; her iki seçenekten birini False yapmak, ek gezinme işlemenin o bölümünü atlar

Adlandırılmış hedefler, hiyerarşik ağaçları, dolaylı dizileri ve /D içeren hedef sözlüklerini kapsayacak şekilde hem eski katalog /Dests sözlüğünden hem de /Names/Dests ad ağacından okunur; her iki biçim de aynı anahtarı tanımlıyorsa ad ağacı değeri öncelik alır

Sonuç, dengeli bir /Names/Dests ağacı kullanır ve /EmbeddedFiles gibi ilgisiz hedef ad ağaçlarını korur; hedeflerle ilgisiz kaynak ağaçları bu yardımcı tarafından içe aktarılmaz

Anahtarlar, UTF-16BE kodlaması dahil özgün PDF dize baytlarını korur; tam görünüm modu ve parametreleri, /FitH null ve /XYZ null 34 null dahil korunur

PolicyBehavior
pndRejectHedefte zaten var olan bir kaynak anahtar, işlemin tamamını reddeder
pndRenameVarsayılan ilke, çakışmayan adları korur ve çakışan adlara varsayılanı Imported_ olan DestinationPrefix önekini ekler; sonraki çakışmalar 2_Imported_Shared gibi belirleyici önekler kullanır
pndNamespaceHer kaynak anahtar, DestinationPrefix, bir tabanlı kaynak dizini ve alt çizgiyle öneki alır, örneğin Imported_1_Shared; kalan çakışmalar belirleyici bir sayısal önek alır

DestinationPrefix 1 ile 256 arasında yazdırılabilir ASCII karakteri içermelidir; anahtar bu kodlamayı kullandığında önekler UTF-16BE BOM'dan sonra eklenir

/Dest veya tek bir /A /GoTo eylemi kullanan iç bağlantı açıklamaları açık hedefler olarak yeniden yazılır; böylece adlandırılmış bağlantı hedefleri çakışma yeniden adlandırmasından sonra da doğru kalır

Mevcut bağlantı sahibi sayfaları ve hedefleri, sayfalar eklendiğinde kayar; tekrar tekrar içe aktarılan bir sayfanın her örneği bağımsız bir bağlantı açıklaması alır, iç hedefleri ise hedef sayfanın ilk seçilen örneğine eşlenir

Hedef sayfası atlanan hedefler, adlandırılmış hedef ağacından kaldırılır; etkilenen bir bağlantının /Dest veya GoTo eylemi kaldırılırken açıklama ve diğer özellikleri korunur

URI bağlantıları olduğu gibi kalır; /Next kullanan zincirli bağlantı eylemleri reddedilir çünkü eylem zincirlerini yeniden eşlemek bu yardımcının mevcut kapsamı dışındadır

Hatalı biçimlendirilmiş veya döngüsel hedef ağaçları, kullanılamayan nesne başvuruları ve yinelenen ad ağacı anahtarları işlemi reddeder; başarısızlık, iptal veya aşılan bütçe çağıranın belgesini değiştirmeden bırakır

Budgets and reports

Varsayılan sınırlar 10.000 outline öğesi, 128 derinlik, 1.048.576 başlık karakteri, 10.000 adlandırılmış hedef, 100.000 sayfa bağlantısı ve 256 MiB belge baytıdır; belge baytı üst sınırı MaxInt değerini aşmamalıdır

Ek hedef veya bağlantı işleme etkinleştirildiğinde en yüksek yapılandırılabilir derinlik 256dır, adlandırılmış hedef sınırı 65.536yı ve sayfa bağlantısı sınırı 1.000.000u aşmamalıdır; kaynak yakalama, ham anahtar baytlarını da 1 MiB ile sınırlar

Birleştirilmiş adlandırılmış anahtarlar, MaxTitleCharacters değerine eşit ayrı bir bayt bütçesi kullanır; her kaynak, seçilen sayfa filtrelemesinden önce yapılandırılan bütçeler içinde yakalanır

PreservedNamedDestinationCount son adlandırılmış hedefleri, RenamedNamedDestinationCount seçilen ilke tarafından değiştirilen içe aktarılan anahtarları ve RemovedNamedDestinationCount çözümlenmemiş ya da atlanan adlandırılmış hedefleri sayar

RemappedPageLinkCount hem mevcut hem içe aktarılan bağlantılardaki son iç hedefleri sayar ve RemovedPageLinkCount kaldırılan iç hedefleri sayar; hem /Dest hem GoTo içeren bir bağlantı her hedef için bir kez katkıda bulunur

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, kendi sayfa içe aktarmalarını ve seyrek PDF revizyonlarını yöneten çağırıcılar için CapturePdfNavigation ve WritePdfNavigation sunar

TPdfNavigationNamedDestination.NameKey ham PDF anahtar baytlarını içerir; sayfa numaraları mutlak ve bir tabanlıdır, sıfır ise çözümlenmemiş bir hedefi belirtir

TPdfNavigationPageLink.PageNumber sahip sayfayı tanımlar; AnnotationIndex tüm özgün açıklamalar arasındaki sıfır tabanlı sıra, LinkIndex ise yalnızca bağlantı açıklamaları arasındaki sıfır tabanlı sıradır

Yazıcı, bağlantıları LinkIndex ile tanımlar, her açıklamayı son sayfa sahibiyle klonlar ve sağlanan sayfa hedeflerini ve kesin hedef son eklerini yazar; çağırıcılar, içe aktarmaları için gereken eksiksiz eşlemeyi sağlamalıdır

Yazıcı, birbirinden farklı kaynak ve çıkış akışları ile şifrelenmemiş, imzalanmamış bir belge ister; özdeş akışlarla yapılan bağımsız değişken reddi kaynağı korur, diğer başarısızlıklar ayrı çıkış akışını temizler

Bu akış işlevleri sayfa içe aktarmaz veya canlı bir TPdf belgesini değiştirmez; eksiksiz gezinme birleştirme için daha üst düzey işlemsel işlevi kullanın

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;