Teknik Makale

Delphi'den Excel Çalışma Kitaplarını PDF/A'ya Aktarma

HotXLS, Delphi ve C++Builder'dan bir çalışma kitabını veya tek bir çalışma sayfasını, Excel olmadan ve bir PDF yazıcı sürücüsü olmadan doğrudan PDF/A'ya aktarır. TXLSPDFExport üzerinde UsePDFA'yı ayarlayıp bir profil seçin; dışa aktarılan dosya, çıktı amacı olarak gömülü bir sRGB ICC profili, XMP meta verisinde pdfaid tanımlama bloğunu ve uygunluk düzeyine uygun bir PDF sürüm başlığı taşır

Bu gereksinim genellikle bir geliştiriciden değil bir kayıt saklama politikasından gelir. Mali tablolar, laboratuvar sonuçları, düzenleyici başvurular ve bir kamu kurumunun on yıllarca saklaması gereken her şey, elli yıl sonra aynı şekilde render edilen bir biçimde saklanmalıdır ve PDF/A, ISO 19005, tam olarak bunu garanti etmek için vardır. Bir elektronik tablo canlı bir hesaplamadır; bir elektronik tablonun arşivlenmiş bir kopyası ise onun sabit bir görüntüsü olmalıdır

Bir PDF'i Arşivsel Bir PDF Yapan Nedir?

İşin çoğunu üç gereksinim yapar. Dosya kendi kendine yeterli olmalıdır, bu yüzden kullandığı her yazı tipi gömülüdür ve hiçbir dış kaynağa referans verilmez. Rengi belirsiz olmamalıdır; bu, dosyanın hazırlandığı renk alanını adlandıran bir çıktı amacı anlamına gelir. Ve kendini tanımlamalıdır; bölüm numarasını ve uygunluk düzeyini bildiren XMP meta verisi aracılığıyla

HotXLS üçünü de sağlar. sRGB profili, üç bileşenli ve alternatifi DeviceRGB olan bir akış nesnesi olarak gömülür; koşulu ve tanımlayıcısı ikisi de sRGB IEC61966-2.1'i adlandıran bir GTS_PDFA1 çıktı amacından referans verilir. XMP paketi, pdfaid bölüm ve uygunluk girdilerini taşır. Profil baytları, çalışma zamanında yüklenmek yerine kitaplığa derlenir, bu yüzden hiçbir dağıtım adımı ve eksik bir dosyanın arşivsel bir dışa aktarmayı sıradan birine dönüştürme ihtimali yoktur

Üç PDF/A arşivleme gereksiniminin ve HotXLS'nin Delphi'den yazdığı donanımın şeması: gömülü FontFile2 alt kümeleri, bir GTS_PDFA1 sRGB çıktı niyeti ve pdfaid XMP kimliği
Bir PDF/A dosyası kendi kendine yetmeli, renk açısından belirsizlikten arınmış ve kendi kendini tanımlamalıdır; HotXLS eşleşen düzeni UsePDFA özellik çiftinden yazar
uses
  lxHandleX, lxPDF;

var
  Book: TXLSXWorkbook;
  Exporter: TXLSPDFExport;
begin
  Book := TXLSXWorkbook.Create;
  Exporter := TXLSPDFExport.Create;
  try
    if Book.Open('quarterly-results.xlsx') <> 1 then
      Exit;

    Exporter.UsePDFA := True;
    Exporter.PDFAProfile := xlsPdfA2b;      // ISO 19005-2 B düzeyi
    Exporter.DocumentLanguage := 'en-GB';
    Exporter.TagMode := xlsPdfTagsAutomatic;

    if Exporter.SaveAsPDF(Book, 'quarterly-results-archive.pdf') <> 1 then
      raise Exception.Create('archival export failed');
  finally
    Exporter.Free;
    Book.Free;
  end;
end;

Hangi Profili Seçmelisiniz?

