PDFium Component Docs

Catatan Rilis PDFiumPas

Riwayat versi untuk fitur yang terlihat oleh pengguna PDFiumPas, perbaikan, peningkatan penampil, pembuatan dokumen, output PDF/A, rendering, dan pembaruan dokumentasi

Rilis terbaru

Version 2.57.0

Ditambahkan (Added)

Diubah (Changed)

Version 2.56.2

Diubah (Changed)

Version 2.56.1

Diubah (Changed)

Version 2.56.0

Ditambahkan (Added)

Diubah (Changed)

Version 2.55.0

Ditambahkan (Added)

Diubah (Changed)

Version 2.54.0

Ditambahkan (Added)

Diubah (Changed)

Version 2.53.1

Diperbaiki (Fixed)

Version 2.53.0

Ditambahkan (Added)

Version 2.52.0

Ditambahkan (Added)

Diubah (Changed)

Version 2.51.0

Ditambahkan (Added)

Diubah (Changed)

Version 2.50.0

Ditambahkan (Added)

Diubah (Changed)

Version 2.49.1

Ditambahkan (Added)

Diperbaiki (Fixed)

Version 2.49.0

Ditambahkan (Added)

Diubah (Changed)

Diperbaiki (Fixed)

Version 2.48.0

Ditambahkan (Added)

Diubah (Changed)

Diperbaiki (Fixed)

Version 2.47.0

Ditambahkan (Added)

Diubah (Changed)

Diperbaiki (Fixed)

Version 2.46.0

Ditambahkan (Added)

Diubah (Changed)

Diperbaiki (Fixed)

Version 2.45.0

Ditambahkan (Added)

Diubah (Changed)

Diperbaiki (Fixed)

Version 2.44.0

Ditambahkan (Added)

Diubah (Changed)

Diperbaiki (Fixed)

Version 2.43.0

Ditambahkan (Added)

Diubah (Changed)

Diperbaiki (Fixed)

Version 2.42.0

Ditambahkan (Added)

Diubah (Changed)

Diperbaiki (Fixed)

Version 2.41.0

Diubah (Changed)

Diperbaiki (Fixed)

Version 2.40.0

Diubah (Changed)

Diperbaiki (Fixed)

Version 2.39.1

Diperbaiki (Fixed)

Version 2.39.0

Diubah (Changed)

Diperbaiki (Fixed)

Version 2.38.0

Diubah (Changed)

Diperbaiki (Fixed)

Version 2.37.0

Diubah (Changed)

Diperbaiki (Fixed)

Catatan (Notes)

Version 2.36.0

Diubah (Changed)

Diperbaiki (Fixed)

Version 2.35.0

Diubah (Changed)

Version 2.34.0

Ditambahkan (Added)

Version 2.33.0

Ditambahkan (Added)

Version 2.32.0

Ditambahkan (Added)

Version 2.31.0

Ditambahkan (Added)

Version 2.30.0

Ditambahkan (Added)

Diperbaiki (Fixed)

Version 2.29.0

Ditambahkan (Added)

Diperbaiki (Fixed)

Version 2.28.0

Ditambahkan (Added)

Diubah (Changed)

Diperbaiki (Fixed)

Version 2.27.0

Diubah (Changed)

Diperbaiki (Fixed)

Version 2.26.0

Diubah (Changed)

Diperbaiki (Fixed)

Version 2.25.0

Diubah (Changed)

Diperbaiki (Fixed)

Version 2.24.0

Ditambahkan (Added)

Diperbaiki (Fixed)

Version 2.23.0

Diperbaiki (Fixed)

Version 2.22.0

Diubah (Changed)

Diperbaiki (Fixed)

Diperbaiki (Fixed)

Version 2.21.12

Diperbaiki (Fixed)

Version 2.21.11

Diperbaiki (Fixed)

Version 2.21.10

Diperbaiki (Fixed)

Version 2.21.9

Diperbaiki (Fixed)

Version 2.21.8

Diperbaiki (Fixed)

Version 2.21.7

Diperbaiki (Fixed)

Version 2.21.6

Diperbaiki (Fixed)

Version 2.21.5

Diperbaiki (Fixed)

Version 2.21.4

Diperbaiki (Fixed)

Version 2.21.3

Diperbaiki (Fixed)

Version 2.21.2

Diperbaiki (Fixed)

Version 2.21.1

Diperbaiki (Fixed)

Version 2.21.0

Diubah (Changed)

Diperbaiki (Fixed)

Version 2.20.0

Diubah (Changed)

Version 2.19.1

Diperbaiki (Fixed)

Version 2.19.0

Diubah (Changed)

Diperbaiki (Fixed)

Version 2.18.3

Diperbaiki (Fixed)

Version 2.18.2

Diperbaiki (Fixed)

Version 2.18.1

Diperbaiki (Fixed)

Version 2.18.0

Ditambahkan (Added)

Diubah (Changed)

Diperbaiki (Fixed)

Version 2.17.0

Ditambahkan (Added)

Diubah (Changed)

Version 2.16.10

Diperbaiki (Fixed)

Version 2.16.9

Diperbaiki (Fixed)

Version 2.16.8

Diperbaiki (Fixed)

Version 2.16.7

Diperbaiki (Fixed)

Version 2.16.6

Diperbaiki (Fixed)

Version 2.16.5

Diperbaiki (Fixed)

Version 2.16.4

Diperbaiki (Fixed)

Version 2.16.3

Diperbaiki (Fixed)

Version 2.16.2

Diperbaiki (Fixed)

Version 2.16.1

Diperbaiki (Fixed)

Version 2.16.0

Ditambahkan (Added)

Diperbaiki (Fixed)

Version 2.15.1

Diperbaiki (Fixed)

Version 2.15.0

Diperbaiki (Fixed)

Version 2.14.4

Diperbaiki (Fixed)

Version 2.14.3

Diperbaiki (Fixed)

Version 2.14.2

Diperbaiki (Fixed)

Version 2.14.1

Diperbaiki (Fixed)

Version 2.14.0

Ditambahkan (Added)

Version 2.13.6

Diperbaiki (Fixed)

Version 2.13.5

Diperbaiki (Fixed)

Version 2.13.4

Diperbaiki (Fixed)

Version 2.13.3

Diperbaiki (Fixed)

Version 2.13.2

Ditambahkan (Added)

Diubah (Changed)

Version 2.13.1

Ditambahkan (Added)

Diubah (Changed)

Diperbaiki (Fixed)

Version 2.13.0

Ditambahkan (Added)

Diubah (Changed)

Version 2.12.2

Diperbaiki (Fixed)

Version 2.12.1

Diperbaiki (Fixed)

Version 2.12.0

Ditambahkan (Added)

Diubah (Changed)

Diperbaiki (Fixed)

Version 2.11.0

Ditambahkan (Added)

Diubah (Changed)

  • TPdf.SetActive kini menelan setiap pengecualian selama pemuatan (sebelumnya hanya EPdfError), sehingga kesalahan stream atau pelanggaran akses selama pengaturan formulir/halaman meninggalkan Active=False alih-alih komponen yang sebagian dimuat dengan status tidak tentu
  • Encoding karakter yang konsisten untuk argumen kunci metadata PDFium: TPdf.GetMetaText kini menggunakan pemisahan AnsiString FPC / UTF8Encode Delphi yang sama seperti GetViewerPreference dan jalur pemuatan, alih-alih cast AnsiString(Tag) mentah
  • Mendeduplikasi helper BytesToAnsi, AnsiToBytes, WriteBytes, dan WriteStr: FPdfCompress kini mengimpornya dari FPdfPdfCommon (alias WriteBytesToStream/WriteAnsiToStream-nya sudah dihentikan) dan overload tiga-argumen BytesToAnsi yang redundan di FPdfPdfa dihapus. FPdfAsn1 mempertahankan salinan lokalnya berdasarkan desain untuk menjaga lapisan kriptografi bebas dari unit lapisan kepatuhan

Diperbaiki (Fixed)

  • Kebocoran resource dalam TPdf.LoadDocument (berkas, memori, TBytes, TMemoryStream, stream kustom) dan TPdf.CreateDocument: jika InitializeFormFill atau ReloadPage memunculkan pengecualian setelah FPDF_LoadDocument/FPDF_CreateNewDocument berhasil, handle FPDF_DOCUMENT asli bocor karena FActive masih False pada saat itu. Setiap jalur kini membungkus pengaturan pasca-pemuatan dalam try/except dan menutup dokumen saat gagal, membiarkan komponen tidak aktif dengan bersih
  • Diagnostik pemuatan DLL PDFium yang lebih ramah: CheckLoadLibrary mendeteksi ERROR_BAD_EXE_FORMAT (193) dan melaporkan ketidakcocokan arsitektur 32/64-bit yang menunjuk ke build DLLs/Win32 atau DLLs/Win64 yang cocok, alih-alih hanya meneruskan error OS generik. CheckGetProcAddress kini menyatakan bahwa pdfium.dll yang di-deploy lebih lama dari binding ketika ekspor yang diperlukan hilang, daripada teks OS "procedure not found" yang polos

Version 2.10.1

Diperbaiki (Fixed)

  • Standardisasi PAdES SignerInfo sid: pengidentifikasi penanda tangan kini menggunakan bentuk issuerAndSerialNumber RFC 5652 §5.3 (issuer Name + serialNumber, keduanya diekstrak verbatim dari DER sertifikat penanda tangan), menggantikan placeholder subjectKeyIdentifier + SHA-256 sertifikat-penuh non-standar sebelumnya yang ditolak oleh Adobe Acrobat dan validator lain yang sesuai. Sebuah walker TbsCertificate DER baru (ExtractIssuerAndSerial) membaca issuer SEQUENCE dan serial INTEGER sebagai byte TLV mentah — serial umumnya melampaui rentang Int64, sehingga TLV mentah wajib digunakan. Bentuk subjectKeyIdentifier tetap tersedia hanya sebagai fallback ketika parsing DER sertifikat gagal

Diubah (Changed)

  • TCmsSignerId.SerialNumber: Int64 diganti dengan SerialDer: TBytes (TLV serialNumber mentah). Pembangun CMS menyematkan TLV yang dipotong verbatim ke dalam IssuerAndSerialNumber, menghindari luapan Int64 pada serial CA 20-byte (batas atas RFC 5280 §4.1.2.2)

Version 2.10.0

Ditambahkan (Added)

  • Validasi jangka panjang PAdES B-LT: ketika TPadesSignOptions.Level >= plB_LT, SignPadesBytes menambahkan pembaruan inkremental yang membawa kamus /DSS berisi sertifikat penanda tangan dan rantai intermediate penuh (root self-signed dikecualikan per RFC 5652 §10.2.3), plus penanda /Extensions /ESIC Level 1 (EN 319 142-1 §5.4.2)
  • Stempel waktu arsip PAdES B-LTA: ketika Level >= plB_LTA dan TsaUrl disetel, kamus tanda tangan Document Time-stamp (/SubFilter /ETSI.RFC3161) ditambahkan yang /ByteRange-nya mencakup seluruh berkas; penanda ESIC dipromosikan ke Level 2. Ini melengkapi empat level baseline PAdES (B-B, B-T, B-LT, B-LTA)
  • Pengumpulan rantai sertifikat: ResolveWinSigner kini memanggil CertGetCertificateChain dan mengisi TPadesResolvedSigner.ChainCertDer dengan sertifikat CA intermediate, sehingga /DSS /Certs B-LT membawa setiap sertifikat yang diperlukan untuk memvalidasi tanda tangan tanpa pencarian eksternal. CertFreeCertificateContext kini diikat, menutup kebocoran satu-konteks-per-tanda tangan yang dicatat di v2.8.0
  • Alur kerja integrasi PDF/A: TPdf.SignPadesWithPdfA mengonversi dokumen ke PDF/A terlebih dahulu (level tertinggi yang dipancarkan pustaka saat ini) lalu menerapkan tanda tangan PAdES yang diminta — pola kontainer arsip jangka panjang yang direkomendasikan EN 319 142-1 Lampiran A.7

Version 2.9.0

Ditambahkan (Added)

  • Stempel waktu terpercaya PAdES B-T: TPadesSignOptions mendapatkan field Level, TsaUrl, dan Nonce. Ketika Level >= plB_T dan TsaUrl disetel, SignPadesBytes mengekstrak nilai tanda tangan dari CMS yang dibangun, meminta stempel waktu RFC 3161 atasnya, dan menyematkan TimeStampToken yang dikembalikan sebagai atribut unsigned SignerInfo signature-time-stamp — langkah waktu terpercaya B-T (EN 319 142-1 §6.3 req o)
  • FPdfTsa: klien RFC 3161 lintas platform — BuildTimeStampReq (versi 1, messageImprint SHA-256 atas nilai tanda tangan, nonce, certReq=true), ParseTimeStampResp (menerima PKIStatus 0/1, menolak 2+, mengekstrak TimeStampToken ContentInfo verbatim), dan RequestTimestamp (build+POST+parse sekali jalan). PadesTsaAvailable mengatur fitur pada platform tanpa backend HTTP
  • FPdfTsaWin: backend WinHttp Windows, diikat secara dinamis dari winhttp.dll (nol dependensi waktu kompilasi baru; HTTPS dinegosiasikan oleh penyimpanan sertifikat Windows). Mencerminkan pola dynamic-binding FPdfCryptoWin
  • FPdfCms: ExtractSignatureValue menelusuri CMS yang dibangun untuk memulihkan oktet tanda tangan mentah (input hash TSA), dan AddSignatureTimestampToCms membangun ulang ContentInfo dengan unsignedAttrs [1] (0xA1) baru yang membawa atribut stempel waktu. Validator tahap-1 mengenali hasilnya sebagai tanda tangan B-T

Version 2.8.0

Ditambahkan (Added)

  • Tumpukan signing PAdES B-B: empat blok bangunan pure-Pascal/lintas platform baru (FPdfSha256, FPdfAsn1, FPdfCms, FPdfCrypto) plus backend CNG Windows (FPdfCryptoWin) memungkinkan TPdf.SignPades / SignPadesToStream menghasilkan tanda tangan PAdES B-B secara menyeluruh. Sertifikat penanda tangan diselesaikan berdasarkan sidik jari SHA-1 dari penyimpanan Current User “MY”; RSA-PSS (direkomendasikan), RSA PKCS#1 v1.5, dan ECDSA semuanya didukung melalui NCryptSignHash
  • FPdfSha256: SHA-256 FIPS 180-4 mandiri (Init/Update/Final + helper sekali jalan). FPC 3.2.2 tidak menyertakan unit SHA-2, sehingga pustaka memiliki satu unit sendiri untuk menjaga setiap jalur kode CMS pada satu tipe TSHA256Digest tunggal tanpa percabangan RTL
  • FPdfAsn1: encoder DER (TDerWriter) dan pembaca (TDerReader) yang mencakup SEQUENCE/SET/OID/INTEGER/OCTET STRING/UTCTime/GeneralizedTime/context-specific tags, dengan pengodean definite-length dan penanganan IMPLICIT-tag yang dibutuhkan CMS
  • FPdfCms: pembangun CAdES SignedData (BuildSignedData) yang memancarkan atribut bertanda tangan content-type, message-digest, dan signing-certificate-v2 yang diwajibkan baseline PAdES, dengan signing-time dan commitment-type-indication opsional. Digest signedAttrs dihitung atas bentuk SET-tagged (0x31) dan dipancarkan ulang dengan tag IMPLICIT [0] (0xA0) per RFC 5652 §5.4
  • FPdfCrypto + FPdfCryptoWin: abstraksi backend kriptografi dengan PadesCryptoAvailable / ResolvePadesSigner, dan implementasi Windows yang mengikat crypt32.dll / ncrypt.dll secara dinamis (tidak ada dependensi DLL waktu kompilasi baru). Tanda tangan ECDSA dikodekan ulang dari bentuk IEEE P1363 r¦s Windows ke bentuk DER ECDSA-Sig-Value yang dibutuhkan CMS
  • SignPadesBytes: injeksi tanda tangan tingkat byte — menyisihkan slot hex /Contents lebar tetap, menghitung /ByteRange yang menutupi, mencerna dokumen, membangun dan menyematkan CMS, dan menambahkan pembaruan inkremental. Validator (v2.7.0) mengenali keluaran sebagai tanda tangan PAdES B-B

Version 2.7.0

Ditambahkan (Added)

  • Validator struktural PAdES (ETSI EN 319 142-1 V1.2.1): unit FPdfPades baru dan metode TPdf.ValidatePades memeriksa kamus nilai tanda tangan yang dapat dijangkau dari /ByteRange, menelusuri SignedData CMS di dalam /Contents cukup jauh untuk mengonfirmasi bentuk detached CAdES, dan mendeteksi empat level baseline (B-B, B-T, B-LT, B-LTA) plus kamus Document Time-stamp (/SubFilter /ETSI.RFC3161)
  • Set masalah tingkat klausa PAdES: 26 enum ppei* mencakup penerimaan /SubFilter (adbe.pkcs7.sha1 dan adbe.x509.rsa_sha1 ditandai sebagai terlarang), cakupan berkas /ByteRange, larangan /Cert, bentuk CMS SignedData (penanda tangan tunggal, eContent detached, rentang versi), atribut bertanda tangan yang diwajibkan (content-type, message-digest, signing-certificate/v2), digest terlarang (MD5, SHA-1), pengecualian mutual /Reason vs commitment-type-indication (req d), persyaratan waktu terpercaya B-T, /DSS + /Certs + penanda ESIC Level 1 B-LT, dan Document Time-stamp + penanda ESIC Level 2 B-LTA
  • Injektor DSS: TPdf.SaveAsPadesDss / SaveAsPadesDssToStream menambahkan pembaruan inkremental yang membawa kamus /DSS (dengan larik stream /Certs, /OCSPs, /CRLs) dan penanda /Extensions /ESIC (Level 1 atau 2) ke salinan dokumen, mempertahankan byte asli — langkah penyematan material validasi B-LT/B-LTA (klausa 5.4.2)
  • Tahap lintas platform, tanpa dependensi: validator dan injektor adalah pure-Pascal dan bekerja pada setiap IDE yang didukung (Delphi, Lazarus, FPC, C++Builder); tidak diperlukan backend kriptografi untuk rilis ini, dan tidak ada dependensi DLL baru yang diperkenalkan

Version 2.6.0

Diubah (Changed)

  • Deduplikasi lintas standar: tujuh lagi fungsi helper duplikat (PdfEnclosingObjNum, PdfDictRefNum, PdfExpandObjectStreams, PdfTextStr, ExtractLiteralString, ExtractXmpAttr) telah dihapus dari unit standar individual dan dikonsolidasikan ke dalam FPdfPdfCommon, mengurangi sekitar ~300 baris beban pemeliharaan salin-tempel
  • Kualitas PreflightReport: masalah kelas konten PDF/X dan PDF/E yang sebelumnya jatuh ke kategori “missing marker” generik kini membawa kategori Content/Metadata/Security yang akurat dan rekomendasi spesifik per klausa (~15 enum di kedua standar)
  • Cakupan pengujian PDF/E dan PDF/R: enam lagi enum dengan cakupan nol mendapatkan pengujian positif (pveiLzwForbidden, pveiJavaScriptForbidden, pveiFormFieldsForbidden, pveiEmbeddedFilesForbidden, pvriBadHeader, pvriProhibitedInfoEntry)
  • Perbaikan build Lazarus: Tests.PdfVT (unit DUnitX khusus Delphi yang ditambahkan di v2.5.x) kini dikecualikan dari proyek Lazarus untuk memulihkan kompilasi

Version 2.5.3

Ditambahkan (Added)

  • Kelengkapan OutputIntent (PDF/X-4 §6.2.4): pvviOutputIntentScheme menandai OutputIntent yang /S-nya bukan /GTS_PDFX; pvviOutputIntentMissingIdentifier menandai /OutputConditionIdentifier yang hilang
  • Pengecualian Reference XObject PDF/VT-2 (§6.2.2): pvviReferenceXObjectForbidden tidak lagi memicu untuk berkas PDF/VT-2, yang secara legal dapat menggunakan Reference XObjects pada basis X-5g/5pg
  • Validasi karakter batas MIME (RFC 2046 §5.1.1): vtmviBoundaryInvalidChar menandai batas yang karakternya berada di luar himpunan bchars atau yang panjangnya melebihi 70

Diperbaiki (Fixed)

  • InjectPdfVTMarkers kini menulis Info /CreationDate dan /ModDate dari opsi simpan, sehingga berkas yang dihasilkan round-trip ValidatePdfVTCompliance tanpa pvviInfoModDateMismatch palsu (injektor sebelumnya menulis ulang tanggal XMP tetapi membiarkan tanggal kamus Info kedaluwarsa)

Version 2.5.2

Ditambahkan (Added)

  • Konsistensi Info /ModDate (§6.3 NOTE 2, basis PDF/X-4): pvviInfoModDateMismatch menandai /ModDate kamus Info yang, setelah normalisasi tanggal-PDF ke tanggal-XMP, tidak sama dengan xmp:ModifyDate
  • Kepatuhan chunk inline PDF/VT-2s (Lampiran A.2): validator MIME kini menjalankan ValidatePdfVTCompliance pada setiap bagian application/pdf inline dan menandai isi non-PDF/VT melalui vtmviInlinePdfNotPdfVT

Version 2.5.1

Ditambahkan (Added)

  • Validasi chunking DParts (ISO 16612-2 §6.5 Table 4): pvviDPartsBadChunking menandai larik /DParts yang sub-larik non-akhirnya tidak memiliki tepat 8192 entri atau yang sub-larik terakhirnya berada di luar 1..8192
  • Konsistensi RecordLevel lintas stream (Lampiran A.2): validator MIME PDF/VT-2s kini mengekstrak /RecordLevel setiap PDF inline dan menandai ketidaksesuaian melalui vtmviRecordLevelMismatch, melengkapi pemeriksaan NodeNameList yang ada
  • Petunjuk objek grafis berulang (§6.7): pvviGtsScopeInvalidValue menandai /GTS_Scope di luar {SingleUse, Record, File, Stream, Global, Unknown}; pvviGtsScopeRecordWithoutRecordLevel menandai /Record tanpa /RecordLevel; pvviGtsXidNotUuid menandai /GTS_XID yang bukan uuid: URI RFC 4122; pvviGtsEnvMissing menandai /GTS_Env yang hilang ketika /GTS_Scope adalah Stream atau Global (§6.7.4)
  • Deteksi forward-reference MIME (Lampiran A.2): vtmviForwardReference menandai PDF inline yang mengutip nama berkas (melalui /EF /F) yang tidak diperkenalkan oleh bagian lampiran sebelumnya di dalam stream

Diperbaiki (Fixed)

  • ExtractNodeNameListFromPdf dan ExtractRecordLevelFromPdf di FPdfPdfvtMime menyelesaikan off-by-one berulang di mana offset 1-based yang dikembalikan oleh AnsiFindKey diperlakukan sebagai offset byte absolut ke dalam PDF yang diperluas

Version 2.5.0

Ditambahkan (Added)

  • Document Part Metadata PDF/VT (DPM, ISO 16612-2 §6.6): TPdfVTSaveOptions mendapatkan DpmEntries dan DpmTarget sehingga penulis dapat melampirkan kamus /DPM ke node DPart yang disintesis, dengan validasi nama-kunci terhadap aturan prefiks kelas-kedua Lampiran E dan aturan §6.6 NMTOKEN / keunikan / bentuk GTS_Managed di sisi validator
  • Pertukaran streaming PDF/VT-2s (Lampiran A): unit FPdfPdfvtMime baru menyediakan BuildPdfVT2sStream dan ValidatePdfVT2sStream untuk amplop MIME multipart/mixed yang membawa chunk PDF/VT inline plus profil ICC lampiran, dengan aturan urutan header X-PDFVT-Stream-version: 1 dan pemeriksaan konsistensi NodeNameList lintas stream
  • TPdf.ValidatePdfVT kini melakukan hitungan JavaScript-action yang otoritatif melalui FPDFDoc_GetJavaScriptActionCount, melengkapi pemindaian nama /JavaScript tingkat byte

Diperbaiki (Fixed)

  • Kebenaran Trapped PDF/VT pada basis PDF/X-4: nilai enum ptvUnknown dihapus (PDF/X-4 melarang /Unknown), ptvUnspecified dinormalisasi menjadi /False pada saat penulisan ( /Trapped yang hilang juga dilarang), dan masalah pvviTrappedInvalid baru menandai nilai yang tidak ada atau Unknown
  • ValidatePdfVTCompliance kini memperluas object stream (PdfExpandObjectStreams) sebelum memindai, sehingga kamus catalog, OutputIntent, atau Metadata yang disimpan di dalam ObjStm terkompresi (PDF 1.5+, khas dari produsen PDF/X-4) dapat dijangkau oleh pencarian tingkat byte

Diubah (Changed)

  • PDF/VT-1 kini mewarisi seluruh larangan konten PDF/X-4: pvviAcroFormForbidden (/AcroForm atau /XFA), pvviAdditionalActionsForbidden (catalog /AA), pvviMissingTrimBox, dan pvviReferenceXObjectForbidden (Reference XObject, hanya X-5g/5pg)
  • Deduplikasi lintas standar: BuildDictObj, IccComponentCount, profil ICC sRGB bawaan (GetSrgbIccProfile), PdfTextStr, PdfEnclosingObjNum, PdfDictRefNum, dan PdfExpandObjectStreams dipromosikan dari salinan lokal tertriplikasi di FPdfPdfa / FPdfPdfx / FPdfPdfvt ke satu rumah kanonik di FPdfPdfCommon; literal ICC 3144-byte kini ada persis sekali di basis kode

Version 2.4.0

Diperbaiki (Fixed)

  • InjectPdfUaMarkers tidak lagi menghilangkan referensi /Info trailer pada basis cross-reference-stream: SourceTrailerInfoRef lokal (yang tidak memiliki xref-stream fallback) telah digantikan oleh PdfSourceTrailerInfoRef bersama (dipromosikan dari salinan PDF/A yang memiliki fallback sejak v2.0.0)
  • PdfReadStreamBytes bersama sekarang menangani referensi /Length N G R tidak langsung (di-porting dari salinan lokal PDF/A), sehingga validator PDF/VT, PDF/R, dan PDF/E tidak lagi salah membaca atau melewatkan aliran metadata XMP yang dihasilkan oleh alat yang menggunakan Length tidak langsung (Acrobat, Ghostscript)

