Üç kütüphane. Üç farklı görev. Yanlış olanı seçmek size haftalarca sürecek geçici çözümlere mal olur ve sadece birine ihtiyacınız varken üçünü birden seçmek bütçelemediğiniz bakım yüklerine yol açar. İşte her bir losLab PDF kütüphanesinin gerçekte ne yaptığının, nereye uyduğunun ve nerede kardeşlerine devrettiğinin doğrudan bir açıklaması
HotPDF: Delphi'de sıfırdan PDF yazmak
HotPDF, PDF belgeleri oluşturmak için yerel bir VCL bileşenidir. Modeli buyurgan ve sayfa merkezlidir: bir THotPDF örneği oluşturursunuz, belge özelliklerini ayarlarsınız, BeginDoc çağrısı yaparsınız, CurrentPage üzerine çizersiniz, gerektiği kadar sayfa eklersiniz ve EndDoc ile kapatırsınız. Sıra önemlidir çünkü BeginDoc, çalıştığı anda şifreleme sözlüğünü ve sıkıştırma ayarlarını işler; bu noktadan sonra atanan herhangi bir şey geriye dönük olarak uygulanmak yerine sessizce yok sayılır
Çizim yüzeyi, Delphi seviyesindeki tam PDF operatör setini kapsar: konumlandırılmış Unicode metinler için TextOut, TrueType yerleştirme ile SetFont, vektör ilkelleri (çizgiler, Bezier eğrileri, elipsler, dikdörtgenler), dosyadan veya bellekten resim yerleştirme ve barkod oluşturma. Koordinatlar sol üst köşeden nokta cinsindendir ve Y aşağı doğru artar; VCL canvas'ın çalışma biçimi budur ve bu, başlangıcı sol altta olan ham PDF içerik akışlarından gelen herkesi bir kez yanıltır. Yazı tipi durumu AddPage işleminden sağ çıkmaz, bu nedenle her sayfa sonundan sonra bir SetFont çağrısı gereklidir
AcroForm alanları birinci sınıf vatandaşlardır. Metin alanlarını, onay kutularını, radyo düğmelerini, açılan kutuları, liste kutularını ve basma düğmelerini her biri için tek bir çağrıyla doğrudan bir sayfa nesnesine ekleyebilirsiniz. HotPDF, mevcut bir PDF'yi LoadFromFile aracılığıyla yükleyebilir ve alan değerlerini doldurabilir veya okuyabilir; bu da onu iki ayrı iş akışında kullanışlı hale getirir: form oluşturmak ve bunların doldurulmasını otomatikleştirmek
Şifreleme de belge düzeyinde yönetilir. CryptKeyLength şemayı (40 bit RC4'ten AES-256'ya kadar) seçer, ActivateProtection onu etkinleştirir ve ProtectOptions ISO izin bayraklarını ayarlar. İki AES-256 revizyon modunun (R5 ve R6, UseAES256R6 ile denetlenir) var olma nedeni şudur: revizyon 5, parola kontrolü zayıf çıkan ve sonradan kullanımdan kaldırılan bir Adobe eklentisiyken, revizyon 6 ISO 32000-2'nin standardize ettiği biçimdir. Acrobat X ve sonrası ile günümüz okuyucularının çoğu R6 dosyalarını açar; bu yüzden makul varsayılan R6'dır. R5, yalnızca alıcı eski bir okuyucuya mahkûmsa önem taşır
HotPDF'teki dijital imza desteği PAdES temel profillerini kapsar, bu nedenle imzanın ETSI EN 319 142 gereksinimlerini karşılaması gereken iş akışları için uygundur. İhtiyacınız yalnızca çıktı üretmekse, HotPDF ilk ulaşacağınız kütüphanedir
PDFium Bileşeni: mevcut PDF'leri oluşturma, görüntüleme ve okuma
PDFium Bileşeni, Google'ın PDFium motorunu bir VCL bileşeni olarak sarar; bu da ona HotPDF'ten temelde farklı bir rol verir. HotPDF'in yazdığı yerde, PDFium Bileşeni okur ve oluşturur. Temel nesne, FileName özelliğini ayarlayarak ve ardından Active := True yaparak bir dosya açan bir belge yöneticisi olan TPdf nesnesidir. Yükleme hataları istisna olarak bildirilmez; Active basitçe False olarak kalır, bu nedenle atamadan sonra kontrol etmek isteğe bağlı değildir
Oluşturma (rendering), bir forma bıraktığınız ve PdfView.Pdf := Pdf yoluyla bir TPdf örneğine bağladığınız görsel bir bileşen olan TPdfView üzerinden çalışır. Yakınlaştırma ve sığdırma modları belge üzerinde değil, görünüm üzerinde yaşar. İnsanları yanıltan bir incelik: Pdf.PageNumber ve PdfView.PageNumber bağımsız özelliklerdir. Birini ayarlamak diğerini güncellemez ve görünüme dayalı çıkarma API'leri (kelime kutuları, okuma birimleri) belgenin değil, görünümün mevcut sayfasını kullanır
Metin çıkarma, PDFium Bileşeninin losLab serisinde doğrudan rakibinin olmadığı yerdir. ReadablePageContent yapılandırılmış metni okuma sırası farkındalığıyla döndürür, PageWordBoxes kelime düzeyinde sınırlayıcı dikdörtgenler verir ve DocumentReadingUnits tüm belgeyi dolaşır. Erişilebilirlik çalışması için IsTagged bir yapı ağacının mevcut olup olmadığını söyler ve ValidatePdfUa bir UA uyumluluk kontrolü çalıştırır. Bu API'ler, PDFium Bileşenini yeni bir PDF üretmek yerine mevcut bir PDF'nin içinde ne olduğunu anlaması gereken herhangi bir iş akışı için doğal bir seçim haline getirir
Form doldurma, altta yatan motorun sunduğu aynı AcroForm katmanı aracılığıyla PDFium tarafında da çalışır. Kaynak belge halihazırda mevcut olduğunda ve form alanlarını kendiniz oluşturmak yerine tamamlanmasını otomatikleştirdiğinizde uygundur
PDF Library for Delphi: manipülasyon, uyumluluk imzalama ve doğrudan dosya erişimi
PDF Library for Delphi karmaşıklık yelpazesinin diğer ucunda oturuyor. Aynı belge modelinin üstünde üç API katmanı sunar: Quick-PDF çağrı kuralıyla uyumlu, düz, tutamaç tabanlı bir cephe (TPDFlib), tam bir nesne ağacı katmanı (TPDFDocument) ve eksiksiz nesne grafiğini yüklemeden dosya baytları üzerinde doğrudan çalışan bir akış ayrıştırıcı (TSmartPDFReader / TSmartPDFWriter)
Akış katmanı, PDF Library for Delphi'ı büyük belgeler için doğru seçim yapan şeydir. TSmartPDFWriter, diski üzerindeki bir dosyaya, tüm çapraz başvuru tablosunu yeniden oluşturmadan artımlı bir güncelleme ekleyebilir; bu da hem verimli yeniden kaydetmenin hem de PAdES uzun vadeli doğrulama damgalarının temelini oluşturan mekanizmadır. İmzalanan karma (hash) değerinin belirli bir bayt aralığını kapsaması gerektiği ve imzanın belgeyi yeniden yazmadan uygulandığı uyumluluk derecesinde imzalama iş akışları için bu katman uygulanabilir tek yoldur
TPDFDocument düzeyinde belge manipülasyonu, Merge ile birleştirmeyi, bir aralık dizesiyle CopyPagesFromDoc aracılığıyla seçici sayfa kopyalamayı ve SetMinimumVersion ile LockSaveVersion aracılığıyla sürüm yönetimini içerir. Sürüm kilidi, çıktıyı kilitli sürümün üzerine çıkaracak bir özelliği kaydetmeye çalışırsanız 602 hatasını verir; bu, arşiv uyumluluğu için çıktının belirli bir PDF revizyonu içinde kalmasını garanti etmeniz gerektiğinde yararlıdır
PDF/A desteği (ISO 19005) PDF Library for Delphi'ın uyumluluk tezgahında oturur. Şifreleme ve PDF/A'nın spesifikasyon gereği birbirini dışladığını unutmayın: bir dosyada ikisine birden sahip olamazsınız. Şifrelenmiş bir dağıtım kopyasına ve bir PDF/A arşiv kopyasına ihtiyaç duyan iş akışları iki ayrı yapı (artifact) üretmelidir
Aralarında seçim yapmak
Tipik karar ağacı kısadır. Verilerden yeni bir belge oluşturuyorsanız, HotPDF kullanın. Bir Delphi VCL uygulamasında mevcut bir belgeyi oluşturuyor (render) veya metin çıkarıyorsanız, PDFium Bileşenini kullanın. Mevcut PDF'leri geniş ölçekte veya artımlı kaydetme semantiğiyle manipüle ediyor, birleştiriyor veya uyumluluk açısından imzalıyorsanız, PDF Library for Delphi kullanın. Birçok üretim sistemi üçünden ikisini kullanır: örneğin, çıktı üretmek için HotPDF ve arşivlemeden önce uzun vadeli bir doğrulama damgası uygulamak için PDF Library for Delphi veya HotPDF'nin ürettiğini alt akışa göndermeden önce önizlemek için PDFium Bileşeni
Üçü de Delphi ve C++Builder için yerel Pascal kaynağı olarak gelir. HotPDF ile PDF Library for Delphi'nin VCL ötesinde hiçbir çalışma zamanı bağımlılığı yoktur; PDFium Component ayrıca motorun oluşturma ve ayrıştırma işini yapan PDFium DLL'ini de taşır. Her kütüphanenin ürün sayfası tam API referansını ve güncel sürüm geçmişini barındırır
Bireysel kütüphaneler hakkında ayrıntılar: HotPDF Delphi Component, PDFium Component ve PDF Library for Delphi