Profil numaralandırması PDF/A-1, PDF/A-2 ve PDF/A-3'ü kapsar; her biri erişilebilir bir varyant ve temel bir varyant halindedir. Pratik farklar, listenin ima ettiğinden daha dardır

Temel varyant olan B düzeyi, görsel görünümün yeniden üretilebilir olmasını garanti eder. A düzeyi; yapısal ve anlamsal gereksinimler ekler, başlıca etiketli bir yapı ağacı ve tanımlanmış bir okuma sırası, bu yüzden belge yardımcı teknoloji için erişilebilirdir. Bölüm 2, bazı bölüm 1 kısıtlamalarını gevşetir ve nesne akışlarına ve JPEG 2000'e izin verir; bölüm 3 ayrıca rastgele gömülü dosyalara izin verir; bu, elektronik faturalama biçimlerinin insan tarafından okunabilir sayfanın yanında makine tarafından okunabilir XML taşımak için kullandığı şeydir

Arşivlenmiş bir elektronik tablo için PDF/A-2b pragmatik varsayılandır: arşivler tarafından geniş çapta kabul edilir, A düzeyinin bir hücre ızgarasına dayattığı etiketleme disiplinini gerektirmez ve 200 sayfalık bir çalışma kitabı dışa aktarımının şişmesini önleyen kompakt yapılara izin verir. Arşivin kaynak verisini de bir ek olarak taşıması gerektiğinde bölüm 3'ü seçin; dışa aktarıcı bunu AddAttachment aracılığıyla destekler

Çoğu Kişiyi Yakalayan Yazı Tipi Kuralı

Bir PDF/A dosyasının çizdiği her glif gömülü bir yazı tipinden gelmelidir. Bu, aksi halde doğru olan bir dışa aktarmanın doğrulamada başarısız olmasının tek en yaygın nedenidir ve başarısızlık biçimi inceliklidir: dosya, onu oluşturan makinede doğru görünür, çünkü o makinede yazı tipi kurulu vardır

HotXLS, kullandığı yazı tipleri için TrueType alt kümelerini gömer, ama bir yazı tipinin çözümlenemediği durumlar için Base 14 yedek yolu vardır ve bir Base 14 yedeği tanımı gereği gömülü değildir. Arşivsel çıktı için yedek yolun hiçbir zaman alınmaması adına açık bir Unicode yazı tipi dosyası yapılandırın. Alt kümeleme ve yedek zincirinin mekaniği, TrueType yazı tipi alt kümeleme başlığında anlatılmıştır; pratik kural, dışa aktarmayı kurumsal yazı tiplerinizin kurulu olmadığı bir makinede test etmektir

HotXLS Delphi dışa aktarımlarında PDF/A yazı tipi kuralının şeması: çözümlenen yazı tipleri her yerde doğrulanan gömülü TrueType alt kümelerine dönüşür; taban-14 yedeği ise hiç gömülmez ve yazı tipi olmayan makinelerde başarısız olur
Çözülemeyen bir yazı tipi hiç gömülmeyen bir base-14 yazı tipine döner; bu yüzden açık bir Unicode yazı tipi dosyası yapılandırın ve şirket yazı tipleri olmayan bir makinede test edin

Dışa Aktarıcının Garanti Ettikleri ve Etmedikleri

Burada kesin olmak, kendinden emin görünmekten daha önemlidir. Dışa aktarma, PDF/A'nın tanımlama aygıtını — çıktı amacı, gömülü ICC profili, pdfaid meta verisi, uygun bir sürüm başlığı — üretir ve metni gömme yolu üzerinden yönlendirir. Kendi çıktısı üzerinde tam bir doğrulayıcı çalıştırmaz, bu yüzden saydamlık, belirli açıklama türleri ve isteğe bağlı içerik kuralları gibi spesifikasyondaki her yasağı uygulamaya zorlamaz