Diubah (Changed)

  • Deduplikasi lintas standar: salinan PdfReadTrailer lokal di FPdfPdfa and FPdfPdfx, salinan SourceTrailerInfoRef lokal di FPdfPdfa and FPdfPdfua, serta PdfReadStreamBytes lokal di FPdfPdfa semuanya telah dihapus — versi FPdfPdfCommon bersama sekarang berlaku di mana-mana; ini menghapus sekitar 330 baris kode duplikat dan menghilangkan beban pemeliharaan untuk menjaga sinkronisasi salinan
  • Penyelesaian utang pengujian PDF/X: tujuh enum content-class yang sebelumnya memiliki cakupan nol mendapatkan pengujian positif (pvxiLzwForbidden, pvxiJavaScriptForbidden, pvxiFormFieldsForbidden, pvxiAdditionalActions, pvxiEmbeddedFilesForbidden, pvxiMissingTrimBox, pvxiTrappedNotSet)

Version 2.3.0

Diubah (Changed)

  • Penyelesaian utang pengujian PDF/A berlanjut: tiga lagi enum dengan cakupan nol mendapatkan pengujian positif; pvaiForbiddenRenderingIntent (§6.2.9) menandai nama rendering-intent non-standar dalam content stream; pvaiJpeg2000Violation (§6.2.2) menandai gambar JPXDecode dengan /NumComponents di luar {1,3,4} pada Part 2; pvaiInlineImageLzwForbidden (§6.1.10) menandai gambar inline yang menggunakan filter LZW pada Part 2

Version 2.2.0

Diubah

  • Uji regresi cross-reference-stream: Validate_XrefStreamTrailer_DetectsConformance yang ada kini juga memverifikasi bahwa referensi /Metadata katalog diselesaikan dan XMP pdfaid:part dibaca pada basis xref-stream (tidak hanya /Root + /ID). Pengujian InjectPdfA_XrefStreamBase_RoundTrips baru mengamankan jalur xref-stream injektor yang ditambahkan pada v2.0.0. Dua pengujian lintas standar (PdfE_XrefStreamBase_NotRejectedAsUnparsable, PdfR_XrefStreamBase_NotRejectedAsUnparsable) memverifikasi validator PDF/E and PDF/R tidak lagi menolak PDF xref-stream sebagai tidak dapat diurai
  • Penyelesaian utang pengujian PDF/A: Validate_MinimalPdf_FlagsRequiredMarkers menegaskan bahwa PDF minimal kosong memicu pvaiMissingPdfAIdentifier, pvaiMissingOutputIntent, pvaiMissingIccProfile, pvaiMissingXmpMetadata, dan pvaiMissingXmpDates — menutup celah simetri dengan validator PDF/E dan PDF/X yang sudah memiliki pengujian setara. Dua enum cakupan nol lainnya mendapatkan pengujian positif: pvaiUnembeddedFont dan pvaiSubsetMissingCidSet

Version 2.1.0

Diperbaiki

  • PDF/E secara tidak sengaja terlewatkan dari perbaikan cross-reference-stream v2.0.0: baik InjectPdfEMarkers maupun ValidatePdfECompliance masih memanggil PdfReadTrailer tanpa AcceptXrefStream, sehingga injektor PDF/E gagal secara senyap pada output PDF 1.5+ (bawaan SaveAsCopy pdfium). Kedua lokasi panggilan kini meneruskan True
  • Fallback cross-reference-stream PdfReadTrailer bersama kini membawa pelindung /Type /XRef yang sudah dimiliki oleh salinan lokal PDF/A dan PDF/X, sehingga offset startxref yang rusak yang mengarah ke kamus yang tidak terkait akan gagal dengan bersih alih-alih salah diurai sebagai trailer
  • Penyelesai referensi tidak langsung /Lang di ValidatePdfUaCompliance (v2.0.0) tidak dapat dijangkau: PdfFindObjDict hanya menemukan kamus <<, tetapi objek string /Lang adalah (...) atau <...> tanpa kamus. Digantikan dengan pemindaian langsung object-body yang menemukan token string

Diubah

  • Tujuh duplikat helper bayangan yang mati (dead-shadow) (PdfStructureBytes, PdfHasName, PdfCountName, BuildStreamObj) yang merupakan salinan byte-identik dari versi FPdfPdfCommon bersama telah dihapus dari FPdfPdfa dan FPdfPdfua — versi bersama kini berlaku di mana saja melalui uses

Version 2.0.0

Diperbaiki

  • Kegagalan senyap lintas standar: helper PdfReadTrailer bersama (digunakan oleh injektor dan validator penanda PDF/UA, PDF/X, PDF/VT, dan PDF/R) kini menerima parameter AcceptXrefStream dan melakukan fallback ke kamus objek cross-reference-stream ketika tidak ada kata kunci trailer yang ada (PDF 1.5+). Sebelumnya, output SaveAsCopy pdfium (yang menggunakan cross-reference stream) menyebabkan setiap injektor penanda gagal secara senyap — byte sumber disalin tanpa perubahan dan panggilan tetap mengembalikan sukses. Validator PDF/R-1.0 (yang basis PDF 2.0-nya selalu berupa cross-reference stream) secara efektif tidak melakukan apa-apa. Implementasi matang dari validator PDF/A di-porting ke helper bersama sehingga setiap standar mendapat manfaat
  • Pemindaian kamus trailer di InjectPdfUaMarkers dan InjectPdfAMarkers kini menggunakan PdfDictEnd yang peka kedalaman alih-alih pencarian >> biasa, sehingga trailer yang berisi kamus bersarang (misalnya /Encrypt << ... >>) tidak lagi terpotong sebelum entri /Info akhir

Diubah

  • TPdf.ValidatePdfUa kini menekan pvuaiFontNotEmbedded tingkat byte yang kasar ketika pvuaiPdfiumFontNotEmbedded model-objek Pdfium yang presisi telah dipicu, sehingga laporan preflight tidak lagi membawa dua baris yang hampir duplikat “embed your fonts” untuk cacat yang sama
  • pvuaiLangInvalidFormat (§7.2) kini menyelesaikan referensi tidak langsung /Lang (N 0 R) ke objek string-nya dan memverifikasi kontennya, sehingga tag bahasa yang direferensikan secara tidak langsung tidak lagi menjadi titik buta

Version 1.99.0

Diperbaiki

  • pvuaiLangInvalidFormat (§7.2) tidak lagi meloloskan string /Lang berkode heksadesimal begitu saja: pasangan UTF-16BE (dengan BOM FE FF) dan string heksadesimal ASCII murni kini didekodekan dan dijalankan melalui pemeriksaan tata bahasa BCP 47 yang sama seperti string literal (...) strings, sehingga /Lang heksadesimal yang cacat akan tertangkap sementara yang patuh (misalnya UTF-16BE en-US) tidak lagi berisiko ditandai

Diubah

  • pvuaiFontMissingToUnicode (§7.21.7) kini mengecualikan /MacExpertEncoding bersama dengan /WinAnsiEncoding dan /MacRomanEncoding, mencocokkan dengan empat kondisi pengecualian yang tercantum dalam klausul tersebut

Version 1.98.0

Ditambahkan

  • pvuaiNeedAppearancesTrue (§7.18.4) menandai AcroForm yang bendera /NeedAppearances-nya bernilai true, sehingga tampilan widget tidak terkunci dengan andal dan teknologi bantu tidak dapat mengaitkannya dengan pohon struktur. Di-porting dari validator PDF/A dan dibatasi pada keberadaan /AcroForm untuk mempersempit area pemindaian

Diubah

  • regresi korpus veraPDF: menghubungkan pasangan lulus+gagal Reference-XObject §7.20 dan pasangan lulus+gagal subset CharSet/CIDSet §7.21.4.2 ke dalam Live_Corpus_ValidatePdfUaMatchesConformance. Sampel lulus nilai dilarang ToUnicode §7.21.7 dan klip media §7.18.6.2 juga dihubungkan sebagai pelindung positif palsu (sampel gagal mereka menggunakan tata letak kamus yang tidak tertangkap oleh pemindaian tingkat byte, sehingga hanya bagian lulus yang dihubungkan)
  • daftar asersi jalur lulus korpus mendapatkan 15 pelindung nol-positif-palsu baru sehingga setiap pemeriksaan struktur dan tingkat byte pvuai* yang aktif kini diuji terhadap sampel yang patuh (sebelumnya hanya sekitar 30 dari 60 masalah aktif yang dilindungi). Pelindung pvuaiLangInvalidFormat sengaja diabaikan karena pemeriksa tingkat byte secara konservatif menandai string /Lang berkode heksadesimal yang tidak dapat didekodekannya

Version 1.97.0

Diperbaiki

  • pengerasan ValidatePdfUaStructureElements: penelusuran rantai induk EnclosingTable kini membawa penghitung lompatan (dibatasi oleh jumlah elemen), sehingga siklus ParentIndex yang cacat pada array elemen struktur sintetis tidak lagi menggantung pemanggil. Alokasi array ID konten bertanda ValidatePdfUaPageContentTagging kini dibatasi maksimal satu juta entri, mencegah alokasi multi-GB pada MarkedContentID yang cacat/berbahaya

Diubah

  • komentar dokumen enum pvuaiOrderedListMissingListNumbering kini secara akurat menjelaskan apa yang dilakukan oleh pemeriksaan tersebut: ini menandai elemen L yang nilai ListNumbering-nya berada di luar set Tabel 347 ISO 32000-1 (atribut yang tidak ada tidak ditandai). Komentar sebelumnya menyiratkan bahwa itu juga mendeteksi daftar terurut yang kehilangan atribut, yang mana tidak dilakukan oleh implementasi
  • dua sampel gagal korpus ketidakcocokan WMode 7.21.3.3-t02 kini dihubungkan ke dalam Live_Corpus_ValidatePdfUaMatchesConformance — sejak v1.95.0 stream CMap dikompresi dengan FlateDecode-inflated, sehingga perbandingan kamus-vs-konten kini berjalan pada sisi yang dapat dibaca. Komentar usang “not wired” dihapus

Version 1.96.0

Ditambahkan

  • konsistensi lintas standar: TPdf.ValidatePdfUa mendapatkan dua pemeriksaan yang di-porting dari validator PDF/A. pvuaiAnnotationFlagsViolation (§7.18.1) menandai anotasi non-pengecualian yang membawa bendera Hidden / Invisible / NoView flag, yang merusak alur baca teknologi bantu. pvuaiActionTargetMissing (§7.18.5) menandai aksi GoToR / URI / SubmitForm yang kehilangan kunci target yang diwajibkan (/F+/D, /URI, /F), membuat tautan tidak dapat digunakan oleh teknologi bantu

Diperbaiki

  • penggabungan pohon struktur lintas halaman: loop akumulasi AllElems di TPdf.ValidatePdfUa kini mendasarkan ulang ParentIndex dari setiap elemen dari array lokal halaman ke array gabungan. Tanpa ini, elemen anak halaman 2 mempertahankan indeks lokal halaman yang merujuk ke irisan halaman 1, secara diam-diam merusak setiap pemeriksaan yang bergantung pada ParentIndex (struktur tabel/daftar, jumlah anak-H §7.4.4, EnclosingTable)
  • analisis RoleMap: PdfReadRoleMapPairs tidak lagi menghentikan seluruh pemindaian kunci/nilai ketika sebuah nilai merupakan referensi tidak langsung (N 0 R) atau array ([...]) — keduanya merupakan bentuk RoleMap yang valid menurut ISO 32000-1 14.8.5.1. Ini sekarang hanya melewatkan entri tersebut (Continue) alih-alih Break-ing, menghilangkan positif palsu pvuaiRoleMapUnresolved pada tipe yang dipetakan setelah entri tidak langsung/array

Diubah

  • FPdfPreflightReport: 18 nilai TPdfUaValidationIssue aktif yang sebelumnya jatuh ke kategori umum “missing marker” dan rekomendasi kini membawa kategori yang akurat (Structure / Content / Metadata / Security) dan rekomendasi khusus klausul. Juga memperbaiki salah ketik puaNone / pua1pucNone / puc1 di PDFSpecComplianceMatrix.md

Version 1.95.0

Diubah

  • peninjauan kembali dan pemeriksaan kelayakan TPdf.ValidatePdfUa: pemeriksaan §7.21.3.3 pvuaiCMapWModeMismatch dan pemeriksaan §7.21.7 pvuaiToUnicodeForbiddenValue kini mengembangkan stream CMap / ToUnicode yang dikompresi dengan FlateDecode sebelum memindai (sebelumnya hanya stream tidak terkompresi yang dinilai, sebuah negatif palsu yang diketahui). Pembantu bersama PdfInflate / PdfReadAndDecodeStream dipromosikan dari FPdfPdfa / FPdfPdfx ke FPdfPdfCommon sehingga setiap unit kepatuhan berbagi satu salinan

Ditambahkan

  • pvuaiSubsetCharSetEmpty (§7.21.4.2) menandai FontDescriptor subset Type 1 yang membawa kunci /CharSet dengan nilai string kosong — pvuaiSubsetMissingCharSet yang sudah ada hanya menangkap kunci yang hilang. /CIDSet yang kosong tidak ditandai, karena font tanpa CID secara sah dapat membawa bitmap kosong

Version 1.94.0

Ditambahkan

  • audit TPdf.ValidatePdfUa tahap kedua menutup enam celah ISO 14289-1 yang muncul dari peninjauan klausul demi klausul dan pemindaian ulang API native Pdfium yang sudah dibungkus tetapi tidak digunakan oleh jalur PDF/UA. pvuaiHeadingFormatInvalid (§7.4.3) menandai tag heading buatan pengguna yang dimulai dengan H tetapi membawa pemisah, spasi, atau angka Romawi alih-alih digit Arab murni. pvuaiMissingDocumentOutline (§7.17, should) menandai dokumen multi-halaman yang tidak membawa outline bookmark (dokumen satu halaman dikecualikan). pvuaiStructElementLangInvalid (§7.2) menandai nilai /Lang elemen struktur yang bukan tag BCP 47 tag yang valid. pvuaiWidgetMissingPrintField (§7.14 / §7.18.4) menandai elemen struktur Widget yang kehilangan pemilik atribut PrintField. pvuaiLinkNotInStructureTree (§7.18.5) menandai dokumen yang anotasi /Subtype /Link-nya tidak diekspos sebagai elemen struktur Link. pvuaiPdfiumAnnotationMissingContents dan pvuaiPdfiumLinkMissingContents (§7.18.1 / §7.18.5) menambahkan pemindaian anotasi model objek Pdfium yang presisi yang mengecualikan anotasi tersembunyi, di luar crop-box, Popup, dan Widget — menghilangkan positif palsu dari heuristik tingkat byte, yang tidak dapat membaca bendera /F atau /Rect

Version 1.93.0

Ditambahkan

  • TPdf.ValidatePdfUa kini melapiskan pass model objek Pdfium di atas inspektur tingkat byte, mencerminkan arsitektur PDF/A putaran ke-7: berjalan menelusuri objek teks di setiap halaman melalui FPDFTextObj_GetFontFPDFFont_GetIsEmbedded (pvuaiPdfiumFontNotEmbedded, §7.21.4) dan memindai setiap karakter melalui FPDFText_HasUnicodeMapError (pvuaiPdfiumUnicodeMapError, §7.21.7) dan FPDFText_GetUnicode (pvuaiPdfiumNotDefGlyph, §7.21.8) — lebih presisi daripada heuristik tingkat byte, yang hanya memicu ketika tidak ada program font sama sekali atau tidak ada /ToUnicode yang muncul sama sekali. Penelusuran terputus awal (short-circuit) pada tiga tingkat: loop halaman keluar ketika ketiga masalah lapisan Pdfium sudah disetel, loop per objek keluar pada font non-tertanam pertama, dan pemindaian karakter melewati pass .notdef ketika UnicodeMapError sudah kena. PDF/UA adalah validator standar PDF terakhir tanpa lapisan model objek Pdfium

Version 1.92.0

Ditambahkan

  • membuat Tests.PdfR — file pengujian pertama untuk validator PDF/R-1 (FPdfPdfr), mencakup validasi header, larangan ObjStm, deteksi penanda raster, dan pelindung file bersih tanpa positif palsu. Keenam rangkaian pengujian standar PDF kini memiliki file pengujian khusus: PdfA(80), PdfUa(101), PdfX(7), PdfE(5), PdfVT(15), PdfR(4) = total 212 pengujian

Version 1.91.0

Ditambahkan

  • ValidatePdfE dan ValidatePdfVT mendapatkan pemeriksaan tingkat konten yang sebelumnya hanya tersedia di validator PDF/A, PDF/UA, dan PDF/X: pveiLzwForbidden, pveiJavaScriptForbidden, pveiFormFieldsForbidden (hanya PDF/E), pveiEmbeddedFilesForbidden (hanya PDF/E), pveiOpiForbidden, pvviLzwForbidden, pvviJavaScriptForbidden, pvviEmbeddedFilesForbidden, pvviOpiForbidden. TPdf.ValidatePdfE dan TPdf.ValidatePdfVT juga mendapatkan lapisan model objek Pdfium (pveiPdfiumFontNotEmbedded / pvviPdfiumFontNotEmbedded) yang menelusuri objek teks halaman melalui FPDFFont_GetIsEmbedded, terputus awal pada font non-tertanam pertama

Version 1.90.0

Ditambahkan

  • TPdf.ValidatePdfX kini melapiskan pass model objek Pdfium di atas inspektur tingkat byte: berjalan menelusuri objek teks di setiap halaman melalui FPDFTextObj_GetFontFPDFFont_GetIsEmbedded dan melaporkan font non-tertanam sebagai pvxiPdfiumFontNotEmbedded — lebih presisi daripada heuristik tingkat byte yang hanya memicu ketika tidak ada program font sama sekali. Penelusuran terputus awal pada font non-tertanam pertama yang ditemukan

Diubah

  • penelusuran pohon struktur TPdf.ValidatePdfUa: pemanggilan ValidatePdfUaPageContentTagging per halaman (yang membangun peta klaim ID konten bertanda dan memeriksa silang setiap objek teks/gambar) kini dilewati pada halaman berikutnya setelah pvuaiUntaggedContent sudah ditemukan — elemen struktur tetap dikumpulkan untuk pemeriksaan lintas halaman (ID unik catatan, urutan heading), tetapi pass penandaan konten per halaman yang mahal akan berhenti lebih awal

Version 1.89.0

Diubah

  • kinerja lapisan model objek Pdfium TPdf.ValidatePdfA: penelusuran halaman/objek kini terputus awal pada tiga tingkat — loop halaman keluar ketika semua masalah lapisan Pdfium yang berlaku sudah ditemukan, loop per objek keluar ketika kedua masalah per objek (embed font + transparansi) disetel, dan pemindaian karakter halaman teks melewati pass .notdef ketika UnicodeMapError sudah kena. Pemeriksaan ketersediaan API Assigned() dan bendera kepatuhan di-cache ke boolean lokal sekali sebelum loop alih-alih dievaluasi ulang pada setiap halaman/objek/karakter. Pada dokumen besar yang tidak patuh, penelusuran kini dapat berhenti setelah halaman pertama alih-alih memindai semua halaman; pada dokumen yang patuh, overhead per halaman menjadi lebih rendah (tidak ada pemanggilan Assigned berulang)

Version 1.88.0

Ditambahkan

  • ValidatePdfX mendapatkan delapan nilai TPdfXValidationIssue tingkat konten baru yang mencakup pembatasan pertukaran cetak yang diberlakukan PDF/X di luar penanda format file: pvxiLzwForbidden (/LZWDecode), pvxiJavaScriptForbidden (/JavaScript), pvxiFormFieldsForbidden (/AcroForm / /XFA), pvxiAdditionalActions (/AA), pvxiEmbeddedFilesForbidden (/EmbeddedFiles / /FileAttachment), pvxiOpiForbidden (/OPI / /Alternates), pvxiMissingTrimBox (tidak ada /TrimBox di halaman mana pun), dan pvxiTrappedNotSet (/Trapped tidak ada atau /Unknown). Validator PDF/X sebelumnya hanya memeriksa penanda XMP/OutputIntent; ini adalah pass tingkat konten pertamanya. Pembantu bersama PdfStructureBytes / PdfHasName / PdfCountName ditambahkan ke FPdfPdfCommon sehingga semua unit kepatuhan dapat menggunakannya

Version 1.87.0

Ditambahkan

  • Validasi PDF/UA kini mencakup aturan font komposit ISO 14289-1 §7.21.3: pvuaiCidSystemInfoMismatch menandai font Type0 yang CMap tertanam dan CIDFont turunannya tidak sepakat pada Registry/Ordering atau CIDFont Supplement-nya melebihi nilai CMap, pvuaiCMapNotEmbedded menandai CMap yang dirujuk berdasarkan nama (sebagai Encoding atau UseCMap) yang bukan CMap bawaan dari ISO 32000-1 Tabel 118, dan pvuaiCMapWModeMismatch menandai CMap tertanam yang kamus WMode-nya berbeda dari WMode dalam konten stream-nya

Diperbaiki

  • Pemeriksaan §7.21.3.2 pvuaiCidFontMissingCidToGidMap melewatkan kamus CIDFontType2 yang pasangan kunci/nilai Subtype-nya dipisahkan oleh baris baru, dan kini juga menandai nilai nama CIDToGIDMap selain Identity

Version 1.86.0

Ditambahkan

  • Validasi PDF/UA kini mencakup aturan pengkodean TrueType ISO 14289-1 §7.21.6: pvuaiTrueTypeEncodingInvalid menandai font TrueType non-simbolik yang Encoding-nya tidak ada atau bukan MacRomanEncoding maupun WinAnsiEncoding (langsung atau melalui BaseEncoding), dan pvuaiSymbolicTrueTypeEncoding menandai font TrueType simbolik yang memiliki nama Encoding non-standar

Version 1.85.1

Diubah

  • Pemeriksaan urutan tab ISO 14289-1 §7.18.3 pvuaiMissingTabsOrder kini berjalan per halaman: setiap halaman yang memuat anotasi harus mendeklarasikan /Tabs /S di kamus halamannya sendiri, sehingga halaman saudara yang sesuai tidak lagi menyembunyikan halaman yang tidak memilikinya

Version 1.85.0

Ditambahkan

  • Validasi PDF/UA kini membedakan formulir XFA dinamis dari statis sesuai ISO 14289-1 §7.15: pvuaiXfaDynamic menandai formulir yang konfigurasi XFA-nya menetapkan dynamicRender ke required

Diubah

  • Bendera kandidat XFA sebelumnya pvuaiXfaPresent dihentikan dan tidak lagi dimunculkan (XFA statis sesuai dengan §7.15); nilai enum tetap ada demi kompatibilitas API

Version 1.84.0

Ditambahkan

  • Validasi PDF/UA kini mendeteksi konten nyata yang tidak diberi tag sebagaimana diwajibkan ISO 14289-1 §7.1: pvuaiUntaggedContent menandai objek teks dan gambar yang dirender yang tidak diklaim oleh pohon struktur halaman (melalui ID konten bertanda) maupun ditandai sebagai Artifact
  • Pembantu baru di tingkat halaman GetPageContentMarkInfos dan ValidatePdfUaPageContentTagging dengan rekaman TPdfPageContentMarkInfo untuk digunakan langsung

Version 1.83.0

Ditambahkan

  • Validasi PDF/UA kini menegakkan model heading ISO 14289-1 §7.4.4: pvuaiHeadingModelMixed menandai dokumen yang mencampur tag H generik dengan heading bernomor H1..Hn, dan pvuaiHeadingMultipleInNode menandai simpul struktur yang memiliki lebih dari satu heading anak H

Version 1.82.0

