Üç 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 alt köşeden noktalardadır ve Y yukarı doğru artar, bu 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 modu (R5 ve R6, UseAES256R6 tarafından kontrol edilir) vardır çünkü revizyon 6, revizyon 5'teki bilinen bir zayıflığı düzeltir ancak PDF 2.0 yetenekli bir görüntüleyici gerektirir; aralarında seçim yapmak bir kolaylık kararı değil, uyumluluk kararıdı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
PDFlibPas: manipülasyon, uyumluluk imzalama ve doğrudan dosya erişimi
PDFlibPas (sürüm 3.73.0) 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ı, PDFlibPas'ı 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) PDFlibPas'ı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, PDFlibPas 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 PDFlibPas veya HotPDF'nin ürettiğini alt akışa göndermeden önce önizlemek için PDFium Bileşeni
Her üçü de VCL'nin ötesinde herhangi bir çalışma zamanı bağımlılığı olmaksızın Delphi ve C++Builder için yerel Pascal kaynağı olarak gönderilir. PDFium Bileşeni ayrıca motorun oluşturma ve ayrıştırma işlerini kapsayan PDFium DLL'sini de içerir. Her kütüphanenin ürün sayfasında tam API referansı ve güncel sürüm geçmişi bulunur
Bireysel kütüphaneler hakkında ayrıntılar: HotPDF Component, PDFium Component ve PDFlibPas