Bir elektronik tablo dışa aktarımı için bu yapılar nadiren görünür; pratik başarı oranının yüksek olmasının nedeni budur. Ama yüksek olmak garanti olmakla aynı şey değildir ve gerçek bir arşivsel boru hattı için doğru mimari, dışa aktarıp ardından bağımsız bir araçla doğrulamak, doğrulama başarısızlığını bir uyarı değil bir boru hattı hatası olarak ele almaktır. PDF belgeleri için karşılaştırılabilir bir sorumluluk paylaşımı, PDF/A preflight doğrulaması başlığında anlatılmıştır

Düzen, Arşivsel Sadakatin Bir Parçasıdır

Teknik olarak uyumlu ama görsel olarak okunamayan arşivlenmiş bir elektronik tablo, gerçek görevinde başarısız olmuştur. Sayfa düzeni ayarları, arşivsel bir dışa aktarımda günlük bir yazdırmadan daha fazla ağırlık taşır, çünkü kimse onu daha sonra yeniden akıtamayacaktır

Üç ayar kendini amorti eder. Genişliğe sığdırma, 14 sütun genişliğindeki bir tablonun her biri iki sütunluk yedi sayfa olarak gelmesi gibi klasik başarısızlığı önler. Tekrarlanan başlık satırları, her sayfayı tek başına okunabilir tutar. Ve açık yazdırma alanları, gerçek verinin sağında yaşayan çalışma notlarını dışlar. Yazdırma ve sayfa düzeni denetimlerinin tam kümesi, koruma, sayfa düzeni ve yazdırma başlığında ele alınmıştır

// Dışa aktarmadan önce uygulanan, arşive hazır sayfa düzeni
Sheet := Book.Sheets[0];
Sheet.PageLandscape := True;
Sheet.FitToWidth := 1;
Sheet.FitToHeight := 0;                  // ihtiyaç duyulduğu kadar sayfa yüksekliği
Sheet.SetPrintArea('A1:N480');
Sheet.PrintTitleRows := '$1:$3';

// Meta veri de arşive aittir
Book.Title := 'Quarterly results 2026 Q2';
Book.Author := 'Finance';

İlk Toplu İşlem Çalışmadan Önceki Kontrol Listesi

Dosyanın kendini tanımladığını doğrulayın: hiçbir şeyi açmayın, sadece PDF'i bir metin düzenleyicide açın ve pdfaid bölüm ve uygunluk girdilerini ve GTS_PDFA1 çıktı amacını arayın. Yazı tiplerini doğrulayın: belgedeki her yazı tipinin gömülü olarak raporlandığını kontrol edin. Görünümü doğrulayın: dışa aktarılan sayfaları basılı bir kopyayla karşılaştırın, çünkü metni sessizce dört punto boyutuna küçülten bir sayfaya sığdırma ayarı uygundur ama işe yaramaz

Ardından temsili bir örnek üzerinde bağımsız bir doğrulayıcı çalıştırın ve raporu saklayın. Arşivler giderek yalnızca dosyayı değil doğrulama kanıtını da istiyor ve onu dışa aktarma zamanında üretmek, yıllar sonra yeniden inşa etmekten çok daha ucuzdur. Günlük, arşivsel olmayan dışa aktarma yolu ve render seçenekleri için bkz. çalışma sayfası PDF dışa aktarımı

Arşivsel dışa aktarma, sayfa düzeni ve arkalarındaki render motoru, Delphi ve C++Builder için tek bir kitaplıkta gelir; eksiksiz özellik listesi HotXLS Delphi elektronik tablo bileşeni sayfasında bulunur

HotXLS Delphi PDF/A çıktısı için dışa aktar-sonra-doğrula mimarisinin şeması: dışa aktarıcı kimlik donanımını yazar ve bağımsız bir doğrulayıcı, dosyayı arşive yönlendirir ya da bir hat hatası yükseltir
Dışa aktarıcı kimlik düzenini kurarken bağımsız bir doğrulayıcı uygunluğu kanıtlar; başarısız bir doğrulama, günlüğe uyarı düşmek yerine toplu işi durdurur