Ditambahkan

  • Validasi PDF/UA kini menyelesaikan RoleMap yang diwajibkan ISO 14289-1 §7.1: pvuaiRoleMapRemapsStandard menandai entri RoleMap yang mendefinisikan ulang tipe struktur standar, dan pvuaiRoleMapUnresolved menandai tipe struktur non-standar yang digunakan dengan rantai RoleMap yang hilang, menggantung, atau siklik — rantai tidak langsung yang mencapai tipe standar diterima, dan entri RoleMap yang tidak digunakan tidak pernah dinilai
  • Pembantu baru PdfUaIsStandardStructType, PdfReadRoleMapPairs (dengan dekoding escape nama PDF #hh) dan ValidatePdfUaRoleMapUsage untuk digunakan langsung

Version 1.81.0

Ditambahkan

  • Validasi PDF/UA kini mencakup pemberian tag daftar ISO 32000-1 yang diwajibkan ISO 14289-1 §7.6: pvuaiListStructureInvalid menandai item LI di luar kontainer L dan bagian Lbl/LBody di luar item LI, sambil menerima daftar bersarang dan penggunaan Lbl yang sah di dalam elemen Note dan BibEntry

Version 1.80.0

Ditambahkan

  • Validasi PDF/UA kini mencakup pemberian tag tabel ISO 32000-1 yang diwajibkan ISO 14289-1 §7.5: pvuaiTableStructureInvalid menandai sel TH/TD di luar baris TR dan baris atau grup baris di luar kontainer Table-nya, pvuaiTableHeaderMissingScope menandai sel header yang relasinya tidak dapat ditentukan baik melalui atribut Scope maupun asosiasi Headers/ID, dan pvuaiTableHeadersUndefinedId menandai referensi Headers dalam dokumen yang tidak mendefinisikan ID elemen struktur apapun
  • TPdfStructureElement mengekspos atribut tabel Scope, HasHeaders, HeadersIds, ColSpan, dan RowSpan, yang diselesaikan selama penelusuran pohon struktur

Diubah

  • Penelusuran pohon struktur kini membaca semua atribut tata letak dan tabel dalam satu kali lintasan pada kamus atribut setiap elemen, bukan satu pemindaian per atribut

Version 1.79.1

Perbaikan

  • Mem-porting sampel AnnotationsLab ke Lazarus dan C++Builder, bergabung dengan sampel konsol Delphi yang sudah ada

Perbaikan

  • TPdf.CreateAnnotation dapat memunculkan “Cannot set attachment points” untuk anotasi markup yang menggunakan titik quad (Highlight, Underline, StrikeOut, Squiggly) karena anotasi baru belum memiliki slot quad untuk diganti; kini ia menambahkan quad pertama sebagai gantinya

Version 1.79.0

Tambahan

  • Sampel konsol Delphi AnnotationsLab baru: membuat anotasi Teks, Sorotan, Kotak, dan Lingkaran, menulisnya ke PDF, lalu memuat ulang file dan menghitung daftar anotasi halaman

Version 1.78.0

Tambahan

  • TPdf.MeasureText dan TPdf.MeasureTextWidth baru: mengukur lebar dan tinggi string yang dirender untuk font dan ukuran tertentu (unit pengguna PDF, 1 unit = 1/72 inci) tanpa menambahkan konten ke halaman, memungkinkan tata letak dan logika pemotongan kata (word-wrap) bekerja di atas AddText; disediakan oleh unit mandiri FPdfMeasure sebagai asisten kelas (class helper)
  • TPdf.WrapText baru: pemotongan kata yang serakah yang dibangun di atas MeasureTextWidth yang memisahkan teks pada spasi dan mengemas kata-kata menjadi baris yang tidak lebih lebar dari lebar yang diberikan (unit pengguna PDF); satu kata yang terlalu panjang akan mendapatkan barisnya sendiri (tanpa pemisahan di dalam kata), mengembalikan baris yang dibungkus sebagai array

Version 1.77.0

Tambahan

  • ValidatePdfA memperoleh tiga nilai TPdfAValidationIssue baru yang mencakup klausa-klausa yang sebelumnya dinilai “NO” atau “reader behaviour” oleh audit kesenjangan sebelumnya (menambahkan ordinal, nilai yang ada tidak berubah): pvaiPdfiumNotDefGlyph (PDF/A-2 6.2.11.8 — karakter yang diselesaikan menjadi Unicode 0 tanpa kesalahan pemetaan, gejala runtime dari referensi glif .notdef; dideteksi melalui lapisan model objek Pdfium), pvaiWordBreakMissing (Tingkat A 6.8.3.2 — string tampilan aliran konten yang lebih panjang dari 20 karakter tanpa spasi, kemungkinan pelanggaran penggabungan kata; heuristik kasar yang menghindari positif palsu CJK), dan pvaiLinkActionMissingTarget (6.6.3 — tindakan GoToR/URI/SubmitForm yang tidak memiliki kunci target tampilan sehingga pembaca tidak dapat menyajikannya)

Version 1.76.0

Ditambahkan (Added)

  • ValidatePdfA mendapatkan tiga nilai TPdfAValidationIssue baru (ordinal ditambahkan, nilai yang sudah ada tidak berubah): pvaiNameNotValidUtf8 (PDF/A-2/3 6.1.8 — token /BaseFont atau /FontName yang berisi byte ≥ 0x80 dan tidak membentuk UTF-8 yang valid), pvaiInlineImageLzwForbidden (PDF/A-2/3 6.1.10 — gambar inline di dalam aliran konten halaman menggunakan filter LZW atau Crypt), dan pvaiTrueTypeDifferencesForbidden (6.3.7 Cor.2 — font TrueType non-simbolik yang kamus Encoding-nya membawa /Differences)

Version 1.75.0

Ditambahkan (Added)

  • ValidatePdfA mendapatkan tiga nilai TPdfAValidationIssue baru (ordinal ditambahkan, nilai yang ada tidak berubah): pvaiIntegerImplementationLimit (PDF/A-2/3 6.1.13 — sebuah token numerik yang melampaui batas integer bertanda 32-bit 2,147,483,647), pvaiBlendModeNotWhitelisted (PDF/A-2/3 6.2.10 — sebuah nilai /BM di luar set blend-mode standar ISO 32000-1 §11.3.5; melengkapi pvaiTransparentColorSpace pada PDF/A-1 yang hanya mengizinkan Normal/Compatible), dan pvaiHexStringOddDigits (6.1.6 — sebuah string hex <...> dengan jumlah digit hex ganjil)

Version 1.74.0

Ditambahkan (Added)

  • ValidatePdfA mendapatkan tiga nilai TPdfAValidationIssue baru (ordinal ditambahkan, nilai yang ada tidak berubah): pvaiPermissionsViolation (6.1.12 — sebuah kamus (dictionary) /Perms yang membawa /DigestLocation, /DigestMethod, atau /DigestValue bersama /DocMDP), pvaiTransActionForbidden (PDF/A-2 6.5.1 — sebuah aksi transisi Trans, terdeteksi melalui pola action-dict /S /Trans untuk menghindari kecocokan palsu dengan /Transparency), dan pvaiPdfiumObjectTransparency (PDF/A-1 6.4 — sebuah objek halaman yang membawa transparansi nyata sesuai FPDFPageObj_HasTransparency, memperluas layer model objek Pdfium yang diperkenalkan pada v1.73.0 untuk menangkap efek blend-mode/soft-mask yang terlewatkan oleh pemindaian nama tingkat byte)

Version 1.73.0

Ditambahkan (Added)

  • TPdf.ValidatePdfA kini melapiskan pass model objek Pdfium di atas inspektur tingkat byte: metode ini menelusuri objek teks setiap halaman melalui FPDFPage_GetObjectFPDFTextObj_GetFontFPDFFont_GetIsEmbedded dan melaporkan font yang dirender tanpa penyematan sebagai pvaiPdfiumFontNotEmbedded (ISO 19005 6.3.4), serta memuat setiap halaman teks untuk memindai FPDFText_HasUnicodeMapError dan melaporkan pemetaan Unicode yang rusak sebagai pvaiPdfiumUnicodeMapError (6.3.8). Ini adalah pemeriksaan yang tidak dapat dilakukan oleh inspektur tingkat byte — yang hanya melihat token nama, bukan handle font yang terselesaikan atau status pemetaan per karakter — dan digabungkan ke dalam hasil tingkat byte. Fungsi tingkat byte yang berdiri sendiri ValidatePdfACompliance tidak berubah

Version 1.72.0

Ditambahkan (Added)

  • ValidatePdfA mendapatkan lima nilai TPdfAValidationIssue baru (ordinal ditambahkan, nilai yang ada tidak berubah): pvaiNeedsRenderingPresent (PDF/A-2 6.4.2 — katalog tidak boleh membawa /NeedsRendering), pvaiDestOutputProfileRef (PDF/A-3 6.2.3 — sebuah OutputIntent tidak boleh membawa /DestOutputProfileRef), pvaiEmbeddedFileMissingUF (PDF/A-3 6.8 — spesifikasi file dengan /EF harus juga membawa /UF), pvaiXmpPacketBytesAttr (6.7.5 — header paket XMP tidak boleh membawa atribut bytes= atau encoding= yang sudah tidak digunakan lagi), dan pvaiAnnotationToggleNoView (PDF/A-2 6.3.2 — bit anotasi /F ToggleNoView, nilai 512, dilarang)

Version 1.71.0

Diubah

  • ValidatePdfUa kini memunculkan pvuaiOrderedListMissingListNumbering (ISO 14289-1 7.6): penelusur pohon struktur (structure-tree walker) menyelesaikan atribut tata letak ListNumbering pada setiap elemen L melalui API atribut Pdfium dan menandai setiap nilai di luar set Tabel 347 ISO 32000-1 (Decimal, UpperRoman, LowerRoman, UpperAlpha, LowerAlpha, None, Circle, Disc, Square). Atribut yang tidak ada tidak ditandai, karena daftar tersebut mungkin tidak berurutan; ini menutup celah terakhir sisa ISO 14289-1 yang dicatat pada akhir putaran 5

Version 1.70.0

Ditambahkan

  • ValidatePdfUa mendapatkan empat nilai TPdfUaValidationIssue baru (ordinal ditambahkan, nilai yang ada tidak berubah): pvuaiSubsetMissingCidSet (ISO 14289-1 7.21.4.2 — FontDescriptor subset CID harus mendeklarasikan /CIDSet), pvuaiToUnicodeForbiddenValue (7.21.7 — CMap ToUnicode tidak boleh memetakan kode apa pun ke U+FEFF atau U+FFFE; stream yang tidak dikompresi dipindai untuk mencari bentuk output <FEFF>/<FFFE>), pvuaiLangInvalidFormat (7.2 — /Lang harus berupa tag RFC 1766 / BCP 47 yang valid; tata bahasa permisif menerima en, en-US, zh-Hans, es-419 dan menandai nilai yang jelas-jelas tidak sesuai), dan pvuaiOrderedListMissingListNumbering (7.6 — dipertahankan untuk kelengkapan API; belum dimunculkan oleh validator karena membedakan secara andal antara daftar berurutan dan tidak berurutan memerlukan nilai atribut ListNumbering, yang tidak diekspos oleh penelusur pohon struktur)

Version 1.69.0

Ditambahkan

  • ValidatePdfUa mendapatkan dua nilai TPdfUaValidationIssue baru (ordinal ditambahkan, nilai yang ada tidak berubah): pvuaiWidgetOutsideForm (ISO 14289-1 7.18.4 — elemen struktur Widget harus disarangkan di dalam elemen Form; penelusur pohon struktur kini memverifikasi setiap jenis induk langsung Widget) dan pvuaiSubsetMissingCharSet (7.21.4.2 — FontDescriptor subset Type 1 harus mendeklarasikan /CharSet, yang diidentifikasi oleh awalan nama subset enam huruf + pada /FontName)

Version 1.68.0

Ditambahkan

  • ValidatePdfUa mendapatkan dua nilai TPdfUaValidationIssue baru (ordinal ditambahkan, nilai yang ada tidak berubah): pvuaiUriActionIsMap (ISO 14289-1 7.18.5 — kamus tindakan URI tidak boleh membawa /IsMap dengan nilai true, karena menonaktifkan target tautan yang dapat diakses) dan pvuaiHeadingSequenceViolation (7.4.2 — judul bernomor harus dimulai dari H1 dan urutan menurun tidak boleh melewati tingkat perantara, mis. H1H3 adalah sebuah pelanggaran). Pemeriksaan judul adalah aturan PDF/UA tingkat pohon struktur pertama di validator: ValidatePdfUaStructureElements kini menelusuri daftar elemen yang diketik dan memverifikasi urutan H1H6 (dan H7+ per 7.4.3) dalam urutan dokumen

Version 1.67.0

Ditambahkan

  • ValidatePdfUa mendapatkan lima nilai TPdfUaValidationIssue baru (ordinal ditambahkan, nilai yang ada tidak berubah): pvuaiLinkMissingContents (ISO 14289-1 7.18.5 — anotasi Link harus membawa deskripsi alternatif melalui /Contents), pvuaiAnnotationMissingContents (7.18.1 — anotasi tidak terkecualikan apa pun tanpa /Contents harus memiliki deskripsi alternatif; Popup dan Widget dikecualikan), pvuaiEmbeddedFileMissingName (7.11 — kamus spesifikasi file harus memuat /F dan /UF), pvuaiMediaClipMissingAlt (7.18.6.2 — kamus data klip media harus memuat /CT dan /Alt), dan pvuaiCidFontMissingCidToGidMap (7.21.3.2 — CIDFont Type 2 yang disematkan harus memuat /CIDToGIDMap)

Version 1.66.0

Ditambahkan

  • ValidatePdfUa mendapatkan lima nilai TPdfUaValidationIssue baru (ordinal ditambahkan, nilai yang ada tidak berubah): pvuaiRoleMapMissing (ISO 14289-1 7.1 — dokumen ber-tag dengan jenis struktur non-standar harus membawa /RoleMap), pvuaiOptionalContentAsKey (7.10 — kamus konfigurasi konten opsional tidak boleh membawa kunci status otomatis /AS), pvuaiXfaPresent (7.15 — kehadiran AcroForm /XFA ditandai karena XFA dinamis dilarang), pvuaiTrapNetAnnotation (7.18.2 — anotasi /TrapNet dilarang), dan pvuaiReferenceXObject (7.20 — Reference XObject, yang dikunci dari penanda /Ref, dilarang)

Diperbaiki

  • ValidatePdfUa tidak lagi memunculkan positif palsu pvuaiEncryptionPresent pada setiap file yang dienkripsi: PDF/UA mengizinkan enkripsi selama kunci /P kamus enkripsi menetapkan posisi bit 10 (nilai 1024), yang memberikan akses teknologi bantuan (7.16). Pelanggaran spesifik kini dilaporkan melalui pvuaiEncryptionPBitMissing baru; pvuaiEncryptionPresent dipertahankan di enum untuk kompatibilitas API tetapi tidak lagi dimunculkan oleh validator tingkat byte

Version 1.65.0

Ditambahkan

  • ValidatePdfA mendapatkan lima nilai TPdfAValidationIssue baru (ordinal ditambahkan, nilai yang ada tidak berubah): pvaiCidFontMissingCidToGidMap (ISO 19005-1 6.3.3.2 Cor.2 — CIDFont Type 2 yang disematkan harus membawa /CIDToGIDMap), pvaiSubsetMissingCharSet (6.3.5 — FontDescriptor subset Type 1 harus membawa /CharSet), pvaiSubsetMissingCidSet (6.3.5 — FontDescriptor subset CID harus membawa /CIDSet), pvaiWidgetActionForbidden (6.6.1 — anotasi Widget tidak boleh membawa /A atau /AA), dan pvaiOptionalContentAsKey (ISO 19005-2 6.9 — kamus konfigurasi konten opsional tidak boleh membawa kunci status otomatis /AS, baru menjadi relevan karena PDF/A-2 mengizinkan konten opsional)

Version 1.64.0

Ditambahkan

  • ValidatePdfA mendapatkan delapan nilai TPdfAValidationIssue baru (ordinal ditambahkan, nilai yang ada tidak berubah): pvaiHeaderBinaryMarkerMissing (ISO 19005-1 6.1.2 — header %PDF-x.y harus diikuti oleh komentar % dengan setidaknya empat byte yang lebih besar dari 127), pvaiExternalStreamRef (6.1.7 — kamus stream tidak boleh membawa /F, /FFilter atau /FDecodeParms), pvaiOutputIntentScheme (6.2.2 — /S OutputIntent harus berupa /GTS_PDFA1), pvaiInfoXmpDateMismatch (6.7.3 — CreationDate/ModDate Info harus juga muncul sebagai xmp:CreateDate/xmp:ModifyDate), pvaiMarkInfoMissing (6.8.2.2 — Level A mensyaratkan /MarkInfo dengan /Marked true), pvaiAnnotationApDictViolation (6.5.3 Cor.2 — kamus /AP anotasi hanya boleh memuat /N), pvaiEmbeddedFileMissingAFRelationship (ISO 19005-3 Lampiran E.2 — setiap spesifikasi file terkait harus membawa /AFRelationship), dan pvaiJpeg2000Violation (ISO 19005-2 6.2.8.3 — gambar JPEG2000 harus mendeklarasikan 1, 3 atau 4 komponen)

Diperbaiki

  • ValidatePdfA tidak lagi memunculkan positif palsu pvaiAnnotationFlagsViolation pada dokumen yang menggunakan nama sumber daya font satu huruf seperti /Font << /F 5 0 R >>; pemindaian tanda /F kini dibatasi pada konteks anotasi (/Subtype dari suatu tipe anotasi), sesuai dengan perilaku yang didokumentasikan (6.5.3)
  • ValidatePdfA kini melaporkan persyaratan file terkait PDF/A-3 per file: suatu dokumen ditandai hanya ketika /Type /Filespec tersemat yang mereferensikan stream tersemat melalui /EF tidak memiliki /AFRelationship, alih-alih pemeriksaan any-or-none (semua atau tidak sama sekali) pada seluruh dokumen sebelumnya (ISO 19005-3 Lampiran E.2)
  • Menambahkan tindakan /SetState yang tidak digunakan lagi (deprecated) ke dalam set tindakan terlarang bersama /SetOCGState, sehingga nama tindakan Referensi PDF tertangkap secara langsung (6.6.1)

Version 1.63.0

Ditambahkan (Ditambahkan)

  • Ditambahkan TPdf.MeasureText dan TPdf.MeasureTextWidth: mengukur lebar dan tinggi rendering teks dengan font dan ukuran tertentu tanpa menambahkan konten ke halaman (dalam satuan pengguna PDF, 1 satuan = 1/72 inci), memungkinkan perhitungan tata letak dan pembungkusan baris otomatis di atas AddText; disediakan oleh unit mandiri FPdfMeasure sebagai class helper

Diubah (Diubah)

  • Demo\Delphi\MergePDF, Demo\CBuilder\MergePDF, dan Demo\Lazarus\MergePDF ditingkatkan untuk ketiga IDE: pemilihan rentang halaman per file, jalur keluaran opsional, deduplikasi, log eksekusi, tombol batal, dan ringkasan penggabungan; bookmark dan metadata dibawa dari sumber pertama
  • Demo CreatePDF untuk ketiga IDE kini menyertakan opsi Teks Eropa untuk menulis teks beraksen dalam bahasa Ceko, Prancis, Jerman, Spanyol, Portugis, Polandia, dan Turki guna memverifikasi pemilihan font dan penanganan Unicode (contoh EuropeanText lama telah digabungkan)
  • Contoh ExtractTextPages dan EuropeanText dihapus: kemampuan ekstraksi teks per halaman dari ExtractTextPages kini tercakup oleh opsi rentang halaman dan pemisah halaman di ExtractText; rendering multibahasa EuropeanText telah digabungkan ke CreatePDF

Version 1.62.2

Diperbaiki (Diperbaiki)

  • Membuat ulang header C++Builder (.hpp) untuk setiap versi dan platform RAD Studio (Win32/Win64/Win64x); header tersebut sudah tidak selaras dengan sumber Pascal, sehingga tanda tangan fungsi lama dan unit yang hilang ikut diterima pengguna C++Builder melalui distribusi sumber

Version 1.62.1

Diperbaiki (Diperbaiki)

  • Memulihkan kompilasi sumber di RAD Studio 12 Athens dan versi sebelumnya: penetapan TArray<Byte> pada jalur validasi PDF/UA memakai konversi array implisit yang hanya tersedia di Delphi 13, sehingga gagal dikompilasi di IDE yang lebih lama

Version 1.62.0

Ditambahkan (Ditambahkan)

  • TPdf.RenderPageThumbnail merender halaman apa pun berdasarkan index menjadi bitmap yang disesuaikan dengan rasio aspek tanpa mengubah halaman dokumen saat ini, halaman yang sedang dimuat, atau memicu OnPageChange

Diperbaiki (Diperbaiki)

  • TPdfThumbnailView tidak lagi mengubah PageNumber dokumen host saat melukis; sebelumnya setiap repaint memuat ulang halaman, memicu OnPageChange, dan membuang text page, yang dapat mengganggu TPdfView terkait dan memicu loop repaint. Thumbnail kini dirender melalui RenderPageThumbnail tanpa efek samping tersebut
  • Validasi kesesuaian PDF/X kini memeriksa dokumen dengan cross-reference stream (PDF 1.6, umum pada PDF/X-4) dan objek yang disimpan di compressed object streams, bukan melaporkan seluruh file tersebut sebagai tidak sesuai; penanda GTS_PDFXVersion dibaca dari bentuk elemen dan bentuk atribut RDF di XMP
  • Validasi PDF/R kini melaporkan pvriInfoXmpMismatch ketika Info dictionary dan XMP berbeda pada Producer atau Creator; isu ini sebelumnya sudah dideklarasikan tetapi tidak pernah dinaikkan
  • Timer form-fill dilacak per permintaan, sehingga dokumen yang menjalankan beberapa timer sekaligus (misalnya JavaScript interval bersama kedipan field caret) mempertahankan semuanya, bukan kehilangan semua timer kecuali yang terbaru
  • Painting TPdfView dan metode publik RenderPage / RenderTile kini menahan document render lock, sehingga terserialisasi terhadap rendering worker-thread dari TPdf yang sama (PDFium tidak thread-safe)
  • Teks non-ASCII yang ditulis ke metadata PDF/X, PDF/R, dan PDF/VT (nama kondisi OutputIntent, Creator, Producer) kini dienkode sebagai string UTF-16BE sesuai ISO 32000-1 §7.9.2.2, bukan raw UTF-8 yang akan salah dibaca oleh reader yang sesuai
  • Helper kesesuaian membaca embedded metadata streams dengan /Length berupa indirect reference secara benar, memuat source bytes dengan ReadBuffer (sehingga short read gagal bersih), dan menolak offset startxref negatif alih-alih berisiko membaca di luar rentang

Version 1.61.0

Diubah (Diubah)

  • Koreksi deklarasi FFI/ABI yang mungkin mengharuskan kompilasi ulang pada kode yang mengimplementasikan callback terdampak: callback form-fill FFI_OpenFile kini membawa cdecl (konvensi stack Win32), dan parameter value dari FPDFAnnot_SetStringValue dan FPDFAttachment_SetStringValue kini FPDF_WIDESTRING (UTF-16LE) agar cocok dengan header PDFium
  • Callback progressive-load FX_FILEAVAIL.IsDataAvail dan FX_DOWNLOADHINTS.AddSegment kini memakai offset size_t, dan size_t memiliki lebar pointer pada Free Pascal / Lazarus Win64 (sebelumnya terpotong menjadi 32-bit), sehingga panggilan API ketersediaan data dan out size_t pada FPC Win64 kini diperbaiki

Diperbaiki (Diperbaiki)

  • Keamanan memori: use-after-free pada timer form-fill saat menghancurkan TPdf dengan caret AcroForm yang aktif; double FPDF_CloseDocument pada jalur galat ImportNPagesToOne; pengecualian Pascal yang lolos dari callback FPDF_FILEWRITE / FPDF_FILEACCESS melintasi batas C saat penyimpanan dan penyisipan JPEG; serta integer overflow dalam ekstraksi teks saat membaca dari indeks awal hingga akhir halaman
  • TPdfFuture<T> kini andal mengirimkan callback hasilnya; balasan sebelumnya hampir selalu terbuang dan bisa menyentuh thread yang sudah dibebaskan karena worker membebaskan dirinya sendiri sebelum balasan yang diantrikan dijalankan
  • Output PDF/A, PDF/X, PDF/E, PDF/R, PDF/VT, dan PDF/UA kini menulis entri cross-reference yang tepat 20 byte seperti disyaratkan ISO 32000-1 §7.5.4
  • Penyisipan penanda standar tidak lagi merusak dictionary saat key yang dihapus, misalnya /Trapped, adalah entri terakhir, yang sebelumnya menelan penutup >> dan menghasilkan objek yang salah format
  • Stream profil ICC OutputIntent kini menyatakan jumlah komponen /N yang diperlukan untuk PDF/X dan PDF/VT, yang sudah ada untuk PDF/A; dokumen sumber yang dienkripsi didekripsi sebelum penanda PDF/X, PDF/E, PDF/R, PDF/VT, dan PDF/UA disisipkan, sehingga output valid alih-alih diam-diam rusak
  • BOM xpacket UTF-8 pada XMP yang dihasilkan kini dikeluarkan sebagai byte yang tepat, memperbaiki kerusakan pada instalasi Delphi yang code page ANSI-nya bukan Latin-1; trailer incremental-update kini mempertahankan referensi /Info dokumen
  • SaveAs dengan kompresi kini tidak lagi memotong stream yang /Length-nya berupa indirect reference, dan tabel cross-reference yang dibangun ulang kini memakai entri 20 byte, nomor generation yang nyata, serta membuang pointer /Prev yang usang
  • Validasi kesesuaian kini membaca penanda versi XMP bentuk atribut untuk PDF/E dan PDF/X, sehingga file PDF/X-4 yang diserialkan sebagai atribut dikenali, mewajibkan pengenal PDF/E-1 yang tepat, membaca metadata stream indirect-/Length dengan benar, dan tidak lagi salah mencocokkan key /ID atau /StructTreeRoot milik struktur element saat memeriksa trailer PDF/UA; offset startxref yang rusak juga tidak lagi memunculkan range error
  • TPdfThumbnailView: halaman terakhir kini bisa dijangkau dengan scroll bar, halaman saat ini pada host document dipulihkan setelah thumbnail digambar, dan penanganan mouse-leave standar dikirim lagi
  • Bitmap halaman dan image grayscale kini tidak lagi dirender dengan palette yang salah; TPdfView juga tidak lagi menyisakan dangling reference saat TPdf-nya dibebaskan lebih dulu
  • Laporan preflight: HTML disimpan sebagai UTF-8 agar cocok dengan charset yang dinyatakan, dan escape string JSON menghasilkan urutan \u yang benar untuk karakter non-ASCII pada Free Pascal
  • Build trial: dialog pengingat trial kini muncul alih-alih disembunyikan sebelum sempat tampil
  • TPdfStreamAdapter kini menolak stream yang lebih besar dari 4 GiB dengan error yang jelas alih-alih diam-diam memotong length yang diteruskan ke PDFium

Version 1.60.1

Diubah (Diubah)

  • Demo AccessibilityReader untuk Delphi, Lazarus, dan C++Builder kini menjalankan baca-nyaring pada TPdfReadingSession: setiap halaman dirangkai menjadi satu potongan suara dengan BuildSpokenTextFromWords, posisi kata SAPI dimasukkan ke FeedSpokenPosition, dan sesi melanjutkan halaman serta menggerakkan kursor kata tampilan, menggantikan orkestrasi manual yang sebelumnya dibawa tiap demo
  • Pelacakan karaoke tingkat kata di demo kini juga berfungsi saat NVDA menjadi mesin suara: EstimatePacing menyesuaikan tempo kursor baca berdasarkan waktu bicara yang telah berlalu, sedangkan sebelumnya NVDA membaca nyaring tanpa pelacakan kata sama sekali
  • Pause dan Resume di demo kini juga berfungsi dengan NVDA: ResumeRestartsChunk membacakan ulang halaman saat ini dari awalnya ketika Resume, sementara SAPI tetap mempertahankan pause dan resume bawaan di tempat

Version 1.60.0

Ditambahkan (Ditambahkan)

    \t\t\t\t
  • Perenderan low-vision langsung pada TPdfView: opsi render baru reInvert dan reNightDuotone mewarnai ulang setiap tile halaman yang dirender (inversi warna penuh, atau palet duotone malam) sebelum overlay pencarian, seleksi, pembacaan, dan kursor kata digambar, sehingga transformasi warna bitmap yang sudah ada masuk ke penampil interaktif untuk tata letak satu halaman maupun halaman berhadapan; mengubah opsi akan langsung menggambar ulang
  • \t\t\t\t
  • NightDuotoneInk dan NightDuotonePaper mengatur palet malam, dengan bawaan teks amber di halaman hitam; reInvert menang saat kedua opsi disetel

Version 1.59.0

Ditambahkan (Ditambahkan)

  • TPdfReadingSession: komponen orkestrasi baca-nyaring yang netral terhadap mesin suara. Komponen ini menjaga kursor potongan, kursor kata, dan status pemutaran (Play / PlayFrom / Pause / Resume / Stop), menelusuri potongan TPdfSpokenText yang dimuat saat host melaporkan mesin sedang idle melalui Tick, menerjemahkan offset teks yang dibacakan kembali ke karakter halaman, dan menggerakkan kursor kata TPdfView yang terpasang secara otomatis; host menyambungkan mesin suara apa pun melalui OnSpeak serta event permintaan cancel / pause / resume, sehingga pustaka tidak menautkan API suara apa pun
  • \t\t\t\t
  • FeedSpokenPosition mengonsumsi posisi kata dari engine (seperti Status.InputWordPosition SAPI); EstimatePacing dengan EstimatedWordsPerMinute mengatur tempo engine tanpa sinyal posisi; ResumeRestartsChunk mengucapkan ulang chunk saat ini untuk engine tanpa jeda bawaan
  • \t\t\t\t
  • OnChunkChange, OnWordChange dan OnFinished hanya terpanggil saat ada perubahan nyata, dan view terpasang yang sudah dibebaskan akan melepaskan dirinya sendiri secara otomatis, sehingga kode host tetap bebas kedipan dan aman dari crash

Version 1.58.0

Ditambahkan (Ditambahkan)

    \t\t\t\t
  • EstimateSpokenWordIndex memperkirakan kata mana yang sedang diucapkan engine suara dari waktu berlalu dan laju kata per menit, memberi kata yang lebih panjang waktu secara proporsional lebih besar, sehingga engine yang tidak melaporkan posisi kata (seperti client pengendali NVDA) tetap bisa menggerakkan kursor pembacaan tingkat kata; pemanggil menyediakan waktu berlalu, jadi rutin ini tetap bebas jam dan dapat diuji unit

Version 1.57.0

Ditambahkan (Ditambahkan)

    \t\t\t\t
  • Penyusunan teks lisan dengan pemetaan dua domain untuk pelacakan read-aloud: BuildSpokenTextFromWords dan SpokenTextAppend menyusun string yang diberikan ke engine text-to-speech dari kotak kata halaman sambil merekam tabel span, dan SpokenToPageChar menerjemahkan offset lisan yang dilaporkan engine (seperti Status.InputWordPosition SAPI) kembali ke indeks karakter halaman, sehingga pelacakan highlight tingkat kata tetap benar saat teks lisan bukan seluruh teks halaman (bagian yang dilewati, pembacaan per unit, penggantian pelafalan)
  • \t\t\t\t
  • TPdfSpokenText dan TPdfSpokenSpan membawa string yang diucapkan beserta rentang halaman sumber pembentuknya; offset pada pemisah yang disisipkan akan diselesaikan ke kata terpetakan berikutnya dan offset melewati run yang dipetakan akan melaporkan tidak ada kecocokan

Version 1.56.9

Ditambahkan (Ditambahkan)

    \t\t\t\t
  • Demo\Delphi\PreflightReport menambahkan pratinjau Action Plan yang merangkum standar yang tidak lolos, prioritas, tindakan berikutnya, kode isu, dan rekomendasi ke dalam daftar perbaikan
  • \t\t\t\t
  • Demo\Delphi\PreflightReportCli menerima plan / actionplan sebagai format keluaran untuk proses satu file dan batch, lalu menulis daftar perbaikan yang sama ke file teks

Diubah

    \t\t\t\t
  • Kedua demo Delphi PreflightReport kini menampilkan jumlah status pass / action / review di samping total standar dan isu

Version 1.56.8

Diubah

    \t\t\t\t
  • ViewerInteractionLab kini menyertakan kontrol loncat halaman, kontrol zoom manual, pencatatan koordinat DeviceToPage / PageToDevice berbasis klik, dan log interaksi yang lebih jelas untuk pemeriksaan seleksi, pencarian, rotasi, dan navigasi
  • \t\t\t\t
  • ViewerInteractionLab halaman readme kini mendokumentasikan alur interaksi tambahan di seluruh set readme demo yang dilokalkan

Version 1.56.7

Ditambahkan

    \t\t\t\t
  • AccessibilityWorkbenchCli memetakan setiap temuan yang terpicu ke WCAG 2.1 Success Criteria dan area klausul ISO 14289-1 (PDF/UA-1), serta menampilkan bagian cakupan standar di laporan
  • \t\t\t\t
  • AccessibilityWorkbenchCli menghitung skor aksesibilitas 0-100 yang terdokumentasi dengan rubrik penalti yang dipublikasikan dan rentang excellent / good / needs work / poor, ditampilkan per file dan sebagai rata-rata batch
  • \t\t\t\t
  • AccessibilityWorkbenchCli menerima failscore=N untuk menggagalkan proses (kode keluar 2) ketika ada file yang skornya di bawah N
  • \t\t\t\t
  • AccessibilityWorkbenchCli menulis log SARIF 2.1.0 saat nama ringkasan batch berakhir dengan .sarif, dengan satu rule per jenis temuan yang membawa tag WCAG 2.1 dan PDF/UA untuk CI dan ingest code-scanning
  • \t\t\t\t
  • AccessibilityWorkbenchCli menambahkan perintah version yang mencetak versi PDFiumPas yang ditautkan

Version 1.56.6

Ditambahkan

    \t\t\t\t
  • IntakeWorkbenchCli menghitung hash forensik SHA-256 untuk setiap file masukan (turun ke unavailable pada compiler tanpa System.Hash) dan melaporkannya di setiap format
  • \t\t\t\t
  • IntakeWorkbenchCli menerima passwords=file.txt untuk mencoba membuka dokumen yang memerlukan kata sandi dari daftar kandidat, sambil merekam indeks kandidat yang cocok tanpa pernah mencatat teks kata sandi
  • \t\t\t\t
  • IntakeWorkbenchCli menerima copyto=dir untuk mengarahkan setiap file yang diaudit ke subfolder per tingkat risiko, sehingga auditor berubah menjadi penyortir intake
  • \t\t\t\t
  • IntakeWorkbenchCli menulis log SARIF 2.1.0 saat nama ringkasan batch berakhir dengan .sarif, dengan satu rule per flag risiko dan satu result per file yang ditandai untuk CI dan ingest code-scanning
  • \t\t\t\t
  • IntakeWorkbenchCli menambahkan perintah version yang mencetak versi PDFiumPas yang ditautkan

Version 1.56.5

Ditambahkan

    \t\t\t\t
  • IntakeWorkbenchCli kini menurunkan tindakan pascainput yang direkomendasikan seperti accept, request-password, manual-review, quarantine, dan deduplicate, serta menampilkan jumlah tindakan di ringkasan batch
  • \t\t\t\t
  • AccessibilityWorkbenchCli kini menurunkan tindakan perbaikan yang direkomendasikan seperti pass-through, remediate-tags, run-ocr, remediate-semantics, dan manual-review, dengan jumlah tindakan batch yang sesuai

Diubah

    \t\t\t\t
  • Kedua demo CLI tingkat alat menampilkan tindakan yang direkomendasikan di keluaran console, text, HTML, JSON, dan CSV sehingga operator batch dapat mengarahkan file tanpa memproses ulang field risiko atau status

Version 1.56.4

Diperbaiki (Diperbaiki)

    \t\t\t\t
  • Membaca anotasi, bookmark, atau anotasi tautan dalam loop tidak lagi membocorkan string teks item sebelumnya: record hasil TPdfAnnotation, TBookmark, dan TLinkAnnotation kini dibersihkan dengan inisialisasi yang sadar tipe terkelola alih-alih pengosongan memori mentah, sehingga dokumen dengan jumlah anotasi berisi teks yang sangat besar tidak lagi membengkakkan memori proses selama aplikasi berjalan
  • \t\t\t\t
  • Menghancurkan TPdf yang telah mendaftarkan handler OnUnsupportedFeature kini melepaskannya dari callback PDFium global proses, sehingga pemuatan dokumen berikutnya dari instance TPdf lain tanpa handler sendiri tidak lagi dapat mengirim ke komponen yang sudah dibebaskan (use-after-free)

Version 1.56.3

Diperbaiki (Diperbaiki)

    \t\t\t\t
  • AccessibilityWorkbenchCli tidak lagi menghitung halaman kosong sebagai halaman urutan baca heuristik, sehingga dokumen bertag dengan halaman pemisah kosong tetap mempertahankan status aksesibilitas yang benar; halaman tanpa konten yang dapat dibaca kini dilaporkan terpisah
  • \t\t\t\t
  • AccessibilityWorkbenchCli deteksi header tabel tidak lagi mengatribusikan tabel luar untuk sel TH yang milik tabel bertingkat, dan nama field formulir serta font dicocokkan secara case-sensitive sehingga field yang berbeda tidak digabung
  • \t\t\t\t
  • IntakeWorkbenchCli inventaris host URL kini menghapus bagian userinfo, query, dan fragment, sehingga tautan buatan seperti trusted.example@evil.example diatribusikan ke host yang sebenarnya, dan target mailto: menyumbang domainnya alih-alih tidak terlihat
  • \t\t\t\t
  • IntakeWorkbenchCli laporan Markdown meng-escape backtick pada path, host, dan nama lampiran yang dikendalikan penyerang sehingga format laporan tidak bisa dirusak dari dalam dokumen

Diubah

    \t\t\t\t
  • AccessibilityWorkbenchCli melaporkan kegagalan pemindaian font dan pemindaian field formulir sebagai penghitung terpisah, menandai font non-embedded yang juga memiliki instance embedded, dan membatasi daftar font yang panjang dengan penanda pemotongan eksplisit
  • \t\t\t\t
  • IntakeWorkbenchCli ringkasan batch menambahkan kolom jumlah anotasi lampiran, dan sensus anotasi per halaman dibatasi hingga 20000 anotasi per halaman dengan batasnya dilaporkan di setiap format

Version 1.56.2

Ditambahkan (Ditambahkan)

    \t\t\t\t
  • AccessibilityWorkbenchCli kini mengaudit embedding font, tooltip field formulir, sumber urutan baca, outline dokumen, struktur tabel dan daftar, alternate text yang mencurigakan, serta detail review per halaman yang lebih kaya sehingga laporan batch aksesibilitas mengidentifikasi lebih banyak target perbaikan
  • \t\t\t\t
  • IntakeWorkbenchCli kini melaporkan batas pemindaian halaman, aksi launch dan remote-go-to, inventaris host URI, jumlah anotasi, fitur PDFium yang tidak didukung, pengenal dokumen duplikat, dan flag risiko yang diperluas untuk review intake otomatis

Diubah

    \t\t\t\t
  • IntakeWorkbenchCli menerima maxpages=N dalam mode satu file dan batch untuk membatasi pemindaian halaman per dokumen sambil tetap menyelesaikan pelaporan metadata, lampiran, script, XFA, signature, dan risiko

Version 1.56.1

Diperbaiki

    \t\t\t\t
  • Memuat pdfium.dll yang lebih lama dan kehilangan export yang lebih baru kini gagal dengan bersih: jalur kegagalan mengatur ulang setiap entry point API yang terikat, sehingga pemeriksaan Assigned() (misalnya pada FPDF_GetLastError atau FPDF_GetSecurityHandlerRevision) melaporkan library sebagai belum dimuat alih-alih memanggil modul yang sudah dilepas dan crash dengan access violation
  • \t\t\t\t
  • UnloadLibrary kini membersihkan semua binding API PDFium alih-alih hanya helper V8 opsional, sehingga tidak ada pointer fungsi usang yang tersisa setelah DLL dilepas

Version 1.56.0

Ditambahkan

    \t\t\t\t
  • Kursor baca karaoke tingkat kata pada TPdfView: TrackReadingWordAt memetakan offset karakter kata saat ini dari engine text-to-speech (seperti Status.InputWordPosition SAPI) ke kotak kata halaman, menyorot kata yang memuatnya sebagai overlay terpisah di atas blok pembacaan, menggulirkannya ke tampilan, dan mengembalikan indeks kata, sehingga kata yang diucapkan menyala saat suara maju
  • \t\t\t\t
  • SetReadingWord dan ClearReadingWord menyetel atau menghapus kata yang disorot langsung dari TPdfWordBox; menyetel ulang kata yang sama tidak menghasilkan operasi apa pun, sehingga pelacakan per kata tidak pernah menimbulkan kedipan tampilan
  • \t\t\t\t
  • ReadingWordColor dan ReadingWordFollow mengontrol warna kursor kata dan apakah tampilan menggulir otomatis kata yang diucapkan ke tampilan

Version 1.55.2

Diperbaiki

    \t\t\t\t
  • ViewerInteractionLab kini memberi baris toolbar lebih banyak ruang vertikal sehingga Open PDF, Create Sample, navigasi, pencarian, dan kontrol seleksi tidak lagi saling tumpang tindih saat font diskalakan

Version 1.55.1

Diperbaiki

    \t\t\t\t
  • ViewerInteractionLab kini menempatkan Prev, Next, dan Rotate di baris toolbar kedua, sehingga startup tidak lagi bertabrakan dengan Open PDF dan Create Sample

Version 1.55.0

Ditambahkan

    \t\t\t\t
  • Jembatan word-to-selection untuk pembacaan “read it, select it”: TPdfView.SelectWordBox dan SelectWordSpan memilih satu kotak kata atau rentang kotak kata pada halaman yang sama (dari PageWordBoxes) berdasarkan rentang karakter mereka, sehingga kata atau baris yang sedang dibaca juga bisa dipilih dan disalin
  • \t\t\t\t
  • WordBoxIndexAtCharIndex memetakan indeks karakter kembali ke kotak kata yang memuatnya, sehingga highlight kata demi kata mengikuti pergerakan kursor baca TTS

Version 1.54.0

Ditambahkan

    \t\t\t\t
  • Accessor pengisian formulir lewat suara yang membaca field terfokus langsung dari kursor logis: FocusedFormFieldValue, FocusedFormFieldName dan FocusedFormFieldDetails pada TPdf dan TPdfView melaporkan nilai field saat ini, nama yang dapat dibaca manusia (/TU tooltip, dengan fallback ke /T) dan TPdfFormFieldInfo lengkap (type, flags, options) — semua yang perlu diumumkan UI suara saat melangkah melalui formulir

Diperbaiki

    \t\t\t\t
  • FocusedFormFieldValue membaca field melalui FocusedFormFieldIndex alih-alih focus interaktif pdfium, sehingga pengisi formulir berbasis suara mendapat nilai yang benar meski tanpa caret di layar (saat ini FocusedFormFieldText tetap mencerminkan focus pdfium dan tidak berubah)

Version 1.53.0

Ditambahkan

    \t\t\t\t
  • Dukungan highlight tingkat kata: TPdf.PageWordBoxes dan TPdfView.PageWordBoxes membagi halaman menjadi record TPdfWordBox, masing-masing membawa teks kata, rentang karakternya, dan rectangle bounding di ruang halaman, sehingga pembaca aksesibilitas dapat menyorot setiap kata yang diucapkan secara bergantian (“karaoke” reading) dengan meneruskan rectangle itu ke SetReadingHighlight
  • \t\t\t\t
  • BuildWordBoxes mengekspose langkah tokenizer secara mandiri, mengubah teks halaman menjadi kotak kata dengan rentang karakter

Version 1.52.0

Ditambahkan

    \t\t\t\t
  • Helper perenderan low-vision InvertPdfBitmap, GrayscalePdfBitmap dan DuotonePdfBitmap menerapkan transformasi warna in-place ke bitmap 32-bit yang sudah dirender, sehingga pembaca aksesibilitas dapat menampilkan halaman dengan mode terbalik / gelap, grayscale, atau skema dua warna kustom (misalnya latar gelap dengan teks terang) untuk pengguna low-vision
  • \t\t\t\t
  • Transformasi berjalan per piksel dan berperilaku identik di VCL dan Lazarus/LCL, sambil mempertahankan dimensi bitmap tetap

Version 1.51.0

Ditambahkan

    \t\t\t\t
  • Unit pembacaan tingkat kalimat untuk listen-reading bantu: TPdf.ReadingUnits, TPdf.DocumentReadingUnits dan TPdfView.ReadingUnits melinierkan aliran konten yang dapat dibaca menjadi record TPdfReadingUnit berukuran kalimat dan berurutan — masing-masing membawa teks untuk diucapkan plus jenis semantik, halaman, rectangle highlight, dan tag bahasa, sehingga aplikasi screen reader bisa melangkah satu unit lisan pada satu waktu melalui halaman atau seluruh dokumen
  • \t\t\t\t
  • Navigasi semantik dengan NextReadingUnitOfKind, memungkinkan UI suara melompat ke heading, figure, list item, atau table cell berikutnya maupun sebelumnya tanpa memindai stream secara manual
  • \t\t\t\t
  • BuildReadingUnits mengonversi sembarang TPdfContentFragments langsung menjadi reading unit: heading dan deskripsi figure/alt tetap utuh sementara paragraf dipotong berdasarkan batas kalimat, titik desimal dipertahankan, dan kursor baca menjadi indeks biasa milik pemanggil

Version 1.50.0

Ditambahkan

    \t\t\t\t
  • ValidatePdfA kini dapat memeriksa dokumen PDF 1.5+ yang menyimpan katalog, OutputIntent, atau dictionary lain di dalam object stream terkompresi (/Type /ObjStm). Object stream dibuka dan objek yang dibawanya diselesaikan, sehingga dokumen seperti itu divalidasi atas dasar isinya sendiri alih-alih dilaporkan seolah marker PDF/A mereka hilang

Version 1.49.5

Diperbaiki

    \t\t\t\t
  • ValidatePdfA tidak lagi melaporkan deskripsi pdfaExtension:schemas yang hilang sebagai masalah. Skema pengenal PDF/A (pdfaid) sudah dikenal luas, jadi baik veraPDF maupun PDF/A-2/-3 tidak memerlukan deskripsi extension-schema untuknya, dan menandai ketiadaannya sebelumnya salah melaporkan setiap PDF/A pihak ketiga yang patuh. Dokumen yang dihasilkan library ini sendiri tetap menyertakan deskripsi itu

Version 1.49.4

Diperbaiki

    \t\t\t\t
  • ValidatePdfA kini mendeteksi level conformansi saat pengenal PDF/A ditulis sebagai atribut XML (pdfaid:part="2") alih-alih elemen anak, sehingga dokumen berbentuk atribut tidak lagi dilaporkan dengan level yang tidak diketahui. Ini juga memperbaiki rangkaian masalah di mana level yang tak terdeteksi membuat pemeriksaan spesifik part jatuh kembali ke aturan ketat PDF/A-1 dan salah menandai file tersemat serta transparansi yang diizinkan PDF/A-2 dan PDF/A-3

Version 1.49.3

Diperbaiki

    \t\t\t\t
  • ValidatePdfA kini memeriksa dokumen PDF 1.5+ yang data cross-reference-nya berupa cross-reference stream (file yang tidak memiliki kata kunci trailer). Level conformansi, /ID trailer, dan marker lain dibaca dari dictionary cross-reference stream, sehingga dokumen seperti itu divalidasi atas dasar isinya sendiri alih-alih dilaporkan sepenuhnya tidak patuh

Version 1.49.2

Diperbaiki

    \t\t\t\t
  • ValidatePdfA tidak lagi melaporkan isu font non-embedded yang keliru pada dokumen yang sebenarnya menanam semua font mereka. Heuristik sebelumnya membandingkan jumlah token /FontDescriptor dengan program font tersemat, tetapi setiap font tersemat menyumbang dua token /FontDescriptor (referensi dictionary font plus object descriptor), sehingga setiap file berfont tersemat salah ditandai. Pemeriksaan kini hanya melaporkan dokumen yang mereferensikan font tetapi sama sekali tidak menanam program font, sesuai koreksi ValidatePdfUa yang sepadan

Version 1.49.1

Diperbaiki

    \t\t\t\t
  • Output PDF/A kini divalidasi sebagai PDF/A-1b dan PDF/A-1a yang patuh dengan veraPDF: stream ICC profile OutputIntent sRGB tertanam (dirujuk oleh /DestOutputProfile) kini mendeklarasikan hitungan komponen /N yang diperlukan (3 untuk profil RGB bawaan), sebagaimana diwajibkan ISO 19005-1 6.2.3.2. Dokumen yang dihasilkan SaveAsPdfA sebelumnya gagal validasi PDF/A-1 ketat karena stream profil tujuan tidak menyertakan /N; nilai itu diturunkan dari header profil ICC, jadi profil CMYK atau Gray yang disediakan pemanggil juga menerima hitungan yang benar

Version 1.49.0

Diperbaiki

  • ValidatePdfUa tidak lagi melaporkan identifikasi XMP yang hilang secara keliru pada PDF bertag yang sesuai — pengenal PDF/UA (pdfuaid:part), dc:title, tanggal XMP, dan trailer /ID sekarang dibaca dari byte dokumen asli, bukan dari salinan yang disimpan ulang, yang menghilangkan stream XMP /Metadata dan, untuk file cross-reference-stream, trailer /ID
  • \t\t\t\t
  • ValidatePdfUa koreksi pemeriksaan embedding font sehingga dokumen yang menanam semua font-nya tidak lagi dilaporkan memiliki font non-embedded; kini hanya dokumen yang mereferensikan font tetapi sama sekali tidak menanam program font yang ditandai
  • \t\t\t\t
  • ValidatePdfUa kini menerima elemen struktur Formula yang teks alternatifnya disediakan melalui ActualText alih-alih entri Alt (ISO 14289-1 §7.7), konsisten dengan aturan Figure yang sudah ada

Version 1.48.0

Ditambahkan

  • Seleksi teks programatik pada TPdfView: SelectTextRange (berdasarkan rentang halaman dan karakter) dan SetSelection (berdasarkan rentang per halaman yang eksplisit) memilih teks dari kode — misalnya untuk membaca dan menyorot sebuah bagian; keduanya menggambar ulang dan memicu OnSelectionChange saat seleksi berubah. SelectionRanges membaca seleksi saat ini sebagai rentang karakter per halaman, dan SelectionRectangles mengembalikan rectangle-nya dalam koordinat halaman untuk penyorotan khusus atau scroll-to

Version 1.47.0

Ditambahkan (Ditambahkan)

  • Navigasi field formulir untuk pengisian formulir yang dipandu suara, pada TPdf dan TPdfView: FormFieldTabOrder, FocusedFormFieldIndex, FocusFormField, FocusNextFormField, FocusPreviousFormField, ClearFormFieldFocus dan FocusedFormFieldText. Ini memindahkan kursor field logis di atas field widget halaman sesuai urutan tab (berulang di ujungnya), sehingga pembaca bantu dapat menelusuri formulir, mengumumkan setiap field melalui FormFieldInfo[Index].AlternateName (tooltip /TU), dan mengisinya melalui FormField[Index]
  • Peristiwa TPdfView.OnFormFieldFocusChange, dipicu saat kursor field berpindah (membawa indeks field baru, atau -1 saat dibersihkan)

Version 1.46.0

Ditambahkan (Ditambahkan)

  • Aliran konten untuk baca-dengar bantu: TPdf.ReadableContent, TPdf.ReadablePageContent, TPdf.DocumentReadableContent dan TPdfView.ReadableContent mengembalikan daftar terurut item semantik TPdfContentFragment, masing-masing membawa teks yang diucapkan (glyph nyata, atau ActualText/Alt untuk figure), jenis fragmen (heading dengan level, paragraf, figure, item daftar, sel tabel, link, plain), bahasa, halaman berbasis satu, dan rectangle sorot blok serta per baris. PDF bertag dilinearisasi dalam urutan baca logis dari structure tree; halaman tanpa tag kembali ke urutan render sehingga dokumen apa pun dapat dibacakan
  • Penyorotan baca tersinkron pada TPdfView: SetReadingHighlight, ClearReadingHighlight dan ReadingHighlightColor yang dipublikasikan menyorot blok yang sedang dibaca, di atas overlay pencarian dan seleksi
  • Tipe publik baru TPdfContentFragment, TPdfContentFragments, TPdfReadableContent, TPdfContentFragmentKind dan TPdfReadingOrderSource, serta helper baru ClassifyStructType

Version 1.45.0

Ditambahkan (Ditambahkan)

  • ValidatePdfUa kini juga menelusuri live tagged structure tree dan melaporkan tiga pelanggaran konten berkepercayaan tinggi yang tidak dapat dideteksi oleh pemindaian tingkat byte: elemen Figure tanpa entri Alt maupun ActualText (ISO 14289-1, 7.3), elemen Formula tanpa atribut Alt (7.7), dan elemen Note yang tidak memiliki ID unik (7.9). Tiga nilai TPdfUaValidationIssue baru menampilkan ini: pvuaiFigureMissingAlt, pvuaiFormulaMissingAlt dan pvuaiNoteMissingId. Penelusuran tree dilewati untuk dokumen tanpa tag
  • Helper publik baru ValidatePdfUaStructureElements menerapkan aturan structure-tree tersebut pada daftar elemen datar (seperti yang dikembalikan TPdf.StructureElements), sehingga pemeriksaan dapat dijalankan atau diuji unit tanpa memuat dokumen penuh

Version 1.44.5

Diperbaiki (Diperbaiki)

  • Pemeriksaan embedding font ValidatePdfA (pvaiFontNotEmbedded, ISO 19005-1, 6.3.4) kini juga mendeteksi simple font yang tidak disematkan dan tidak membawa /FontDescriptor, terutama 14 font standar Type 1 (Helvetica, Times, Courier, dan seterusnya) yang menurut PDF/A harus disematkan tanpa pengecualian. Sebelumnya font semacam itu tidak terdeteksi; pemeriksaan kini juga menghitung dictionary simple-font (/Type1, /TrueType, /MMType1) terhadap program font yang disematkan, mengikuti perbaikan PDF/UA di 1.44.3

Version 1.44.4

Diperbaiki (Diperbaiki)

  • ValidatePdfVT kini menolak tree DPart ISO 16612-2 §6.5 yang salah format ketika /DParts berupa array referensi datar alih-alih array of array yang disyaratkan, atau ketika sebuah leaf DPart mengulang halaman /Start sebagai /End padahal rentangnya hanya satu halaman
  • ValidatePdfVT kini memvalidasi nama /NodeNameList sebagai nilai XML NMTOKEN setelah ekspansi escape nama PDF #xx, sehingga nama level hierarki yang tidak valid dilaporkan melalui pvviMissingDPartRoot alih-alih diterima sebagai struktur DPart yang dapat dipakai

Version 1.44.3

Diperbaiki (Diperbaiki)

  • Pemeriksaan embedding font ValidatePdfUa (pvuaiFontNotEmbedded, ISO 14289-1, 7.21.4) kini juga mendeteksi simple font yang tidak disematkan dan tidak membawa /FontDescriptor, terutama 14 font standar Type 1 (Helvetica, Times, Courier, dan seterusnya) yang bagi PDF/UA tidak mendapat pengecualian embedding. Sebelumnya font seperti itu luput dan dokumen yang memakainya bisa dilaporkan patuh; kini pemeriksaan juga menghitung dictionary simple-font (/Type1, /TrueType, /MMType1) terhadap program font yang tertanam

Version 1.44.2

Diperbaiki (Diperbaiki)

  • ValidatePdfVT kini membiarkan marker pdfvtid:GTS_PDFVTVersion yang ada tetapi tidak dikenali sebagai pvcUnknown alih-alih menurunkannya ke pvcNone. Ini menjaga string tingkat file yang tidak valid seperti PDF/VT-2s tetap dapat dibedakan dari dokumen yang tidak membawa marker PDF/VT; PDF/VT-2s diidentifikasi oleh MIME stream header dalam ISO 16612-2 Annex A, bukan oleh marker XMP file PDF
  • Pemeriksaan /DPartRoot kini memvalidasi semantik tree ISO 16612-2 §6.5 dengan lebih ketat: /DPartRootNode dan /NodeNameList harus menggambarkan kedalaman DPart yang sebenarnya, tautan parent DPart harus membentuk tree, /Start dan /DParts saling eksklusif, dan setiap /DPart halaman harus menunjuk ke leaf DPart yang mencakupnya dalam urutan depth-first yang sama dengan page tree

Version 1.44.1

Diperbaiki

  • SaveAsPdfVT kini menulis Document Part Hierarchy minimal ISO 16612-2 §6.5 ketika PDF sumber tidak memiliki /DPartRoot yang dapat dipakai. Tree yang dihasilkan menautkan setiap halaman melalui /DPart, mempertahankan hierarchy valid yang sudah ada, dan menyerahkan metadata recipient/DPM yang lebih kaya kepada alur kerja pemanggil
  • ValidatePdfVT kini memvalidasi struktur DPart yang dapat dipakai, membaca nilai XMP PDF/VT dari atribut RDF maupun teks elemen, dan menegakkan pairing dasar PDF/VT-ke-PDF/X yang tepat: PDF/VT-1 memerlukan PDF/X-4, sedangkan PDF/VT-2 memerlukan PDF/X-4p, PDF/X-5g, atau PDF/X-5pg
  • TPdfVTSaveOptions.Conformance = pvc2 tidak lagi menulis marker PDF/VT-2 satu file yang tidak valid. Penulis satu file menormalkan keluaran ke PDF/VT-1 karena PDF/VT-2 memerlukan semantik file-set

Version 1.44.0

Ditambahkan (Ditambahkan)

  • ValidatePdfUa kini juga melaporkan pelanggaran PDF/UA pada tingkat konten yang dapat diperiksa lewat byte, selain marker format file: program font yang tidak tertanam (ISO 14289-1, 7.21.4), font yang tidak memiliki CMap /ToUnicode ketika tidak ada encoding simple-font yang dikecualikan (7.21.7), dan dokumen yang membawa anotasi tetapi tidak mendeklarasikan urutan tab halaman /Tabs /S (7.18.3)
  • Tiga nilai TPdfUaValidationIssue baru — pvuaiFontNotEmbedded, pvuaiFontMissingToUnicode dan pvuaiMissingTabsOrder — ditampilkan oleh ValidatePdfUa dan di preflight report. Nilai-nilai ini adalah heuristik kasar yang ditujukan sebagai petunjuk preflight, bukan verifikasi ISO 14289-1 penuh

Version 1.43.1

Diperbaiki (Diperbaiki)

  • SaveAsPdfUa kini menegakkan entri katalog wajib ISO 14289-1, 7.1 /ViewerPreferences /DisplayDocTitle true dan /MarkInfo /Marked true /Suspects false bahkan ketika dokumen sumber sudah menyediakan dictionary itu dengan nilai yang hilang atau saling bertentangan. Sebelumnya marker hanya disuntikkan saat dictionary benar-benar tidak ada, sehingga sumber yang membawa, misalnya, /ViewerPreferences tanpa DisplayDocTitle atau /MarkInfo dengan /Marked false akan kembali menjadi file yang tidak patuh
  • Kunci yang sudah ada dalam dictionary /ViewerPreferences atau /MarkInfo tetap dipertahankan, dan dictionary yang diberikan sebagai referensi tidak langsung diselesaikan terlebih dahulu sebelum kunci wajib diterapkan

Version 1.43.0

Ditambahkan (Ditambahkan)

  • ValidatePdfA kini menerapkan aturan PDF/A-2 / PDF/A-3 untuk file tertanam dan terkait serta untuk teks Level U. File tertanam masih ditolak untuk PDF/A-1; untuk PDF/A-3, file tertanam yang tidak memiliki kunci /AFRelationship yang diwajibkan (ISO 19005-3 Annex E) akan ditandai, sedangkan lampiran PDF/A-2 diizinkan (patuhannya sendiri tidak diverifikasi secara rekursif). Masalah baru pvaiUnicodeMappingMissing melaporkan dokumen PDF/A-2u atau PDF/A-3u yang font-nya tidak memiliki pemetaan /ToUnicode (ISO 19005-2 6.2.11.7). Transparansi dan optional content tetap hanya ditandai untuk PDF/A-1

Version 1.42.0

Ditambahkan (Ditambahkan)

  • PDF/A-2 (ISO 19005-2) dan PDF/A-3 (ISO 19005-3) kini didukung pada semua tiga level conformance — a, b, dan u — oleh SaveAsPdfA, ValidatePdfA, dan properti PdfAConformance. Enumerasi TPdfAConformance mendapat pac2a, pac2u, pac3a, dan pac3u (PDF/A-1 tidak punya Level u). Saat menyimpan, ditulis pdfaid:part yang cocok (2 atau 3) dan pdfaid:conformance (A, B, atau U), sambil mempertahankan subtipe OutputIntent GTS_PDFA1 yang dipertahankan ISO 19005-2 demi kompatibilitas. Permintaan Level A tetap diturunkan ke Level B yang sesuai (untuk bagian apa pun) ketika dokumen tidak memiliki struktur bertag yang dibutuhkan level itu

Version 1.41.0

Ditambahkan (Ditambahkan)

  • ValidatePdfA kini mendeteksi pelanggaran PDF/A pada tingkat konten yang tidak bisa diperbaiki oleh penyuntikan marker, selain marker struktural yang sudah dilaporkan: JavaScript dan aksi terlarang lain, additional-actions (/AA), file tertanam, LZWDecode, transparansi (soft mask dan transparency group), optional content (/OCProperties), subtype anotasi terlarang (FileAttachment, Sound, Movie, 3D, Screen), AcroForm /NeedAppearances true dan /XFA, font yang deskriptornya tidak memiliki program font tertanam, serta klaim Level A yang dibuat tanpa struktur bertag yang diwajibkan ISO 19005-1 6.8. Pemeriksaan transparansi, optional-content, dan file tertanam hanya berlaku untuk PDF/A-1 (fitur ini diizinkan di PDF/A-2 dan PDF/A-3). Nilai TPdfAValidationIssue baru menampilkan tiap kasus; nilai yang sudah ada tetap sama

Version 1.40.3

Diperbaiki (Diperbaiki)

  • SaveAsPdfA kini menghapus enkripsi apa pun dari dokumen sumber sebelum menghasilkan keluaran PDF/A. ISO 19005-1 6.1.3 melarang kunci trailer /Encrypt, tetapi alur penyimpanan sebelumnya mempertahankan security handler sumber, sehingga menyimpan dokumen terenkripsi sebagai PDF/A menghasilkan file yang terenkripsi dan tidak patuh. Penyimpanan PDF/A kini mendekripsi dokumen terlebih dahulu. Dokumen yang tidak terenkripsi tidak terpengaruh

Version 1.40.2

Diperbaiki (Diperbaiki)

  • SaveAsPdfA tidak lagi mengeluarkan klaim conformance PDF/A Level A yang salah. Saat Level A (pac1a) diminta tetapi dokumen sumber tidak memiliki marker struktur bertag yang diwajibkan ISO 19005-1 6.8 — sebuah /StructTreeRoot di katalog dan dictionary /MarkInfo dengan /Marked true — file yang disimpan kini diidentifikasi sebagai Level B yang sesuai (pdfaid:conformance = B) alih-alih mengklaim Level A. Keluaran PDF/A-1b yang murni visual tidak terpengaruh

Version 1.40.1

Diperbaiki (Diperbaiki)

  • Validasi kepatuhan versi PDF kini diperketat sehingga aksi SetOCGState (set-optional-content-group-state) dikenali sebagai fitur PDF 1.5. Menyimpan ke target PDF 1.2, 1.3, atau 1.4 yang berisi aksi SetOCGState kini ditolak agar sesuai ISO 32000-1 (Table 198); sebelumnya aksi seperti itu bisa lolos ke keluaran versi lebih rendah. Aksi SetState PDF 1.2 yang berbeda dan sudah usang tetap diterima mulai PDF 1.2

Version 1.40.0

Ditambahkan (Ditambahkan)

  • Memasang API hulu FPDFPageObj_AddExistingMark(), yang menempelkan content mark yang sudah ada ke page object. Saat page object berurutan berbagi mark yang sama, PDF yang disimpan menggabungkannya menjadi satu mark yang mencakup semuanya; objek yang tidak berurutan mendapat salinan terpisah
  • Memasang API hulu FPDFTextObj_SetFontSize() untuk mengubah ukuran titik dari text object yang sudah ada, melengkapi binding FPDFTextObj_GetFontSize() yang sudah ada

Diubah (Diubah)

  • Memperbarui DLL runtime PDFium bawaan (Win32 dan Win64, build standar dan V8) ke snapshot hulu 2026-06-02

Version 1.39.53

Diubah (Diubah)

  • Mengubah demo Delphi PDFViewer, SplitView, dan MultiPageViewer agar membuka dokumen dalam mode Zoom to Page secara default
  • Render awal kini memuat seluruh halaman ke permukaan viewer sebelum pengguna memilih level zoom manual
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.53

Version 1.39.52

Diubah (Diubah)

  • Memperkaya Demo\Lazarus\CreatePDF sehingga contoh pengantar kini menghasilkan PDF dua halaman dengan vector path, konten tabel, gambar tertanam, anotasi teks, teks berotasi, dan langkah pembuatan dokumen yang lebih jelas
  • Menambahkan halaman README.html yang dipoles untuk setiap folder demo Delphi, C++Builder, dan Lazarus, menggantikan README demo yang masih berbasis teks dengan panduan yang bisa dibaca di browser
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.52

Version 1.39.51

  • Memperkaya ringkasan batch Demo\Delphi\PreflightReportCli dengan total status standar untuk Pass, Action required, dan Review pada standar yang dipilih
  • Baris per file kini menyertakan jumlah action-required dan review di ringkasan TXT / HTML / JSON / CSV, sehingga artefak CI lebih mudah diperiksa tanpa membuka setiap report yang dihasilkan
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.51

Version 1.39.50

  • Memperkaya mode batch direktori Demo\Delphi\PreflightReportCli sehingga batchdir=folder mengumpulkan jalur PDF yang ditemukan, mengurutkannya, lalu menghasilkan report dalam urutan yang stabil
  • Pemindaian direktori rekursif kini menghasilkan urutan report dan baris ringkasan yang dapat direproduksi, sedangkan pemrosesan eksplisit batch=list.txt tetap mempertahankan urutan file daftar
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.50

Version 1.39.49

  • Memperkaya ringkasan batch Demo\Delphi\PreflightReportCli untuk mencatat setelan run: jenis sumber, jalur sumber, status rekursif, direktori output, format report, standar yang dipilih, dan mode failon=
  • Ringkasan JSON kini menyertakan objek run, ringkasan TXT dan HTML menampilkan bagian setelan run, dan baris CSV mengulangi kolom audit yang sama untuk spreadsheet dan pipeline CI
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.49

Version 1.39.48

  • Memperkaya penamaan keluaran batch Demo\Delphi\PreflightReportCli sehingga nama file input duplikat yang berbagi satu outdir= tidak lagi saling menimpa report yang dihasilkan
  • Run batch kini menambahkan akhiran -2, -3, dan seterusnya ketika jalur report yang dihasilkan sudah dialokasikan dalam run yang sama, dan ringkasan mencatat jalur report final yang aman dari collision
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.48

Version 1.39.47

  • Memperkaya ringkasan batch Demo\Delphi\PreflightReportCli sehingga keluaran TXT dan JSON kini menyertakan total agregat untuk total file, file yang diproses, file yang gagal, issue, dan kecocokan failon=
  • Ringkasan CSV tetap menjadi tabel baris murni untuk konsumen yang sudah ada, sementara ringkasan HTML tetap menampilkan metrik agregat yang sama di header dashboard
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.47

Version 1.39.46

  • Memperkaya Demo\Delphi\PreflightReportCli dengan summary=batch.html / .htm agar run batch dapat menghasilkan dashboard yang bisa dibaca browser selain manifest TXT / CSV / JSON
  • Ringkasan HTML menampilkan metrik total, diproses, gagal, issue, dan kecocokan failon=, lalu mencantumkan setiap input dengan tautan report, status, jumlah, dan teks error
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.46

Version 1.39.45

  • Memperkaya Demo\Delphi\PreflightReportCli dengan batchdir=folder dan recursive agar skrip dapat memindai folder PDF secara langsung tanpa lebih dulu menulis file daftar
  • Mode batch direktori memakai ulang perilaku outdir=, summary=, standards=, dan failon= dari mode batch berbasis daftar, sedangkan pemindaian non-rekursif hanya mencakup folder yang dipilih dan recursive menyertakan subfolder
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.45

Version 1.39.44

  • Memperkaya Demo\Delphi\PreflightReportCli dengan summary=batch.csv|json|txt agar run batch dapat menghasilkan manifest yang bisa dibaca mesin di samping report per file
  • Ringkasan batch menyertakan setiap jalur input, jalur report, status, jumlah standar, jumlah lulus, jumlah issue, status kecocokan failon=, dan teks error untuk job CI dan skrip eksternal
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.44

Version 1.39.43

  • Memperkaya Demo\Delphi\PreflightReportCli dengan batch=list.txt dan outdir=reports agar skrip dapat menghasilkan preflight report untuk daftar file PDF dalam satu run
  • Mode batch melewati baris kosong dan komentar #, menurunkan nama report .preflight.<ext> dari PDF input, melanjutkan setelah error per file, dan merangkum file yang diproses serta gagal sebelum kembali
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.43

Version 1.39.42

  • Memperkaya Demo\Delphi\PreflightReportCli dengan failon=none|issues|action|review agar job CI dapat mengubah hasil preflight yang dihasilkan menjadi exit code yang deterministik
  • CLI kini mengembalikan exit code 2 ketika aturan failon= yang dipilih cocok setelah file report dan PDF attached-report opsional selesai dihasilkan, sementara error runtime tetap mengembalikan exit code 1
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.42

Version 1.39.41

  • Memperkaya Demo\Delphi\PreflightReportCli dengan attach=output.pdf agar report preflight yang dihasilkan dapat disematkan sebagai attachment tingkat dokumen dalam salinan PDF baru
  • CLI mempertahankan file report TXT / HTML / Markdown / JSON / CSV yang dihasilkan di disk dan menolak melampirkannya kembali ke jalur PDF input asli, sehingga mengurangi risiko penimpaan tak sengaja
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.41

Version 1.39.40

  • Menambahkan Demo\Delphi\PreflightReportCli, pendamping konsol Delphi untuk pembuatan FPdfPreflightReport yang bisa discriptkan tanpa membuka viewer
  • CLI mendukung pembuatan sampel tanpa argumen plus argumen input / output, password opsional, format keluaran text / html / md / json / csv, serta filter standards= untuk PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R, dan PDF/VT
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.40

Version 1.39.39

  • Memperkaya FPdfPreflightReport dengan TPdfPreflightReport.ToMarkdown dan SaveMarkdownToFile agar report preflight dapat diekspor sebagai Markdown yang ramah issue tracker
  • Memperbarui sampel PreflightReport Delphi, C++Builder, dan Lazarus dengan pergantian pratinjau Markdown serta aksi Save MD di samping alur kerja TXT / HTML / JSON / CSV yang sudah ada
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.39

Version 1.39.38

  • Memperkaya sampel SecurityAudit Delphi, C++Builder, dan Lazarus dengan ekspor report audit JSON di samping alur kerja simpan / salin TXT yang sudah ada
  • Report JSON berisi baris format, generatedAt, summary, findingCount, dan findings terstruktur dengan field severity, area, dan detail
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.38

Version 1.39.37

  • Memperkaya FPdfPreflightReport dengan TPdfPreflightReport.ToCsv dan SaveCsvToFile agar report preflight dapat diekspor sebagai CSV yang ramah spreadsheet
  • Memperbarui sampel PreflightReport Delphi, C++Builder, dan Lazarus dengan pergantian pratinjau CSV serta aksi Save CSV di samping alur kerja TXT / HTML / JSON yang sudah ada
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.37

Version 1.39.36

  • Memperkaya FPdfPreflightReport dengan TPdfPreflightReport.IssueCategoryCounts plus tipe reusable TPdfPreflightIssueCategoryCount dan TPdfPreflightIssueCategoryCounts untuk mengagregasi issue tingkat marker per kategori
  • Memperbarui TPdfPreflightReport.ToText, ToHtml, dan ToJson agar keluaran PreflightReport yang dihasilkan menyertakan ringkasan jumlah per kategori issue di samping baris per standar dan rekomendasi issue yang rinci
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.36

Version 1.39.35

  • Mengganti nama sampel PrintDialog yang diperluas menjadi PrintPreferences di Delphi, C++Builder, dan Lazarus agar nama demo kini cocok dengan workflow preferensi cetak penulis PDF, pencetakan N-up, penyaringan ganjil / genap, grayscale, border sel, dan pemetaan duplex
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.35

Version 1.39.34

  • Memperkaya Demo\Delphi\PrintPDF dengan pemuatan PDF drag-and-drop dan mendokumentasikan workflow Demo\CBuilder\PrintPDF yang sudah ada di samping sampel PrintPDF Delphi dan Lazarus
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.34

Version 1.39.33

  • Menambahkan Demo\CBuilder\SplitView, melengkapi matriks sampel SplitView di Delphi, C++Builder, dan Lazarus
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.33

Version 1.39.32

  • Menambahkan Demo\Lazarus\SplitView, menghadirkan perbandingan PDF berdampingan ke Lazarus dengan tata letak dua atau tiga panel, navigasi tampilan aktif, perintah tersinkron, preset zoom, dan rotasi
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.32

Version 1.39.31

  • Menambahkan Demo\Lazarus\PrintPDF, menghadirkan workflow cetak PDF standar ke Lazarus dengan navigasi pratinjau, rentang halaman, salinan, mode collate, progres, dan pembatalan
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.31

Version 1.39.30

  • Menambahkan Demo\Lazarus\FontProperties, melengkapi matriks sampel FontProperti di Delphi, C++Builder, dan Lazarus
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.30

Version 1.39.29

  • Menambahkan Demo\CBuilder\FontProperties, menghadirkan inspeksi metadata karakter dan font yang terindeks ke C++Builder di samping sampel Delphi
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.29

Version 1.39.28

  • Menambahkan Demo\Delphi\ExtractTextPages, melengkapi matriks sampel ekstraksi teks per halaman di Delphi, C++Builder, dan Lazarus
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.28

Version 1.39.27

  • Menambahkan Demo\Lazarus\PrintDialog, melengkapi matriks sampel PrintDialog di Delphi, C++Builder, dan Lazarus
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.27

Version 1.39.26

  • Menambahkan Demo\CBuilder\PrintDialog, menghadirkan workflow pencetakan N-up dan preferensi cetak penulis PDF ke C++Builder di samping sampel Delphi
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.26

Version 1.39.25

  • Menambahkan Demo\CBuilder\ViewerInteractionLab, melengkapi matriks sampel ViewerInteractionLab di Delphi, C++Builder, dan Lazarus
  • Memperbarui workflow build library dan output paket C++Builder Win64 agar method interaksi viewer TPdfView terhubung dengan benar di demo Win64
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.25

Version 1.39.24

  • Menambahkan Demo\Lazarus\ViewerInteractionLab, menghadirkan workflow interaksi viewer terfokus ke Lazarus di samping sampel Delphi
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.24

Version 1.39.23

  • Menambahkan Demo\Lazarus\SearchAndSelect, melengkapi matriks sampel SearchAndSelect di Delphi, C++Builder, dan Lazarus
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.23

Version 1.39.22

  • Menambahkan Demo\CBuilder\ContentExtractionLab dan Demo\Lazarus\ContentExtractionLab, menghadirkan workflow ekstraksi konten multi-kategori ke semua IDE demo yang didukung
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.22

Version 1.39.21

  • Memperkaya Demo\Delphi\PreflightReport, Demo\Lazarus\PreflightReport, dan Demo\CBuilder\PreflightReport dengan pemilih format pratinjau agar pengguna dapat memeriksa keluaran teks atau JSON sebelum menyimpan report
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.21

Version 1.39.20

  • Menambahkan ekspor JSON ke FPdfPreflightReport melalui TPdfPreflightReport.ToJson dan SaveJsonToFile, menghasilkan ringkasan yang bisa dibaca mesin, status / prioritas per standar, tindakan berikutnya, dan detail issue
  • Memperbarui Demo\Delphi\PreflightReport, Demo\Lazarus\PreflightReport, dan Demo\CBuilder\PreflightReport dengan aksi Save JSON di samping ekspor TXT / HTML
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.20

Version 1.39.19

  • Memperkaya FPdfPreflightReport dengan TPdfPreflightStatus, kategori issue, prioritas per standar, dan panduan tindakan berikutnya di report TXT / HTML
  • Memperbarui Demo\Delphi\PreflightReport, Demo\Lazarus\PreflightReport, dan Demo\CBuilder\PreflightReport agar menampilkan status, prioritas, jumlah issue, dan tindakan berikutnya di grid ringkasan
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.19

Version 1.39.18

  • Menambahkan Demo\Lazarus\SecurityAudit, melengkapi matriks demo Delphi, C++Builder, dan Lazarus untuk workflow audit permukaan risiko PDF read-only
  • Sampel Lazarus menghitung permission, attachment, aksi JavaScript, anotasi tautan URI / Launch, web link, signature, status XFA, ketersediaan helper V8 / XFA, dan callback fitur yang tidak didukung, lalu menyimpan atau menyalin daftar temuan sebagai report TXT
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.18

Version 1.39.17

  • Menambahkan Demo\CBuilder\SecurityAudit, menghadirkan workflow audit permukaan risiko PDF read-only ke C++Builder di samping sampel Delphi yang sudah ada
  • Sampel C++Builder menghitung permission, attachment, aksi JavaScript, anotasi tautan URI / Launch, web link, signature, status XFA, ketersediaan helper V8 / XFA, dan callback fitur yang tidak didukung, lalu menyimpan atau menyalin daftar temuan sebagai report TXT
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.17

Version 1.39.16

  • Menambahkan Demo\CBuilder\SearchAndSelect, menghadirkan workflow viewer SearchAndSelect mandiri ke C++Builder di samping sampel Delphi yang sudah ada
  • Sampel C++Builder membuat atau membuka PDF, mencantumkan kecocokan seluruh halaman dengan pratinjau nomor halaman / indeks karakter, mendukung navigasi Previous / Next dan klik ganda, dan menyorot kecocokan pada halaman aktif dengan HighlightSearchText
  • Sampel ini juga mengekspos opsi AllowUserTextSelection, SelectedText, SelectAll, CopySelectionToClipboard, ClearSelection, OnSelectionChange, dan DisplayMode spread; metadata versi kini melaporkan 1.39.16

Version 1.39.15

  • Menambahkan Demo\CBuilder\WatermarkStamp, melengkapi matriks demo Delphi, Lazarus, dan C++Builder untuk workflow watermark dan stamp Form XObject yang dapat dipakai ulang
  • Sampel C++Builder membuat PDF target dan stamp, memakai ulang halaman stamp melalui CreateXObjectFromPage, menerapkan transformasi TPdfMatrix, dan menyimpan watermark terpusat, stamp sudut, serta label nomor halaman
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.15

Version 1.39.14

  • Menambahkan Demo\Lazarus\WatermarkStamp, menghadirkan workflow watermark dan stamp Form XObject yang dapat dipakai ulang ke Lazarus
  • Sampel Lazarus membuat PDF target dan stamp, memakai ulang halaman stamp melalui CreateXObjectFromPage, menerapkan transformasi TPdfMatrix, dan menyimpan watermark terpusat, stamp sudut, serta label nomor halaman
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.14

Version 1.39.13

  • Menambahkan Demo\CBuilder\PreflightReport, melengkapi matriks demo Delphi, Lazarus, dan C++Builder untuk workflow FPdfPreflightReport yang dapat dipakai ulang
  • Sampel C++Builder memakai FPdfPreflightReport.hpp untuk menghasilkan ringkasan standar, pratinjau report TXT, file report TXT / HTML, dan perilaku Open Last Report
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.13

Version 1.39.12

  • Menambahkan Demo\Lazarus\PreflightReport, menghadirkan workflow report preflight PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R, dan PDF/VT ke Lazarus
  • Sampel Lazarus dapat membuka atau membuat PDF, memilih standar target, mempratinjau baris ringkasan dan keluaran report TXT, menyimpan report TXT / HTML, dan membuka report yang paling baru disimpan
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.12

Version 1.39.11

  • Memperkaya Demo\Delphi\SearchAndSelect dengan daftar hasil pencarian seluruh halaman yang mencatat nomor halaman, indeks karakter, dan teks pratinjau
  • Menambahkan navigasi kecocokan Previous / Next dan lompat hasil dengan klik ganda sambil mempertahankan perilaku HighlightSearchText pada halaman aktif
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.11

Version 1.39.10

  • Memperkaya Demo\Delphi\SecurityAudit dengan aksi Save Report dan Copy Report yang mengekspor ringkasan saat ini dan baris temuan sebagai report audit TXT
  • Demo kini membersihkan status ekspor report saat panel audit di-reset, sehingga report yang disalin atau disimpan tetap selaras dengan temuan yang terlihat
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.10

Version 1.39.9

  • Memperkaya Demo\Delphi\ContentExtractionLab dengan penyimpanan PDF sumber, penyalinan report ke clipboard, dan aksi pemilihan kategori all / none
  • Demo kini membatalkan report saat ini ketika pilihan kategori berubah, sehingga ekspor TXT / JSON mencerminkan cakupan ekstraksi yang terlihat
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.9

Version 1.39.8

  • Menambahkan Demo\Delphi\ContentExtractionLab, sampel workflow ekstraksi konten terpadu untuk metadata dokumen, teks halaman, page object, gambar, attachment, tautan, anotasi, bookmark, dan metrik font / karakter
  • Sampel ini dapat membuka PDF yang sudah ada atau membuat PDF sintetis dengan konten teks, gambar, attachment, dan anotasi, lalu menghasilkan baris ringkasan dan report TXT / JSON terperinci
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.8

Version 1.39.7

  • Menambahkan Lib\FPdfPreflightReport.pas, helper report yang dapat dipakai ulang dan membungkus ValidatePdfA, ValidatePdfUa, ValidatePdfE, ValidatePdfX, ValidatePdfR, dan ValidatePdfVT ke dalam satu objek TPdfPreflightReport
  • Menambahkan Demo\Delphi\PreflightReport, sampel workflow yang membuka atau membuat PDF, memilih standar target, mempratinjau baris ringkasan dan rekomendasi issue, dan menyimpan report TXT atau HTML
  • Report yang dihasilkan secara eksplisit menjelaskan batas validasi bawaan pada level marker agar aplikasi dapat memasangkannya dengan alat preflight level konten khusus bila diperlukan
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, daftar project paket, dan metadata versi installer agar melaporkan 1.39.7

Version 1.39.6

  • Menambahkan Demo\Delphi\SearchAndSelect, sampel workflow viewer terfokus untuk penyorotan pencarian, seleksi teks, pratinjau teks terpilih, salin, hapus, dan mode tampilan spread
  • Sampel ini mendemonstrasikan HighlightSearchText, opsi pencarian match-case / whole-word, AllowUserTextSelection, SelectedText, SelectAll, CopySelectionToClipboard, dan ClearSelection tanpa menambah API library baru
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.6

Version 1.39.5

  • Memperluas Demo\Delphi\ViewerInteractionLab menjadi sampel UX viewer bergaya SearchAndSelect dengan HighlightSearchText, opsi match-case / whole-word, pratinjau teks terpilih, dan kontrol seleksi / clipboard yang sudah ada
  • Memperluas Demo\Delphi\PrintDialog untuk memeriksa preferensi cetak penulis PDF: PrintCopies, PrintPageRanges, PrintScaling, PrintPaperHandling, dan pemetaan duplex SetPdfPrintPaperHandlingDevMode yang terlihat
  • Menambahkan Demo\Delphi\SecurityAudit, sampel permukaan risiko read-only yang mencantumkan permission, attachment, JavaScript dokumen, tautan URI / Launch, web link, signature, status XFA, dan ketersediaan helper V8 / XFA
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.5

Version 1.39.4

  • Menambahkan Demo\CBuilder\ImageToPDF dan Demo\Lazarus\ImageToPDF, melengkapi matriks sampel ImageToPDF di Delphi, C++Builder, dan Lazarus
  • Sampel baru ini mendemonstrasikan pemilihan banyak gambar, pratinjau gambar terpilih, satu halaman PDF per gambar, ukuran halaman A4 portrait / landscape, penskalaan gambar terpusat, progres per gambar, dan membuka PDF yang dihasilkan setelah disimpan
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.4

Version 1.39.3

  • Menambahkan Demo\CBuilder\BatchExport, menghadirkan workflow ekspor PDF ke JPG multi-file ke C++Builder di samping sampel Delphi dan Lazarus yang sudah ada
  • Sampel ini mendemonstrasikan LoadCustomDocument, IPdfCancellationTokenSource, input TFileStream streaming, progres per file dan per halaman, penanganan pembatalan, input DPI / quality / password, dan pembukaan folder output setelah selesai
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.3

Version 1.39.2

  • Menambahkan Demo\Delphi\WatermarkStamp, sampel workflow Form XObject yang dapat dijalankan yang membuat PDF target dan PDF stamp yang dapat dipakai ulang, lalu menerapkan watermark terpusat, stamp kanan atas, dan label nomor halaman di setiap halaman
  • Sampel ini mendemonstrasikan CreateXObjectFromPage, InsertFormObjectFromXObject, TPdfMatrix, dan FPDFPageObj_SetMatrix tanpa menambah API library baru
  • Memperbarui Docs\en-us\Examples.html agar memakai pola TPdfMatrix.Handle saat ini ketika meneruskan matrix ke FPDFPageObj_SetMatrix
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.2

Version 1.39.1

  • Menambahkan Demo\Delphi\ViewerInteractionLab, sampel TPdfView terfokus untuk mode tampilan, mode fit, warna halaman, rotasi, seleksi teks pengguna, aksi clipboard, dan umpan balik koordinat DeviceToPage
  • Menambahkan Demo\CBuilder\StandardsLab / Demo\Lazarus\StandardsLab agar pengguna Lazarus dapat menjalankan workflow validasi dan keluaran marker PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R, dan PDF/VT
  • Mencantumkan unit standar di Lib\37.0\PDFiumPas.dproj dan Lib\FPC\PDFiumLaz.lpk serta memperbaiki build demo Delphi SplitView dengan menghapus impor ganda Winapi.ShellAPI
  • Memperbaiki penghalang batch-build demo Delphi di BatchExport, PDFViewer, MultiPageViewer, dan SplitView tanpa mengubah perilaku runtime-nya
  • Memperbaiki kompatibilitas batch-build demo C++Builder di PDFViewer dan MultiPageViewer dengan mengganti nullptr menjadi NULL untuk mode project saat ini
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.1

Version 1.39.0

  • Menambahkan Demo\Delphi\StandardsLab, sampel workflow standar yang dapat dijalankan yang memuat atau membuat PDF, menjalankan ValidatePdfA, ValidatePdfUa, ValidatePdfE, ValidatePdfX, ValidatePdfR, dan ValidatePdfVT, lalu menampilkan conformance yang terdeteksi, status lulus/gagal, dan jumlah issue dalam satu grid
  • Tombol simpan StandardsLab memanggil SaveAsPdfA, SaveAsPdfUa, SaveAsPdfE, SaveAsPdfX, SaveAsPdfR, dan SaveAsPdfVT, sehingga keluaran marker standar PDF terlihat tanpa menulis harness khusus
  • Memperbarui TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.0

Version 1.38.0

  • Overlay pencarian dan seleksi teks TPdfView kini memakai alpha blending nyata alih-alih logical mask painting, sehingga konten halaman di bawah sorotan tetap terjaga
  • Menambahkan SetPdfPrintPaperHandlingDevMode untuk memetakan TPrintPaperHandling ke nilai Windows DEVMODE.dmDuplex: DMDUP_SIMPLEX, DMDUP_HORIZONTAL, dan DMDUP_VERTICAL
  • TPdfView.SmoothScroll kini menganimasikan perintah scrollbar baris / halaman dalam segmen yang dikendalikan timer; pelacakan thumb tetap langsung
  • Memperbarui TPdf.AboutInfo dan metadata versi installer agar melaporkan 1.38.0

Version 1.37.0

  • TPdf kini memiliki render lock per instance yang menserialkan jalur RenderPage, RenderTile, RenderPageProgressive, reload halaman, dan unload dokumen. Render yang digerakkan worker lewat komponen bersama kini praktis, sementara aplikasi tetap mengoordinasikan perubahan dan umur dokumen
  • Memperbaiki wrapper bitmap zero-copy agar menolak layout DIB TBitmap bottom-up dan beralih ke buffer milik PDFium sebelum menyalin keluar, menghilangkan kegagalan stride-corruption / access-violation di tes render VCL
  • Memperketat perilaku seleksi TPdfView: AllowUserTextSelection hanya membatasi input pengguna, API seleksi tingkat kode tetap merender, dan SelectAll mengikuti spread yang benar-benar terlihat sehingga halaman sampul tidak lagi memilih halaman 2. Tes Delphi, Lazarus, dan C++Builder diperluas sesuai itu
  • Memperbarui TPdf.AboutInfo dan metadata versi installer agar melaporkan 1.37.0

Version 1.36.0

  • Mengaktifkan pemilihan teks oleh pengguna akhir di TPdfView — properti AllowUserTextSelection yang disisihkan di v1.17.0 kini menggerakkan alur drag-select yang lengkap. Klik kiri pada karakter teks masuk ke mode pilih (hit-test auto); klik kiri pada area kosong tetap melakukan pan seperti sebelumnya. Widget form-fill tetap memegang prioritas, jadi mengklik field form masih memfokuskan field, bukan memulai seleksi
  • Klik ganda memilih kata, klik tiga kali memilih baris, Ctrl+A memilih halaman saat ini (kedua halaman dalam mode tampilan spread), dan Ctrl+C menyalin seleksi ke clipboard Windows sebagai CF_UNICODETEXT
  • Shift+Left / Shift+Right memperluas seleksi satu karakter demi satu karakter (meluas ke halaman yang bersebelahan dalam mode spread); Shift+Home / Shift+End memperluas ke tepi baris visual dengan memakai tinggi kotak karakter seed sebagai toleransi line-cluster, sehingga baris dengan ukuran font campuran tetap terklaster dengan benar
  • Saat melayang di atas teks, kursor berubah menjadi crIBeam; saat melayang keluar dari teks, kursor default dipulihkan. Selama drag pemilihan teks berlangsung, menyeret ke zona mati 20 piksel di tepi mana pun dari viewer akan menggulir halaman otomatis (tick 50 ms, 16 px / tick, dibatasi ke batas yang sama yang dipakai jalur pan) sehingga seleksi bisa meluas melewati viewport saat ini tanpa harus melepaskan mouse lebih dulu
  • Seleksi lintas halaman bekerja dalam mode tampilan spread (dmTwoPageContinuous, dmTwoPageContinuousWithCover): drag yang dimulai di halaman kiri dan berakhir di halaman kanan memilih rentang berurutan yang mencakup keduanya. SelectedText menggabungkan potongan per halaman dengan CR/LF sehingga teks hasil round-trip terbaca seperti konten multi-baris normal
  • Properti terpublik baru SelectionColor (default clHighlight, warna seleksi sistem Windows) — terpisah dari HighlightColor yang memberi warna kuning pada hasil pencarian. Sorotan pencarian dan drag-selection yang sedang aktif dapat ditampilkan bersamaan di layar tanpa konflik warna
  • Event terpublik baru OnSelectionChange dipicu setiap kali rentang seleksi yang terwujud benar-benar berubah — tidak pernah saat penerapan ulang yang identik, sehingga aplikasi host dapat langsung menautkannya ke teks status bar atau status aktif tombol tanpa debouncing
  • API publik baru pada TPdfView: HasSelection, SelectionCharCount, SelectedText, ClearSelection, SelectAll, CopySelectionToClipboard. Ini adalah titik masuk di level kode dan selalu bekerja terlepas dari AllowUserTextSelection — flag ini hanya membatasi input pengguna (mouse, Ctrl+C, Ctrl+A, Shift+arrows), jadi host kiosk dapat menonaktifkan seleksi yang digerakkan pengguna sambil tetap membuat tombol toolbar "Select All / Copy" yang memakai API yang sama
  • Menu pop-up klik kanan default Copy / 复制 ditempel otomatis saat host belum menetapkan PopupMenu sendiri — pola standar "select text, right-click, copy" langsung berfungsi. Caption dipilih antara Inggris dan Tionghoa oleh SysLocale.PriLangID; host yang butuh lokalisasi penuh (atau menu yang lebih kaya) cukup menetapkan PopupMenu sendiri dan defaultnya akan disembunyikan
  • Seleksi dibersihkan otomatis pada transisi SetPdf, SetPageNumber, SetActive(False), dan DisplayMode, dengan OnSelectionChange terpanggil tepat sekali saat seleksi sebelumnya tidak kosong. Subsistem form-fill tetap memegang prioritas — saat field form sedang diedit, semua pintasan keyboard seleksi ditunda agar field menerima Ctrl+C / Ctrl+A / Shift+arrows untuk seleksinya sendiri
  • Menambah suite regresi Delphi dan Lazarus menjadi 202 kasus masing-masing, dan suite C++Builder menjadi 159 kasus, mencakup nilai default, round-trip, perilaku API publik, pembersihan saat perubahan state, drag mouse (hit-text / hit-blank), klik vs drag, pergantian kursor IBeam, double-click word, triple-click line, pintasan keyboard, default popup attach / defer / caption, dan seleksi lintas halaman pada spread — termasuk pemeriksaan round-trip clipboard CR/LF

Version 1.35.0

  • Menambahkan dukungan injeksi marker PDF/VT (ISO 16612-2:2010): TPdf.SaveAsPdfVT menaikkan dokumen saat ini menjadi file yang patuh PDF/VT-1 atau PDF/VT-2 (subset PDF untuk variable dan transactional printing). PDF/VT dibangun di atas PDF/X-4 — ISO 16612-2 §6.2.1 mewajibkan setiap file PDF/VT-1 juga patuh PDF/X-4 — jadi injector menulis seluruh set marker PDF/X-4 (pdfxid:GTS_PDFXVersion = "PDF/X-4" di XMP, /GTS_PDFXVersion (PDF/X-4) dan /Trapped di Info, /OutputIntents di katalog yang merujuk ke dictionary OutputIntent dengan profil ICC tertanam) bersama properti khusus PDF/VT
  • Injeksi khusus PDF/VT mencakup pdfvtid:GTS_PDFVTVersion di XMP (= "PDF/VT-1" atau "PDF/VT-2" menurut §6.3 Table 2) dan pdfvtid:GTS_PDFVTModDate (disinkronkan dengan xmp:ModifyDate menurut §6.3 NOTE 1), plus deskripsi pdfaExtension:schemas yang mendeklarasikan namespace pdfxid dan pdfvtid (URI NPES http://www.npes.org/pdfx/ns/id/ dan http://www.npes.org/pdfvt/ns/id/). Trailer membawa array /ID
  • Menambahkan TPdf.SaveAsPdfVTToStream untuk keluaran PDF/VT di memori, dan singkatan opsi default TPdf.SaveAsPdfVT(FileName) yang menghasilkan PDF/VT-1 dengan OutputIntent sRGB IEC61966-2.1 bawaan (3144 bytes, profil yang sama dengan SaveAsPdfA / SaveAsPdfX) dan /Trapped /False
  • Menambahkan TPdf.ValidatePdfVT: memeriksa PDF yang terbuka untuk marker kepatuhan PDF/VT (keberadaan pdfvtid:GTS_PDFVTVersion dan GTS_PDFVTModDate di XMP, kesetaraan antara pdfvtid:GTS_PDFVTModDate dan xmp:ModifyDate, keberadaan identifier dasar pdfxid:GTS_PDFXVersion, keberadaan /DPartRoot di katalog menurut §6.5, /OutputIntents dengan /DestOutputProfile, trailer /ID, status enkripsi, keberadaan xmp:CreateDate/ModifyDate) dan mengembalikan TPdfVTValidationResult dengan level conformance yang terdeteksi dan set issue yang ditemukan
  • Menambahkan properti TPdf.PdfVTConformance: mengembalikan level conformance dokumen yang saat ini terbuka (pvc1, pvc2, pvcNone, atau pvcUnknown) tanpa perlu memanggil ValidatePdfVT secara eksplisit
  • Tipe baru yang diekspor dalam unit baru FPdfPdfvt: TPdfVTConformance (pvcUnknown/None/1/2), TPdfVTTrappedState (ptvUnspecified/True/False/Unknown), TPdfVTValidationResult, TPdfVTValidationIssue, TPdfVTSaveOptions
  • Document Part Hierarchy (DPartRoot / tree DPart per §6.5) adalah struktur level aplikasi yang bergantung pada pemetaan recipient / page-range dari workflow cetak variable-data. SaveAsPdfVT TIDAK membuat tree DPart — ValidatePdfVT menampilkan /DPartRoot yang hilang sebagai pvviMissingDPartRoot agar pemanggil dapat mengarahkan file PDF/VT melalui langkah pembuatan DPart terpisah. Persyaratan PDF/X-4 pada tingkat konten (embedding font, transparansi, warna terkelola ICC, larangan OPI / JavaScript / Reference XObject, dan lain-lain) tetap menjadi tanggung jawab penulis dokumen dan pipeline rendering PDFium
  • Memperbarui string TPdf.AboutInfo agar melaporkan versi produk saat ini

Version 1.34.0

  • Menambahkan dukungan injeksi marker PDF/R-1 (ISO 23504-1:2020): TPdf.SaveAsPdfR menaikkan dokumen saat ini menjadi file yang patuh PDF/R-1 (subset transport raster-image PDF yang dipakai untuk dokumen hasil pindai). Injeksi ini mencakup persyaratan level format file yang dapat ditambahkan lewat post-processing — komentar identifikasi versi unik %PDF-raster-1.0 yang ditulis di antara trailer dictionary dan kata kunci startxref (§5), catalog dictionary yang dipangkas ke white list §6.3 (hanya Version / ViewerPreferences / PageLayout / PageMode / AcroForm / Metadata yang bertahan), Document Information Dictionary yang dipangkas ke white list §6.4.3 (hanya Creator / Producer / CreationDate / ModDate), stream XMP /Metadata di katalog yang membawa empat entri Table 1 §6.4.4 (xmp:CreatorTool / pdf:Producer / xmp:CreateDate / xmp:ModifyDate), dan array /ID di trailer
  • Menambahkan TPdf.SaveAsPdfRToStream untuk keluaran PDF/R di memori, dan singkatan opsi default TPdf.SaveAsPdfR(FileName) untuk kasus umum
  • Menambahkan TPdf.ValidatePdfR: memeriksa PDF yang terbuka untuk marker kepatuhan PDF/R-1 (komentar footer %PDF-raster-x.y, versi header, ketiadaan /Type /ObjStm, kepatuhan white list katalog, kepatuhan white list Info dictionary, keberadaan stream metadata XMP, trailer /ID) dan mengembalikan TPdfRValidationResult dengan level conformance yang terdeteksi dan set issue yang ditemukan
  • Menambahkan properti TPdf.PdfRConformance: mengembalikan level conformance dokumen yang saat ini terbuka (prc1, prcNone, atau prcUnknown) tanpa perlu memanggil ValidatePdfR secara eksplisit
  • Tipe baru yang diekspor dalam unit baru FPdfPdfr: TPdfRConformance, TPdfRValidationResult, TPdfRValidationIssue, TPdfRSaveOptions. TPdfRSaveOptions.Default mengatur StripInfoOptionalEntries dan StripCatalogOptionalEntries ke True, sehingga injector secara default menghasilkan catalog dan Info dictionary yang patuh §6.3 / §6.4.3; pemanggil dapat mengatur ini ke False untuk mempertahankan entri sumber (hasilnya lalu tidak akan memenuhi klausul PDF/R itu, tetapi marker lain tetap menempel)
  • Persyaratan level konten tetap menjadi tanggung jawab PDF sumber: struktur Contents per halaman (§6.5.1), bentuk MediaBox [0 0 w h] (§6.5.3), pembatasan filter (§6.2.2 — hanya FlateDecode, CCITTFaxDecode bitonal, DCTDecode 8-bit gray/RGB), ketiadaan object stream (§6.2.4), dan tata letak strip per §6.6. Ini tidak dapat ditegakkan lewat post-processing — PDF/R secara struktural jauh lebih ketat daripada standar PDF/x lainnya dan mengharuskan byte sumber dibuat dengan benar. ValidatePdfR menampilkan issue level format file yang bisa dideteksi unit ini; pasangkan dengan validator PDF/R dari TWAIN Working Group untuk pemeriksaan level konten penuh
  • Memperbarui string TPdf.AboutInfo agar melaporkan versi produk saat ini

Version 1.33.0

  • Menambahkan dukungan injeksi marker PDF/X (keluarga ISO 15930): TPdf.SaveAsPdfX menaikkan dokumen saat ini menjadi file yang patuh PDF/X-1a:2001, PDF/X-3:2002, atau PDF/X-4 dengan post-processing PDF dasar memakai incremental update. Injeksi ini mencakup persyaratan level format file yang dapat ditambahkan lewat post-processing — stream metadata XMP yang membawa pdfxid:GTS_PDFXVersion (dan pdfxid:GTS_PDFXConformance untuk PDF/X-1a / PDF/X-3) plus deskripsi pdfaExtension:schemas yang cocok, Document Information Dictionary yang ditulis ulang dengan entri /GTS_PDFXVersion, /GTS_PDFXConformance, dan /Trapped, katalog yang diperbarui dengan /OutputIntents [N 0 R] yang merujuk ke dictionary OutputIntent dengan /S /GTS_PDFX dan profil ICC tertanam, serta array /ID di trailer
  • Menambahkan TPdf.SaveAsPdfXToStream untuk keluaran PDF/X di memori, dan singkatan opsi default TPdf.SaveAsPdfX(FileName) yang menghasilkan PDF/X-4 dengan OutputIntent sRGB IEC61966-2.1 bawaan (3144 bytes, profil yang sama dengan yang dipakai SaveAsPdfA)
  • Menambahkan TPdf.ValidatePdfX: memeriksa PDF yang terbuka untuk marker kepatuhan PDF/X (identifier pdfxid di XMP dan kesetaraannya dengan nilai di Info dictionary, deskripsi schema ekstensi pdfxid, array /OutputIntents dengan /DestOutputProfile, keberadaan Title, trailer /ID, status enkripsi, keberadaan xmp:CreateDate / xmp:ModifyDate) dan mengembalikan TPdfXValidationResult dengan level yang terdeteksi dan set issue yang ditemukan
  • Menambahkan properti TPdf.PdfXConformance: mengembalikan level conformance dokumen yang saat ini terbuka (pxc1a, pxc3, pxc4, pxcNone, atau pxcUnknown) tanpa perlu memanggil ValidatePdfX secara eksplisit. String versi XMP diparse untuk membedakan ketiga level conformance
  • Tipe baru yang diekspor dalam unit baru FPdfPdfx: TPdfXConformance (pxcUnknown/None/1a/3/4), TPdfXTrappedState (ptUnspecified/True/False/Unknown), TPdfXValidationResult, TPdfXValidationIssue, TPdfXSaveOptions. TPdfXSaveOptions.Default menargetkan PDF/X-4 dengan OutputIntent sRGB dan /Trapped /False; pemanggil dapat menimpa Conformance, menyediakan blob IccProfileData CMYK untuk workflow cetak komersial, atau mengubah OutputCondition/OutputConditionIdentifier/RegistryName untuk menunjuk ke entri registry karakterisasi ICC tertentu (misalnya FOGRA39, GRACoL2006_Coated1v2)
  • Persyaratan level konten (semua font tertanam, tanpa JavaScript, tanpa anotasi yang terlihat, larangan OPI, aturan transparansi untuk PDF/X-1a / PDF/X-3, dan sebagainya) tetap menjadi tanggung jawab penulis dokumen dan pipeline rendering PDFium. Pasangkan ValidatePdfX dengan alat preflight seperti callas pdfaPilot atau Ghent PDF Workgroup Output Suite untuk verifikasi conformance lengkap
  • Memperbarui string TPdf.AboutInfo agar melaporkan versi produk saat ini

Version 1.32.0

  • Menambahkan dukungan injeksi marker PDF/E-1 (ISO 24517-1:2008): TPdf.SaveAsPdfE menaikkan dokumen saat ini menjadi file yang patuh PDF/E-1 dengan post-processing PDF dasar memakai incremental update. Injeksi ini mencakup persyaratan level format file yang dapat ditambahkan lewat post-processing — stream metadata XMP yang membawa pdfe:ISO_PDFEVersion = "PDF/E-1" plus deskripsi pdfaExtension:schemas yang cocok, Document Information Dictionary yang ditulis ulang dengan entri wajib /ISO_PDFEVersion (PDF/E-1) yang diwajibkan §5, blok jembatan Info-XMP yang diwarisi dari ISO 19005-1 §6.7 melalui §13.1 (dc:title / dc:creator / dc:description / pdf:Producer / pdf:Keywords / xmp:CreateDate / xmp:ModifyDate / xmp:MetadataDate / xmp:CreatorTool), dan array /ID di trailer yang diwajibkan §6.2
  • Menambahkan TPdf.SaveAsPdfEToStream untuk keluaran PDF/E di memori dan singkatan opsi default TPdf.SaveAsPdfE(FileName) untuk kasus umum
  • Menambahkan TPdf.ValidatePdfE: memeriksa PDF yang terbuka untuk marker kepatuhan PDF/E-1 (keberadaan pdfe:ISO_PDFEVersion di XMP dan kesetaraannya dengan nilai di Info dictionary, deskripsi schema ekstensi pdfe, entri Info-dictionary /ISO_PDFEVersion, trailer /ID, keberadaan xmp:CreateDate / xmp:ModifyDate) dan mengembalikan hasil terstruktur dengan level conformance yang terdeteksi dan set issue yang ditemukan
  • Menambahkan properti TPdf.PdfEConformance: mengembalikan level conformance dokumen yang saat ini terbuka (pec1, pecNone, atau pecUnknown) tanpa perlu memanggil ValidatePdfE secara eksplisit
  • Tipe baru yang diekspor dalam unit baru FPdfPdfe: TPdfEConformance, TPdfEValidationResult, TPdfEValidationIssue, TPdfESaveOptions
  • Penulisan ulang Info dictionary adalah yang pertama untuk jalur post-processing PDF/x PDFiumPas — ini menulis ulang objek Info yang sudah ada dengan nomor objek yang sama (sehingga subsection xref / trailer /Info tetap valid) dan menyusun dictionary Info baru saat trailer sumber tidak memiliki entri /Info. PDFium sendiri menghasilkan dictionary Info di setiap output SaveAs, jadi kasus umumnya adalah jalur penulisan ulang
  • Persyaratan level konten (embedding font, ToUnicode CMaps, XObject / ExtGState keys / XFA forms yang dilarang, dan sebagainya) tetap menjadi tanggung jawab penulis dokumen — SaveAsPdfE menempelkan marker level format file tetapi tidak mengubah konten halaman atau menghapus fitur yang dilarang
  • Memperbarui string TPdf.AboutInfo agar melaporkan versi produk saat ini

Version 1.31.0

  • Menambahkan dukungan injeksi marker PDF/UA-1 (ISO 14289-1:2014): TPdf.SaveAsPdfUa menaikkan dokumen saat ini menjadi file yang patuh PDF/UA-1 dengan post-processing PDF dasar memakai incremental update. Injeksi ini mencakup persyaratan level format file yang dapat ditegakkan lewat post-processing — stream metadata XMP yang membawa pdfuaid:part = 1 plus deskripsi pdfaExtension:schemas yang cocok, dc:title wajib, katalog /MarkInfo << /Marked true /Suspects false >> dan /ViewerPreferences << /DisplayDocTitle true >> (hanya saat sumber tidak memilikinya), katalog /Lang (ketika pemanggil menyediakan tag BCP 47), dan array /ID di trailer
  • Menambahkan TPdf.SaveAsPdfUaToStream untuk keluaran PDF/UA di memori, dan singkatan opsi default TPdf.SaveAsPdfUa(FileName) untuk kasus umum
  • Menambahkan TPdf.ValidatePdfUa: memeriksa PDF yang terbuka untuk marker kepatuhan PDF/UA-1 (keberadaan StructTreeRoot, /Lang, /MarkInfo /Marked true dengan /Suspects = false, /ViewerPreferences /DisplayDocTitle true, identifier XMP pdfuaid:part, keberadaan dc:title, trailer /ID, status enkripsi) dan mengembalikan hasil terstruktur dengan level conformance yang terdeteksi dan set issue yang ditemukan
  • Menambahkan properti TPdf.PdfUaConformance: mengembalikan level conformance dokumen yang saat ini terbuka (puc1, pucNone, atau pucUnknown) tanpa perlu memanggil ValidatePdfUa secara eksplisit
  • Tipe baru yang diekspor dalam unit baru FPdfPdfua: TPdfUaConformance, TPdfUaValidationResult, TPdfUaValidationIssue, TPdfUaSaveOptions
  • Field Title / Author / Subject / Keywords / Creator / Producer / CreationDate / ModDate / DocumentId / InstanceId / Language yang dibiarkan kosong di TPdfUaSaveOptions diisi otomatis dari FPDF_GetMetaText / FPDF_GetFileIdentifier / FPDFCatalog_GetLanguage, sehingga pemanggil yang sudah ada dapat menyimpan dengan satu baris
  • Persyaratan level konten (kelengkapan tagging StructTreeRoot, teks Alt pada Figure, CMaps ToUnicode, embedding font, dan sebagainya) tetap menjadi tanggung jawab penulis dokumen — SaveAsPdfUa menempelkan marker level format file tetapi tidak mengubah konten halaman atau menciptakan tag. ValidatePdfUa menampilkan ketiadaan StructTreeRoot sebagai pvuaiMissingStructTreeRoot agar pemanggil dapat mengarahkan dokumen tanpa tag melalui pipeline tagging terpisah
  • Memperbarui string TPdf.AboutInfo agar melaporkan versi produk saat ini

Version 1.30.0

  • Output PDF/A-1b kini memenuhi persyaratan ISO 19005-1 (dengan Cor.1:2007) untuk kesetaraan Document Information Dictionary / XMP: setiap entri Info dictionary yang ditulis PDFium ke PDF dasar dicerminkan ke paket XMP, termasuk Title (dc:title), Author (dc:creator), Subject (dc:description menurut Cor.1), Keywords (pdf:Keywords), Creator (xmp:CreatorTool), Producer (pdf:Producer), CreationDate (xmp:CreateDate), dan ModDate (xmp:ModifyDate). xmp:MetadataDate juga diterbitkan
  • Trailer PDF/A kini selalu berisi array /ID (persyaratan keras ISO 19005-1 6.1.3). Saat TPdf.SaveAsPdfA memproses dokumen yang sumbernya sudah memiliki file identifier, ID permanen dan berubah berukuran 16 byte yang sudah ada dipakai ulang; jika tidak, ID fallback deterministik 16 byte diturunkan dari byte sumber
  • XMP yang disuntikkan kini menyematkan deskripsi pdfaid extension schema yang diwajibkan ISO 19005-1 6.7.8 (digantikan oleh Cor.1) — pdfaid diperlakukan sebagai extension schema relatif terhadap XMP Specification 2004, jadi semua file yang patuh harus mendeklarasikan nama properti, jenis nilai, dan kategori di container pdfaExtension:schemas
  • TPdfASaveOptions mendapat lima field opsional baru: Producer, CreationDate, ModDate (string tanggal PDF dalam bentuk “D:YYYYMMDDHHmmSSOHH'mm'”), DocumentId, dan InstanceId (string byte 16 byte untuk array /ID di trailer). TPdf.SaveAsPdfA / SaveAsPdfAToStream mengisi otomatis field yang hilang dari FPDF_GetMetaText dan FPDF_GetFileIdentifier, sehingga pemanggil yang sudah ada tetap bekerja tanpa perubahan
  • TPdf.ValidatePdfA / TPdf.PdfAConformance kini melaporkan tiga issue tambahan: pvaiMissingTrailerId (tidak ada /ID di trailer), pvaiMissingXmpDates (xmp:CreateDate atau xmp:ModifyDate hilang), dan pvaiMissingExtensionSchema (deskripsi pdfaid extension schema tidak ada)
  • Karakter non-ASCII dalam Title, Author, Subject, Keywords, Creator, dan Producer kini dienkode sebagai UTF-8 di paket XMP (XMP Specification memerlukan UTF-8), sehingga metadata multibahasa tetap utuh saat bolak-balik melalui SaveAsPdfA
  • Memperbarui string TPdf.AboutInfo agar melaporkan versi produk saat ini

Version 1.29.0

  • Memperbarui DLL PDFium bawaan (Win32 dan Win64, build standar dan V8) ke snapshot hulu 2026-05-22, membawa perbaikan hulu untuk jalur crash FPDFText_SetText / FPDFText_SetCharcodes dan penguatan internal lain dari proyek PDFium
  • Mengekspos flag simpan baru FPDF_SUBSET_NEW_FONTS milik PDFium di FPdfPageOps.pas, sehingga pemanggil FPDF_SaveAsCopy dapat meminta subsetting otomatis file font tertanam untuk text object yang baru ditambahkan. Konstanta FPDF_INCREMENTAL, FPDF_NO_INCREMENTAL, dan FPDF_REMOVE_SECURITY yang sudah ada kini didefinisikan memakai bentuk bit-shift hulu (nilai numerik lama 3 dipertahankan sebagai FPDF_REMOVE_SECURITY_DEPRECATED demi kompatibilitas biner)
  • Menambahkan enum FPDF_FONT_BACKEND_TYPE (FREETYPE / FONTATIONS) dan field m_FontLibraryType yang cocok pada FPDF_LIBRARY_CONFIG di FPdfView.pas, sehingga aplikasi yang menginisialisasi PDFium dengan renderer Skia kini dapat memilih font backend saat startup
  • Memperbarui signature TFPDFPage_InsertObject agar cocok dengan hulu: fungsi C kini mengembalikan FPDF_BOOL (TRUE saat berhasil, FALSE jika page_object adalah NULL atau transfer kepemilikan gagal) alih-alih void. Pemanggil PDFiumPas yang sudah ada tetap dikompilasi tanpa perubahan karena Delphi / FPC mengizinkan pengabaian nilai balik fungsi
  • Memperbaiki string TPdf.AboutInfo agar melaporkan versi produk saat ini (semula usang di v1.27.0 sejak rilis dokumentasi-saja v1.28.0)

Version 1.28.0

  • Memperluas secara signifikan dokumentasi dalam halaman di seluruh referensi API: setiap entri properti, method, event, dan fungsi global kini membawa Deskripsi 3 paragraf, daftar Catatan, Contoh Delphi multi-baris, dan blok Lihat Juga yang lebih kaya — mencakup lebih dari 200 halaman yang sebelumnya tipis termasuk semua counter TPdf, getter metadata, accessor font dan karakter, properti level halaman, record terindeks, method level dokumen, dan seluruh permukaan state / display / event TPdfView
  • Menyesuaikan layout bantuan agar cocok dengan baseline visual losLab yang dipakai di referensi HotXLS: menyamakan ukuran h1/h2, mengonsolidasikan gaya grid navigasi API ke StyleSheet bersama, dan menghapus override CSS inline per halaman di Navigation.html
  • Dokumentasi kini menyertakan skrip bantu (Docs\Build-Expand-Entries.ps1) yang meregenerasi pengayaan halaman entri dari satu tabel data untuk pemeliharaan yang dapat diulang

Version 1.27.0

  • Menambahkan dukungan pembuatan PDF/A-1b: TPdf.SaveAsPdfA menyimpan dokumen apa pun yang terbuka sebagai file yang patuh PDF/A-1b dengan mem-post-processing PDF dasar memakai incremental update yang menyuntikkan stream metadata XMP, OutputIntent ICC sRGB, dan catalog dokumen yang diperbarui — semuanya tanpa membutuhkan API DLL tambahan. Bekerja di platform mana pun yang didukung PDFiumPas
  • Menambahkan TPdf.SaveAsPdfAToStream untuk keluaran PDF/A di memori
  • Menambahkan TPdf.ValidatePdfA: memeriksa PDF yang terbuka untuk kepatuhan PDF/A (marker XMP pdfaid, OutputIntent dengan profil ICC tertanam, enkripsi) dan mengembalikan hasil terstruktur dengan level conformance yang terdeteksi serta set issue spesifik yang ditemukan
  • Menambahkan properti TPdf.PdfAConformance: mengembalikan level conformance dokumen yang saat ini terbuka (pac1b, pac1a, pac2b, pac3b, pacNone, atau pacUnknown) tanpa perlu memanggil ValidatePdfA secara eksplisit
  • Tipe baru yang diekspor: TPdfAConformance, TPdfAValidationResult, TPdfAValidationIssue, TPdfASaveOptions (di unit baru FPdfPdfa.pas)
  • SaveAsPdfA mendukung profil ICC kustom melalui TPdfASaveOptions.IccProfileData; saat dibiarkan kosong, profil sRGB IEC61966-2.1 bawaan (HP/Microsoft, 3144 bytes) dipakai otomatis
  • Mengganti referensi HTML monolitik dengan sistem web help yang direstrukturisasi: 302 halaman entri API individual (satu per properti, method, event, dan fungsi global) yang mencakup TPdf dan TPdfView, masing-masing dengan deskripsi lengkap, tabel parameter, contoh kode Delphi, dan tautan Lihat Juga
  • Menambahkan Navigation.html: indeks navigasi API satu halaman yang komprehensif, diorganisasi ke dalam enam bagian (properti/method/event TPdf, properti/method/event TPdfView, fungsi global) dengan grid flex 5 kolom untuk pemindaian cepat
  • Membangun ulang TPdf.html dan TPdfView.html sebagai halaman ikhtisar komponen ringkas yang mempertahankan bagian referensi tipe (Tipe, Constants, Global Variables) dan menaut ke halaman entri individual untuk semua anggota
  • Menambahkan pencarian teks penuh yang didukung Search.js dengan pencocokan inkremental di sisi klien di seluruh 312 halaman yang diindeks
  • Memperbarui semua bilah navigasi di seluruh situs agar menunjuk ke Navigation.html

Version 1.26.0

  • Menambahkan Demo/Lazarus/BatchExport, port LCL dari demo Delphi BatchExport v1.14.0. Set fitur yang sama: ekspor PDF -> JPG multi-file dengan progres keseluruhan per file, progres saat ini per halaman, input DPI / quality / password, dan batch yang bisa dibatalkan secara kooperatif yang didukung IPdfCancellationToken. Folder output dibuka di file manager platform saat ekstraksi selesai dengan sukses

Version 1.25.0

  • Menambahkan penggunaan ulang page Form XObject di TPdf, memungkinkan workflow watermark, overlay template, dan “stamp satu halaman ke banyak halaman”: CreateXObjectFromPage membuat handle yang dapat dipakai ulang dari halaman mana pun di dokumen lain; InsertFormObjectFromXObject menyisipkan SATU salinan halaman yang dibungkus ke halaman saat ini. Mengembalikan FPDF_PAGEOBJECT yang disisipkan agar pemanggil dapat memosisikan / menskalakan / memutarnya dengan FPDFPageObj_SetMatrix dan helper TPdfMatrix v1.9.0
  • Class Pascal baru TPdfXObject membungkus handle FPDF_XOBJECT milik PDFium dan menutupnya otomatis di destructor-nya, sehingga tidak perlu lagi ritual manual FPDF_CloseXObject
  • Memperluas suite regresi Delphi dan Lazarus menjadi masing-masing 147 kasus, dan suite C++Builder menjadi 123 kasus, mencakup kontrak pembuatan handle dan penyisipan page-object

Version 1.24.0

  • Menambahkan TPdf.RenderPageProgressive — varian RenderPage yang bisa dibatalkan dan menggerakkan progressive rendering loop PDFium serta memeriksa IPdfCancellationToken v1.7.0 di antara iterasi, sehingga render DPI tinggi yang panjang dapat dibatalkan di tengah halaman alih-alih memblokir pemanggil sampai selesai
  • Mengembalikan nilai TPdfProgressiveStatus: prsDone, prsCancelled, atau prsFailed. Berikan AToken = nil untuk merender sampai selesai tanpa pernah berhenti sejenak (tidak ada kemungkinan prsCancelled)
  • Memakai jalur cepat zero-copy yang sama seperti yang diperkenalkan di v1.21.0 — PDFium merender langsung ke DIB milik TBitmap tujuan. Fallback legacy yang sama berlaku saat DIB tidak bisa dibungkus
  • Memperluas suite regresi Delphi dan Lazarus menjadi masing-masing 145 kasus, dan suite C++Builder menjadi 121 kasus, mencakup nil-token (selesai), token yang sudah pre-cancel (prsCancelled), dan kesetaraan piksel dengan RenderPage sinkron pada token hidup

Version 1.23.0

  • Menambahkan enam method TPdfView baru yang mengekspos seleksi teks widget form dan Undo/Redo milik PDFium ke aplikasi: GetSelectedFormText mengembalikan teks yang saat ini dipilih di dalam widget form yang sedang fokus; SelectAllFormText memilih setiap karakter; FormUndo / FormRedo / FormCanUndo / FormCanRedo menggerakkan riwayat edit widget yang sedang fokus. API PDFium yang mendasarinya sudah terikat tetapi belum punya titik masuk level tinggi. Keenamnya berhenti aman saat view tidak aktif atau dokumen tidak memiliki widget AcroForm yang fokus
  • Memperluas suite regresi Delphi dan Lazarus menjadi masing-masing 142 kasus, dan suite C++Builder menjadi 119 kasus, mencakup kontrak no-form-no-focus untuk setiap method baru

Version 1.22.0

  • Menambahkan wrapper komposisi halaman ke TPdf: ImportPagesByIndex mengambil array indeks berbasis nol untuk menyalin halaman tertentu dari dokumen sumber; ImportNPagesToOne mengembalikan TPdf baru yang halamannya adalah komposit N-up dari dokumen ini; MovePages mengurutkan ulang halaman di tempat. API PDFium yang mendasarinya sudah terikat tetapi belum punya titik masuk yang ramah Pascal
  • ImportPagesByIndex menerima array kosong untuk mengimpor setiap halaman sumber (setara dengan meneruskan nil pada level C ABI)
  • Memperluas suite regresi Delphi dan Lazarus menjadi masing-masing 136 kasus, dan suite C++Builder menjadi 115 kasus, mencakup import subset, import seluruh dokumen, pengurutan ulang halaman, dan komposit N-up

Version 1.21.0

  • Meningkatkan performa rendering dengan mengganti TPdf.RenderPage / TPdf.RenderTile (dan helper TPdfView yang sesuai) ke jalur keluaran zero-copy. PDFium kini menulis langsung ke buffer DIB milik TBitmap tujuan alih-alih ke buffer internal yang kemudian disalin baris demi baris, menghemat satu salinan memori lebar x tinggi x 4 byte per render. Peningkatan ini paling terasa pada DPI tinggi (panel thumbnail, ekspor kualitas cetak, ekspor batch)
  • Jalur lama per-scanline tetap dipertahankan sebagai fallback aman untuk kasus yang tidak mungkin saat DIB tujuan tidak bisa dibungkus (dimensi ekstrem, stride yang tidak biasa, OOM). Perilaku kedua jalur identik byte, hanya fallback yang lebih lambat
  • Memperluas suite regresi Delphi dan Lazarus menjadi masing-masing 132 kasus, dan suite C++Builder menjadi 112 kasus, mencakup upgrade pf32bit pada bitmap pemanggil, round-trip dimensi, dan tes kewajaran stride bitmap besar

Version 1.20.0

  • Menambahkan penyorotan hasil pencarian ke TPdfView: HighlightSearchText(Text, MatchCase, MatchWholeWord) memindai halaman view saat ini dan mengembalikan jumlah kecocokan yang ditemukan, sambil menggambar mask HighlightColor di atas setiap kecocokan pada setiap redraw. ClearHighlight menghapus sorotan; berpindah ke halaman lain menghapusnya otomatis karena kecocokan bersifat per halaman
  • HighlightColor default ke clYellow dan dipublikasikan agar aplikasi dapat menyesuaikan warna sorotan dengan palet UI mereka
  • Memperluas suite regresi Delphi dan Lazarus menjadi masing-masing 129 kasus, dan suite C++Builder menjadi 109 kasus, mencakup warna default, round-trip warna, “real fixture word matches” terhadap string sample.pdf, dan kontrak “missing word returns zero matches”

Version 1.19.0

  • Menambahkan properti FitMode ke TPdfView dengan empat nilai: pfmNone (zoom manual), pfmActualSize (100%), pfmFitPage (seluruh halaman pas di viewport), dan pfmFitWidth (lebar halaman pas dengan lebar viewport). Mode fit yang aktif diterapkan ulang otomatis saat Resize dan saat halaman saat ini berubah, sehingga dokumen panjang dengan ukuran halaman campuran tetap terbingkai dengan rapi
  • Menetapkan Zoom secara langsung membatalkan mode fit aktif (FitMode kembali ke pfmNone), sesuai konvensi viewer PDF standar saat mengetik nilai zoom membuat keluar dari Fit Page / Fit Width
  • Default adalah pfmNone sehingga aplikasi yang sudah ada tetap mempertahankan perilaku zoom eksplisitnya
  • Memperluas suite regresi Delphi dan Lazarus menjadi masing-masing 124 kasus, dan suite C++Builder menjadi 106 kasus, mencakup nilai default, round-trip mode, fit-page yang menghasilkan zoom nyata pada dokumen yang dimuat, dan mode-zoom-manual-membatalkan-fit

Version 1.18.0

  • Menambahkan properti PageColor ke TPdfView, memisahkan latar halaman PDF yang dirender dari Color kontrol di sekitarnya. Default adalah clWhite, jadi halaman PDF kini dirender seperti kertas putih apa pun tema aplikasi host. Viewer mode gelap kini dapat mempertahankan area scroll tetap gelap sambil membiarkan halaman PDF aktual tetap putih (atau warna apa pun yang dipilih aplikasi)
  • Perubahan perilaku: aplikasi yang dulu mengatur TPdfView.Color untuk mewarnai ulang halaman PDF harus mengatur PageColor sebagai gantinya. Pengalaman default membaik untuk kasus umum (halaman putih di atas latar kontrol bertema) tanpa perubahan kode apa pun
  • Memperluas suite regresi Delphi dan Lazarus menjadi masing-masing 120 kasus, dan suite C++Builder menjadi 103 kasus, mencakup nilai default dan round-trip warna

Version 1.17.0

  • Menambahkan toggle penguncian input pengguna ke TPdfView sehingga aplikasi yang menanam viewer di kiosk, panel pratinjau, atau konteks read-only dapat menonaktifkan gesture navigasi tanpa subclassing: AllowUserPageChange mengontrol shortcut keyboard baru PgUp / PgDn / Ctrl+Beranda / Ctrl+End; ChangePageOnMouseScrolling mengontrol loncatan halaman wheel-up / wheel-down baru; AllowUserTextSelection disisihkan untuk jalur seleksi teks drag mouse di masa depan. Ketiganya default ke True sehingga aplikasi yang sudah ada naik versi tanpa perubahan perilaku
  • Navigasi halaman dengan mouse wheel melewati Ctrl+wheel sehingga aplikasi dapat mempertahankan Ctrl+wheel khusus untuk zoom
  • Memperluas suite regresi Delphi dan Lazarus menjadi masing-masing 118 kasus, dan suite C++Builder menjadi 101 kasus, mencakup nilai default dan round-trip toggle

Version 1.16.2

  • Memperluas cakupan regresi TPdfView untuk klik tautan anotasi saat halaman viewer berbeda dari halaman TPdf terkait, memakai jalur klik mouse headless nyata di Delphi, Lazarus, dan C++Builder
  • Suite Delphi dan Lazarus kini masing-masing menjalankan 114 kasus, dan C++Builder kini menjalankan 99 kasus

Version 1.16.1

  • Memperbaiki penanganan klik-tautan TPdfView sehingga aksi anotasi otomatis dan web-link memakai halaman yang saat ini ditampilkan viewer, bahkan saat komponen TPdf terkait berada di halaman lain
  • Memperkeras TPdfThumbnailView terhadap referensi Pdf yang menggantung saat komponen TPdf yang ditautkan dihancurkan
  • Menambahkan cakupan regresi masa hidup referensi thumbnail; suite Delphi dan Lazarus kini masing-masing menjalankan 113 kasus, dan C++Builder kini menjalankan 98 kasus
  • Menyinkronkan README, dokumentasi pengujian, konten pencarian/index HTML Help, dan output paket C++ yang dihasilkan dengan pembaruan integrasi v1.7.0 hingga v1.16.0

Version 1.16.0

  • Menambahkan demo Delphi PrintDialog baru (Demo/Delphi/PrintDialog) yang berfokus pada pencetakan N-up (1 / 2 / 4 / 9 halaman per sheet) dengan penyaringan halaman ganjil / genap, rendering grayscale, dan border sel opsional 1 piksel. Ini adalah pendamping kecil yang sengaja dibuat untuk demo PrintPDF yang sudah ada, yang sudah mencakup pratinjau, file terbaru, zoom, dan scaling

Version 1.15.0

  • Menambahkan komponen baru TPdfThumbnailView (FPdfThumbnail unit) yang merender satu thumbnail halaman per baris di panel samping yang dapat discroll dengan sorotan hover dan seleksi plus navigasi klik-untuk-pergi. Dirancang untuk ditempatkan di sebelah TPdfView agar pengguna akhir dapat menelusuri dokumen panjang per halaman
  • Komponen ini terdaftar di tab palette losLab bersama TPdf dan TPdfView; properti kunci: Pdf, CurrentPageIndex, ThumbnailWidth, ThumbnailHeight, TextColor, HoverColor, SelectionColor, BorderColor, dan event OnPageClick
  • Memperluas suite regresi Delphi dan Lazarus menjadi masing-masing 112 kasus, dan suite C++Builder menjadi 97 kasus, mencakup default, round-trip ukuran thumbnail, clamping nilai ekstrem, round-trip warna, dan penetapan handler event

Version 1.14.0

  • Menambahkan demo Delphi BatchExport baru (Demo/Delphi/BatchExport) yang menunjukkan cara mengonversi banyak file PDF ke JPG dalam satu pass menggunakan TPdf.LoadCustomDocument untuk pemuatan streaming, IPdfCancellationToken untuk pembatalan kooperatif, dan bilah progres keseluruhan + per halaman per file. Demo ini memakai satu instance TPdf per file (PDFium sendiri tidak thread-safe) dan membuka folder output di Explorer saat ekstraksi selesai dengan sukses

Version 1.13.0

  • Menambahkan overlay UI async-rendering ke TPdfView melalui tiga properti baru: AsyncRendering, LoadingText, dan LoadingColor. Saat AsyncRendering bernilai True, jalur paint satu halaman menggambar indikator kecil “Loading...” di atas halaman yang dirender, sehingga aplikasi yang memakai worker sendiri untuk render panjang memiliki affordance visual yang konsisten
  • Default mempertahankan perilaku yang sudah ada: AsyncRendering bernilai False, jadi aplikasi yang tidak mengaktifkannya tidak melihat perubahan visual
  • Dokumentasi memperjelas bahwa PDFium sendiri tidak thread-safe — memindahkan render ke worker benar-benar menuntut pemanggil mempertahankan satu TPdf per worker; demo batch-export yang akan datang menunjukkan pola itu
  • Memperluas suite regresi Delphi dan Lazarus menjadi masing-masing 106 kasus, dan suite C++Builder menjadi 93 kasus, mencakup nilai default dan round-trip tiga properti

Version 1.12.0

  • Menambahkan penanganan tautan berbasis klik ke TPdfView. Properti baru LinkOptions mengontrol perilaku otomatis untuk empat jenis aksi tautan PDF: goto (loncatan halaman), URI (ShellExecute), launch (ShellExecute), dan GotoR tersemat (disisihkan). Default mengaktifkan loAutoGoto dan loAutoOpenURI; loAutoLaunch dan loAutoEmbeddedGoto tetap mati agar klik liar tidak bisa menjalankan program arbitrer
  • Menambahkan event OnAnnotationLinkClick dan OnWebLinkClick yang dipicu sebelum aksi otomatis apa pun dan memungkinkan aplikasi memeriksa tautan, menandainya Handled, atau mengalihkannya (misalnya, ke prompt keamanan)
  • Deteksi klik tautan hanya berjalan ketika gesturnya adalah klik, bukan drag, memakai anchor MouseDown yang baru agar gestur pan tetap mengalir melalui jalur scroll yang sudah ada tanpa perubahan
  • Memperluas suite regresi Delphi dan Lazarus menjadi masing-masing 102 kasus, dan suite C++Builder menjadi 91 kasus, mencakup LinkOptions default, round-trip set, dan penetapan event-handler

Version 1.11.0

  • Menambahkan polesan visual pada TPdfView: properti PageShadowSize, PageShadowColor, dan PageBorderColor menggambar drop shadow opsional di bawah persegi halaman dan border satu piksel di sekelilingnya. Default mempertahankan tampilan datar sebelumnya (PageShadowSize = 0; border digambar dengan clBlack default tetapi menyatu ke latar putih default sampai pemanggil mengubah warnanya)
  • Menambahkan properti SmoothScroll sebagai flag opt-in untuk animasi scroll inkremental di masa depan; properti ini sudah round-trip hari ini dan sudah dihubungkan agar aplikasi dapat menyimpan preferensinya, sementara sisi rendering masih memakai perilaku scroll langsung yang sudah ada
  • Memperluas suite regresi Delphi dan Lazarus menjadi masing-masing 98 kasus, dan suite C++Builder menjadi 89 kasus, mencakup nilai default, round-trip properti, dan clamping ukuran bayangan negatif

Version 1.10.0

  • Menambahkan penyisipan gambar langsung melalui overload baru TPdf.AddImage dan TPdfView.AddImage yang menerima path file atau TBitmap, di samping AddPicture berbasis TPicture yang sudah ada. AddImage(FileName) mengenali format apa pun yang terdaftar di unit grafis VCL atau LCL (BMP, PNG via unit PngImage, JPG, dan lain-lain) dan melalui pipeline yang sama dengan AddPicture sehingga perilakunya identik
  • AddImage(TBitmap) melewati perantara TPicture, yang menyederhanakan pemanggil yang sudah memegang TBitmap dari pekerjaan rendering atau pembuatan batch
  • Memperluas suite regresi Delphi dan Lazarus menjadi masing-masing 92 kasus, dan suite C++Builder menjadi 84 kasus, mencakup penyisipan bitmap, bounds page-object, penolakan bitmap nil, dan pemuatan file BMP

Version 1.9.0

  • Menambahkan dukungan matrix transformasi level tinggi melalui class baru TPdfMatrix di unit FPdfMatrix. TPdfMatrix membungkus FS_MATRIX milik PDFium dengan API OO untuk Translate, Scale, Rotate, HorizontalFlip, VerticalFlip, CentralFlip, Skew, dan Multiply, cocok untuk menyusun transformasi sebelum menyerahkannya ke FPDFPageObj_SetMatrix dan API PDFium serupa
  • TPdfMatrix.Multiply dengan benar mengambil snapshot enam elemen matrix sebelum menghitung nilai baris baru, memperbaiki masalah laten saat implementasi Pascal alternatif menimpa elemen sebelumnya dalam panggilan yang sama dan menghasilkan hasil yang salah untuk komposisi selain translasi murni
  • Memperluas suite regresi Delphi dan Lazarus menjadi masing-masing 88 kasus, dan suite C++Builder menjadi 81 kasus, mencakup identity, reset, translate / scale / flip, urutan komposisi post-multiplicative, dan kasus regresi Multiply

Version 1.8.0

  • Menambahkan pemuatan stream sesuai permintaan melalui method baru TPdf.LoadCustomDocument(AStream, AOwnsStream) dan class helper TPdfStreamAdapter, didukung oleh FPDF_LoadCustomDocument milik PDFium. PDFium kini membaca blok dari TStream yang diberikan hanya saat diperlukan, sehingga PDF yang sangat besar atau remote tidak lagi membutuhkan salinan in-memory di awal
  • Menambahkan kepemilikan stream opsional: meneruskan AOwnsStream = True menyerahkan masa hidup TStream ke TPdf, yang akan membebaskannya saat UnloadDocument berjalan
  • Memperluas suite regresi Delphi dan Lazarus menjadi masing-masing 79 kasus, dan suite C++Builder menjadi 75 kasus, mencakup pemuatan streaming melalui TFileStream, pembersihan owned-stream, dan kontrak externally-owned-stream survives-unload

Version 1.7.0

  • Menambahkan primitif pembatalan async kooperatif di unit baru FPdfAsync, mengekspos IPdfCancellationToken / IPdfCancellationTokenSource dan singleton PdfNoCancellationToken yang dapat dipakai ulang agar workflow rendering dan ekspor yang panjang dapat mendukung semantik cancel-from-UI yang bersih
  • Menambahkan helper ringan TPdfFuture<T> yang menjalankan worker di thread latar dan mengirim envelope TPdfFutureResult<T> kembali ke thread utama, membedakan kasus sukses, pembatalan, dan gagal
  • Memperluas suite regresi Delphi dan Lazarus menjadi masing-masing 76 kasus, dan suite C++Builder menjadi 73 kasus, dengan cakupan bersama untuk status pembatalan, cancel yang idempotent, fan-out callback, dan registrasi pasca-batal

Version 1.6.10

  • Menambahkan akses level tinggi TPdf.PrintPageRanges ke print page range pada preferensi viewer PDF, mengembalikan rentang halaman berbasis satu untuk kode aplikasi
  • Menambahkan TPdf.SetFormFieldFlags / SetFormFieldFlagsAt dan helper TPdfView yang sesuai agar aplikasi dapat memperbarui field flag AcroForm melalui API publik, termasuk cakupan flag password dan multi-select
  • Memperkeras cakupan ABI binding PDFium untuk FPDF_DWORD berukuran Windows, callback FPDF_FILEACCESS, dan field slot embedder V8

Version 1.6.9

  • Menambahkan binding rendering Skia level rendah untuk API baru yang diekspor FPDF_RenderPageSkia dan FPDF_FFLDrawSkia di DLL PDFium standar dan V8 bawaan
  • Memperluas pemeriksaan cakupan binding publik sehingga pemuatan DLL standar dan V8 kini memverifikasi titik masuk render Skia di samping probe kapabilitas V8/XFA yang sudah ada

Version 1.6.8

  • Menambahkan TPdf.SetTextPositions dan TPdfSingleArray untuk mengatur posisi per karakter pada text object yang sudah ada melalui API FPDFText_SetPositions yang baru diekspor
  • Menaikkan FPDFText_SetPositions menjadi binding wajib untuk DLL PDFium bawaan saat ini, sambil memastikan titik masuk render Skia tetap tidak tersedia karena DLL masih belum mengekspornya
  • Memperluas suite regresi Delphi, C++Builder, dan Lazarus menjadi masing-masing 65 kasus dengan cakupan posisi teks

Version 1.6.7

  • Menambahkan akses level tinggi TPdf ke aksi name-tree JavaScript dokumen, mengembalikan nama aksi dan skrip melalui JavaScriptAction dan JavaScriptActions
  • Menambahkan TPdf.FileIdentifier untuk membaca ID trailer permanen dan berubah sebagai TBytes biner tanpa byte terminator PDFium
  • Menambahkan TPdf.PageBox, GetPageBox, dan SetPageBox untuk MediaBox, CropBox, BleedBox, TrimBox, dan ArtBox pada halaman saat ini
  • Memastikan DLL PDFium bawaan saat ini hanya menyisakan titik masuk render Skia yang tidak tersedia saat runtime karena export itu tidak ada
  • Memperluas suite regresi Delphi, C++Builder, dan Lazarus menjadi masing-masing 64 kasus dengan cakupan JavaScript dokumen, ID trailer, dan page-box

Version 1.6.6

  • Menambahkan dukungan runtime untuk DLL PDFium bawaan yang mengaktifkan V8. Mengatur EnableV8Engine sebelum memuat kini memilih pdfium.v8.dll dari tree DLLs\Win32 atau DLLs\Win64 dan mengekspos binding khusus V8/XFA saat DLL yang dimuat menyediakannya
  • Menambahkan V8FeaturesAvailable, XfaBStrHelpersAvailable, GetRecommendedV8Flags, dan binding opsional level rendah untuk FPDF_BStr_*, FPDF_GetRecommendedV8Flags, dan FPDF_GetArrayBufferAllocatorSharedInstance
  • Membuat FPDFText_SetPositions opsional sehingga PDFiumPas tetap bisa memuat DLL PDFium yang tidak mengekspor setter posisi teks eksperimental itu
  • Memperluas suite regresi Delphi, C++Builder, dan Lazarus menjadi masing-masing 61 kasus dengan cakupan kemampuan DLL standar dan DLL V8

Version 1.6.5

  • Menambahkan inspeksi structure tree PDF bertag melalui TPdf.StructureElements dan TPdfView.StructureElements, termasuk jenis elemen, title, alternate text, actual text, expansion text, bahasa, ID marked-content, jumlah child, dan jumlah attribute
  • Menambahkan pemilihan mode cetak PDFium Windows melalui TPdfPrintMode dan SetPdfPrintMode, mencakup mode cetak EMF, text-only, PostScript, pass-through, image-mask, dan Type 42
  • Menambahkan binding level rendah untuk export publik PDFium DLL standar yang tersisa, mencakup aksi JavaScript, flag form anotasi / warna font, status aktif page-object, penyisipan terindeks, nilai float content-mark, data profil ICC gambar, penghapusan form-object, dan posisi teks
  • Memperluas suite regresi Delphi, C++Builder, dan Lazarus menjadi masing-masing 59 kasus dengan cakupan structure tree PDF bertag, mode cetak, dan binding export publik

Version 1.6.4

  • Memperbarui demo Delphi, C++Builder, dan Lazarus agar otomatis membuka PDF yang dihasilkan, teks/gambar yang diekspor, dan folder output batch setelah pembuatan berhasil

Version 1.6.3

  • Memperluas suite regresi Delphi, C++Builder, dan Lazarus yang disejajarkan menjadi masing-masing 56 kasus dengan cakupan GUI TPdfView untuk helper fit-zoom, round-trip koordinat device/page, hit-testing karakter, dan pan mouse melalui kontrol viewer jendela tersembunyi
  • Fixture TPdfView kini memakai ukuran viewer eksplisit dan subclass khusus pengujian yang menjalankan handler mouse terlindungi sambil menjaga suite tetap sepenuhnya headless

Version 1.6.2

  • Memperbaiki TPdf.AddPage(0, ...) sehingga halaman pertama yang disisipkan langsung menjadi halaman aktif. Kode contoh yang sudah ada tetap bekerja, sementara PageNumber kini melaporkan halaman berbasis satu yang valid setelah penyisipan
  • Menyinkronkan versi paket Lazarus dan memperluas suite regresi Delphi, C++Builder, dan Lazarus yang disejajarkan menjadi masing-masing 52 kasus

Version 1.6.1

  • Memperbaiki persyaratan versi minimum yang salah di validator kepatuhan versi PDF v1.6.0: aksi SetState direklasifikasi dari PDF 1.5 ke PDF 1.2, sesuai PDF 1.2 Reference 6.9.9. Target SaveAs PDF 1.3 / 1.4 yang berisi aksi SetState kini disimpan dengan benar alih-alih ditolak
  • Menambahkan pemeriksaan leksikal PDF 1.2 yang cocok pada bagian spesifikasi yang sama: aksi Sound, Movie, dan NOP plus color space Separation kini diblokir ketika versi target yang dipilih lebih tua dari PDF 1.2
  • Memperluas suite regresi Delphi, C++Builder, dan Lazarus menjadi masing-masing 50 kasus dengan menambahkan tes penerimaan SetState PDF 1.4 positif yang mengunci batas yang sudah dikoreksi

Version 1.6.0

  • Memperkeras target SaveAs PDF 1.0 hingga PDF 1.7 eksplisit dengan validator fitur-versi penuh yang mencakup seluruh timeline fitur PDF 1.1 hingga ISO 32000-1. Validator kini memblokir penyimpanan yang berisi entri dictionary, nama filter, subtype anotasi, jenis aksi, font, color space, atau parameter enkripsi yang diperkenalkan setelah versi target yang dipilih. Contoh: JBIG2Decode (1.4+), MarkInfo / Tagged PDF (1.4+), OutputIntents (1.4+), ICCBased / DeviceN / BleedBox / TrimBox / ArtBox / StructTreeRoot (1.3+), anotasi Polygon / PolyLine / Caret / Screen / Watermark / Redact, enkripsi AES dan AES-256 (CFM AESV2 / AESV3), entri katalog Perms / Legal / Requirements / NeedsRendering, dan aksi yang dibatasi versi seperti JavaScript, Trans, SetState, Rendition, GoToE, GoTo3DView semuanya ditolak ketika versi PDF target tidak bisa merepresentasikannya

Version 1.5.13

  • Memperluas suite regresi Delphi, C++Builder, dan Lazarus menjadi masing-masing 49 kasus, menambahkan cakupan langsung untuk penolakan color space ICCBased, Tagged PDF MarkInfo, anotasi Polygon, enkripsi AES (V2), dan anotasi Redact terhadap target PDF 1.2 / 1.3 / 1.4 / 1.5 / 1.6 masing-masing

Version 1.5.12

  • Memperbaiki post-processing SaveAs untuk penulisan ulang catalog inkremental. PDFiumPas kini memvalidasi objek tidak langsung yang diulang paling baru, sehingga override /Version catalog yang sudah ada diganti dengan benar saat menyimpan ke versi target PDF yang lebih lama secara eksplisit
  • Memperluas suite regresi Delphi, C++Builder, dan Lazarus menjadi masing-masing 44 kasus, menambahkan cakupan langsung untuk penggantian /Version catalog yang usang, normalisasi versi catalog PDF 1.4, dan penolakan fitur transparansi serta portable collection ketika versi target PDF yang dipilih tidak dapat merepresentasikannya

Version 1.5.11

  • Memperkeras keluaran SaveAs berversi untuk target PDF 1.3, 1.4, 1.5, 1.6, dan 1.7 yang eksplisit. PDFiumPas kini menormalkan marker versi catalog, menjaga default OpenAction Fit Height tetap aman versi, dan menolak fitur PDF yang lebih baru ketika versi target yang dipilih tidak dapat merepresentasikannya
  • Menambahkan cakupan regresi Delphi, C++Builder, dan Lazarus yang menyimpan dan memuat ulang file PDF 1.3 hingga PDF 1.7 eksplisit, memverifikasi header akhir, default OpenAction Fit Height, dan versi PDF yang dilaporkan

Version 1.5.10

  • Naik dari opsi B ke opsi C pada spesifikasi dengan menambahkan tes smoke TPdfView di ketiga suite IDE (Tests.PdfView). Setiap suite membangun TForm induk tersembunyi (via TForm.CreateNew di sisi Pascal dan new TForm(NULL, 0) di sisi C++Builder), memindahkan induk TPdfView, menetapkan Active := True, lalu memverifikasi permukaan round-trip untuk PageCount, default PageNumber, Zoom, Rotation, DisplayMode, dan bahwa View.Text cocok dengan TPdf.Text yang mendasarinya. Setiap suite IDE kini menjalankan 39 kasus

Version 1.5.9

  • Naik dari opsi A ke opsi B pada spesifikasi dengan menambahkan tes smoke rendering di ketiga suite IDE. Setiap suite Tests.Render memanggil TPdf.RenderPage pada sample.pdf dan memverifikasi tiga sinyal yang kuat alih-alih checksum byte-per-byte: bitmap yang dikembalikan persis cocok dengan ukuran piksel yang diminta; ukuran yang diminta berbeda (200x100, 64x256) menghasilkan bitmap yang cocok; dan halaman yang dirender setidaknya 95% latar putih dengan setidaknya 50 piksel non-putih (Lazarus: 20) yang menandai teks antialias. Setiap suite IDE kini menjalankan 33 kasus

Version 1.5.8

  • Menutup grup rencana pengujian A(2) asli dengan menambahkan tujuh regresi lagi per IDE: TPdf.CreateAnnotation membangun anotasi anHighlight plus round-trip SaveAs/LoadDocument, jalur baca AcroForm pada Demo/Delphi/FormFill/cmp_fill_out_and_merge_forms.pdf (FormType adalah ftAcroForm, FormFieldCount > 0, FlattenAllPages menurunkan field menjadi nol), dan cakupan jalur baca senyap untuk Bookmarks, LinkAnnotationCount, dan WebLinkCount pada dokumen yang tidak memiliki fitur-fitur itu. Setiap suite IDE kini menjalankan 30 kasus

Version 1.5.7

  • Memperluas suite Delphi (DUnitX), Lazarus (FPCUnit), dan C++Builder (GoogleTest) dengan tujuh regresi baru per IDE: PdfVersion, PageRotation, pencarian substring TPdf.FindFirst / FindNext, kecocokan CharacterOrigin / CharacterRectangle terhadap origin AddText, registrasi CreateAttachment plus round-trip SaveAs/LoadDocument, dan round-trip AddText teks beraksen yang memverifikasi jalur embedding European TrueType v1.3.0 menjaga code point tambahan Latin-1 tetap utuh

Version 1.5.6

  • PDF yang disimpan kini mendapat aksi buka default Fit Height untuk halaman pertama saat tidak ada OpenAction yang sudah ada, sehingga pembaca PDF awalnya menampilkan dokumen yang dihasilkan pada zoom setinggi halaman
  • Menambahkan cakupan regresi Delphi, Lazarus, dan C++Builder untuk OpenAction yang dihasilkan dan pengaturan Fit Height

Version 1.5.5

  • Menambahkan tes regresi di suite Delphi (DUnitX), Lazarus (FPCUnit), dan C++Builder (GoogleTest) untuk permukaan API inspeksi karakter dan font terindeks (TPdf.FontBaseName, FontFamilyName, FontWeight, FontItalicAngle, FontData, FontIsEmbedded, CharacterFontWeight, CharacterAngle). Suite Lazarus sengaja melewatkan FontData, yang saat ini access-violate di dalam FPDFFont_GetFontData pada FPC

Version 1.5.4

  • Menambahkan demo Attachment C++Builder yang diporting dari sampel Delphi, mencakup pembuatan PDF, penambahan, pencantuman, ekstraksi, penghapusan, dan penyimpanan attachment file tertanam dengan tampilan subtype MIME

Version 1.5.3

  • Mengekspos perhitungan spread-page yang mendasari mode dua halaman TPdfView sebagai helper level unit ComputeSpreadPages(DisplayMode, PageNumber, PageCount, out LeftPageNo, out RightPageNo). Perilakunya tidak berubah; helper ini membuat aturan yang sadar cover dapat diuji secara independen tanpa membuat instance viewer
  • Menambahkan lima tes regresi di suite Delphi (DUnitX), Lazarus (FPCUnit), dan C++Builder (GoogleTest) yang mencakup dokumen kosong, pasangan dua halaman standar, halaman cover berdiri sendiri di dmTwoPageContinuousWithCover, pasangan setelah cover, dan perilaku clamping halaman terakhir / di luar rentang

Version 1.5.2

  • Menambahkan dukungan bahasa dokumen melalui TPdf.Language, dipetakan ke entri /Lang pada katalog PDF
  • Menambahkan akses subtype MIME attachment dengan TPdf.AttachmentType
  • Menambahkan anRedact ke TPdfAnnotationSubtype dan menambahkan helper penghapusan page-object untuk TPdf dan TPdfView
  • Memperbarui demo viewer dan attachment agar menampilkan informasi bahasa dan tipe attachment baru saat tersedia

Version 1.5.1

  • Menambahkan dmTwoPageContinuousWithCover untuk TPdfView sehingga tata letak viewer dapat menampilkan halaman pertama sendirian lalu melanjutkan dengan spread dua halaman
  • Memperbarui demo MultiPageViewer Delphi, C++Builder, dan Lazarus agar mengekspos mode tampilan dua halaman yang sadar cover

Version 1.5.0

  • Menambahkan suite tes otomatis level smoke untuk Delphi (DUnitX), Lazarus (FPCUnit), dan C++Builder (GoogleTest). Ketiga suite berbagi satu PDF fixture di Tests\TestData dan menjalankan tujuh kasus yang sama masing-masing, mencakup pemuatan dokumen, info halaman, ekstraksi teks, metadata, round-trip penyimpanan, validasi header PDF, dan properti Compressed

Version 1.4.3

  • Memperkaya demo FontProperti agar menampilkan API metadata font TPdfView dan TPdf, termasuk handle font, ukuran data font, dan metrik karakter
  • Menambahkan properti inspeksi karakter dan font terindeks TPdfView dan memperbarui demo FontProperti agar mengquery metadata font text-object

Version 1.4.2

  • Menambahkan properti inspeksi karakter dan font terindeks ke TPdf untuk analisis teks tanpa memerlukan viewer. Properti terindeks karakter (CharacterAngle, CharacterFontSize, CharacterFontWeight) mengquery metrik per karakter dari stream teks halaman saat ini. Properti terindeks page-object (FontAscent, FontBaseName, FontData, FontDescent, FontFamilyName, FontHandle, FontIsEmbedded, FontItalicAngle, FontWeight) mengquery metadata font untuk objek teks apa pun pada halaman saat ini
  • Objek halaman non-teks mengembalikan nilai aman nol atau kosong untuk semua properti Font* alih-alih melempar error, sehingga mudah untuk mengiterasi setiap page object dan hanya memeriksa yang teks
  • FontBaseName membaca nama font dasar PostScript secara langsung alih-alih mundur ke nama family font, memberikan identifier yang lebih akurat untuk font tertanam

Version 1.4.1

  • Menambahkan versi C++Builder dan Lazarus dari demo EuropeanText sehingga semua keluarga IDE yang didukung dapat memverifikasi pembuatan teks Eropa beraksen dengan font TrueType sistem
  • Menambahkan versi C++Builder dan Lazarus dari demo FormFill, termasuk PDF form contoh, pengeditan field, regenerasi appearance, workflow penyimpanan terisi, dan penyimpanan rata

Version 1.4.0

  • Menambahkan dukungan Lazarus / Free Pascal: paket baru PDFiumLaz menyediakan TPdf, TPdfView, dan komponen terkait yang sama di bawah widget set LCL, memperluas library ke IDE Lazarus dan compiler Free Pascal di samping paket Delphi dan C++Builder yang sudah ada
  • Menambahkan versi Lazarus dari demo sehingga pengembang Lazarus dapat menjelajahi setiap fitur dengan contoh yang dapat dijalankan
  • Memperbaiki masalah kompilasi Lazarus saat define kondisional Free Pascal dievaluasi bersama pemeriksaan versi compiler Delphi, menyebabkan build FPC mencoba menyelesaikan nama unit khusus Delphi dan gagal

Version 1.3.1

  • Mendokumentasikan workflow form flattening di set bantuan: GenerateFormAppearances, FlattenPage, FlattenAllPages, dan konstanta terkait FLAT_* / FLATTEN_* kini tercakup di TPdf, TPdfView, referensi API, matriks fitur, dan contoh pemrograman
  • Memperbaiki tabel arsitektur di halaman ikhtisar sehingga mencantumkan unit binding aktual yang dikirim di folder Lib

Version 1.3.0

  • Meningkatkan dukungan karakter Eropa saat membuat PDF. TPdf.AddText kini memuat dan menyimpan cache font TrueType sistem yang cocok sebelum membuat text object, mempertahankan karakter beraksen dari Ceko, Prancis, Jerman, Spanyol, Portugis, Polandia, dan Turki yang tidak dapat direpresentasikan oleh font standar bawaan PDFium
  • Aplikasi yang sebelumnya menghasilkan tanda tanya atau glyph pengganti untuk teks Latin non-ASCII kini akan merender dengan benar tanpa perubahan kode apa pun. Demo EuropeanText ditambahkan untuk menunjukkan fitur ini

Version 1.2.0

  • Menambahkan penyegaran appearance AcroForm ke TPdf: memanggil GenerateFormAppearances setelah memodifikasi nilai FormField[] memperbarui appearance widget sehingga nilai yang diisi terlihat di pembaca PDF standar tanpa memerlukan sesi edit interaktif
  • Menambahkan helper form flattening ke TPdf (FlattenPage / FlattenAllPages) dan TPdfView (FlattenPage untuk halaman view saat ini). Flattening menyematkan nilai field yang diisi secara permanen sebagai konten halaman biasa dan menghapus lapisan form interaktif, menghasilkan dokumen statis yang dirender konsisten di semua viewer
  • Menambahkan Demo\Delphi\FormFill untuk mendemonstrasikan workflow fill-and-save dan fill-and-flatten dengan PDF AcroForm contoh

Version 1.1.2

  • Menambahkan kompresi stream PDF saat penyimpanan. Properti baru TPdf.Compressed (diaktifkan secara default) menulis ulang content stream yang tidak terkompresi sebagai stream terkompresi FlateDecode saat menyimpan, secara signifikan mengurangi ukuran file untuk PDF yang dihasilkan secara programatik. Aplikasi yang memerlukan keluaran polos tanpa kompresi dapat menetapkan Compressed ke False sebelum memanggil SaveAs

Version 1.1.1

  • Build paket Win64 tidak lagi menyertakan unit registrasi desain-waktu, mencegah kegagalan saat build ketika paket Win64 diterapkan dalam konteks runtime-only
  • Loader DLL PDFium kini mencari subdirektori aplikasi Win32 atau Win64 terlebih dahulu, memakai nama standar pdfium.dll dan pdfium.v8.dll, lalu jatuh kembali ke direktori flat aplikasi dan direktori sistem Windows. Ini cocok dengan tata letak DLL yang dibundel bersama paket komponen, membuat instalasi menjadi lurus

Version 1.1.0

  • Memperbaiki cacat visual clipping di mode dua halaman TPdfView: konten halaman bocor melewati gutter karena tile halaman kiri dan kanan berbagi satu rectangle clipping. Kini setiap tile memotong secara independen sehingga konten tetap berada di dalam batas halamannya
  • Memperbaiki pesan error demo Delphi saat DLL PDFium tidak dapat ditemukan, memberikan prompt yang lebih jelas dengan nama DLL dan lokasi yang diharapkan