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
- Versi terbaru: 2.57.0; Tanggal rilis:
Version 2.57.0
Ditambahkan (Added)
TPdfThumbnailView.Orientationmendukung tata letak thumbnail vertikal dan horizontal dengan tetap mempertahankan default vertikal yang adaFirstVisiblePageIndex,LastVisiblePageIndex, danEnsureCurrentPageVisiblemengekspos dan mengontrol viewport thumbnail dengan indeks halaman berbasis satu
Diubah (Changed)
- Mengubah
CurrentPageIndexkini menggulir thumbnail yang dipilih ke tampilan di salah satu orientasi - Pengujian Delphi, Lazarus, dan C++Builder kini mencakup default orientasi, pengalihan, rentang yang terlihat, dan visibilitas halaman yang dipilih
TPdf.AboutInfo, metadata paket Lazarus, dan metadata penginstal kini melaporkan Version 2.57.0 secara konsisten
Version 2.56.2
Diubah (Changed)
HighlightSearchText,AddSearchTextHighlight, danClearHighlightkini membatalkan hanya persegi panjang perangkat untuk rentang pencarian yang ditambahkan atau dihapus alih-alih mengecat ulang seluruh penampil- Mengganti sorotan dengan kecocokan yang sama atau menambahkan kecocokan duplikat tidak lagi menjadwalkan pengecatan ulang yang tidak perlu
- Pengujian Delphi, Lazarus, dan C++Builder kini mencakup pembatalan terbatas, pembaruan idempoten, pembersihan, dan keamanan tampilan tidak aktif
TPdf.AboutInfo, metadata paket Lazarus, dan metadata penginstal kini melaporkan Version 2.56.2 secara konsisten
Version 2.56.1
Diubah (Changed)
TPdfThumbnailViewkini menggunakan kembali bitmap yang dirender untuk halaman yang tetap terlihat di seluruh pengecatan ulang dan posisi gulir yang berdekatan- Cache hanya menyimpan rentang halaman yang terlihat saat ini dan melepaskan entri dengan tepat ketika halaman meninggalkan rentang itu, dokumen yang ditetapkan berubah, atau dimensi thumbnail berubah
- Pengujian Delphi, Lazarus, dan C++Builder kini mencakup penggunaan kembali cache, pemangkasan viewport, invalidasi ukuran, penggantian dokumen, dan penghancuran komponen
TPdf.AboutInfo, metadata paket Lazarus, dan metadata penginstal kini melaporkan Version 2.56.1 secara konsisten
Version 2.56.0
Ditambahkan (Added)
TPdfView.CutSelectedFormTextToClipboarddanTPdfView.PasteFormTextFromClipboardmenyediakan pengeditan clipboard Unicode untuk widget formulir yang dapat diedit yang difokuskan
Diubah (Changed)
- Editor formulir yang difokuskan kini menangani pintasan keyboard standar salin, potong, tempel, dan pilih semua sebelum meneruskan input teks ke PDFium
- Potong dan tempel menolak field hanya-baca dan sesi tanpa izin isi-formulir atau modifikasi, sementara potong menyalin dengan sukses sebelum menghapus teks yang dipilih
- Pengujian Delphi, Lazarus, dan C++Builder kini mencakup panggilan tanpa fokus, perjalanan pulang-pergi pintasan, dan perilaku penolakan hanya-baca
TPdf.AboutInfo, metadata paket Lazarus, dan metadata penginstal kini melaporkan Version 2.56.0 secara konsisten
Version 2.55.0
Ditambahkan (Added)
TPdfView.AddSearchTextHighlightmenambahkan kecocokan unik untuk istilah pencarian lain ke overlay halaman saat ini, memungkinkan beberapa kueri untuk tetap disorot bersama
Diubah (Changed)
HighlightSearchTexttetap menjadi titik masuk pengganti dan kini berbagi pemindai aditif, sementara rentang karakter duplikat diabaikan danClearHighlightmenghapus set akumulasi lengkap- Pengujian Delphi, Lazarus, dan C++Builder kini mencakup akumulasi kueri berbeda dan penekanan rentang duplikat
TPdf.AboutInfo, metadata paket Lazarus, dan metadata penginstal kini melaporkan Version 2.55.0 secara konsisten
Version 2.54.0
Ditambahkan (Added)
TPdfkini mengekspos snapshot objek-halaman lengkap, pembaruan gaya berbatch, transformasi objek afin, segmen jalur, jalur klip, dan turunan Form XObject- Inspeksi karakter kini mencakup warna isian dan guratan, nama dan flag font, batas glyph longgar, matriks efektif, handel objek-teks, dan konversi indeks karakter-ke-teks
- Anotasi kini melakukan perjalanan pulang-pergi geometri batas dan stream tampilan normal, rollover, dan down
- Aksesoris thumbnail raw dan decoded baru, transformasi konten-halaman dan anotasi, serta
RenderPageWithMatrixmenyediakan jalur rendering dan pengeditan lanjutan langsung
Diubah (Changed)
- Perubahan gaya objek-halaman dapat dikomit sebagai satu batch sehingga PDFium meregenerasi konten halaman hanya sekali
- Rendering matriks menggunakan jalur bitmap tanpa-salin yang ada ketika tata letak bitmap tujuan kompatibel
Version 2.53.1
Diperbaiki (Fixed)
- Caption menu Copy bawaan Tiongkok kini menggunakan titik kode Unicode yang tidak bergantung pada pengodean dan ditampilkan dengan benar dalam build Lazarus
- Toolchain Delphi yang lebih lama dapat mengompilasi
FPdfAsyncketika unitWinapi.Windowsmereka menghilangkan deklarasiGetTickCount64
Version 2.53.0
Ditambahkan (Added)
- Fixture pengujian
Tests.ApiCoveragebaru yang mencakup API TPdf publik yang sebelumnya memiliki nol cakupan pengujian end-to-end:GetPageBox/SetPageBox(baca/tulis MediaBox/CropBox, error kotak hilang, dan perjalanan pulang-pergi simpan),FlattenPage/FlattenAllPages(nilai pengembalian dan pelestarian jumlah halaman),GenerateFormAppearances(no-op pada dokumen non-formulir),SaveAsEncrypted/SaveAsEncryptedToStream(AES-256 dengan perjalanan pulang-pergi kata sandi — memverifikasi bahwa file terenkripsi menolak dibuka tanpa kata sandi dan terbuka dengannya), validasi batasDeletePage(halaman 0 dan di luar rentang memunculkanEPdfError), dan sentinel anotasiHasContents/HasAuthoryang diperkenalkan di v2.38.0 (memverifikasi bahwaDefault(TPdfAnnotation)meninggalkannyaFalse)
Version 2.52.0
Ditambahkan (Added)
TPdfView.CopySelectedFormTextToClipboardmenyalin pilihan teks di dalam widget AcroForm yang difokuskan ke clipboard Windows sebagaiCF_UNICODETEXT
Diubah (Changed)
- Operasi salin teks-halaman dan formulir-yang-difokuskan kini berbagi penulis clipboard Unicode defensif yang sama dan meninggalkan clipboard tidak berubah ketika pilihan mereka kosong
- Pengujian Delphi, Lazarus, dan C++Builder kini mencakup panggilan salin-formulir tidak aktif atau tidak difokuskan dan perjalanan pulang-pergi pilihan formulir yang difokuskan melalui clipboard Windows
TPdf.AboutInfo, metadata paket Lazarus, dan metadata penginstal kini melaporkan Version 2.52.0 secara konsisten
Version 2.51.0
Ditambahkan (Added)
TPdfView.SelectLineAtmemilih baris teks visual yang berisi halaman berbasis satu dan indeks karakter berbasis nol tanpa memerlukan input mouse
Diubah (Changed)
- Pemilihan baris terprogram, pemilihan klik-tiga, dan
Shift+HomeatauShift+Endkini berbagi satu model batas-baris kotak-karakter - Pengujian Delphi, Lazarus, dan C++Builder kini mencakup pemilihan baris yang stabil dan indeks halaman atau karakter yang tidak valid
TPdf.AboutInfo, metadata paket Lazarus, dan metadata penginstal kini melaporkan Version 2.51.0 secara konsisten
Version 2.50.0
Ditambahkan (Added)
TPdf.LoadDocumentkini menerima jendelaIndexberbasis nol danCountke dalam bufferTBytes, memungkinkan PDF tertanam dimuat tanpa mengalokasikan slice array-byte sementara
Diubah (Changed)
- Pemuatan rentang-byte menolak jendela negatif atau di luar batas sebelum mengubah status dokumen dan mempertahankan opsi masa pakai buffer-yang-diberi-buffer dan buffer-yang-dipinjam yang ada
- Pengujian Delphi, Lazarus, dan C++Builder kini mencakup jendela PDF tertanam dan argumen rentang-byte yang tidak valid
TPdf.AboutInfo, metadata paket Lazarus, dan metadata penginstal kini melaporkan Version 2.50.0 secara konsisten
Version 2.49.1
Ditambahkan (Added)
TPdfView.FitModekini mendukungpfmFitHeightuntuk menyesuaikan halaman saat ini ke tinggi viewport yang terlihat sambil mengizinkan pengguliran horizontal saat diperlukan
Diperbaiki (Fixed)
- Mode fit kini konvergen setelah perubahan visibilitas bilah gulir mengubah area klien, menjaga hasil fit-page, fit-width, dan fit-height konsisten antara VCL dan LCL
- Pengujian penampil Delphi, Lazarus, dan C++Builder kini mencakup pemilihan
pfmFitHeightdan perjalanan pulang-pergi enumerasi TPdf.AboutInfo, metadata paket Lazarus, dan metadata penginstal kini melaporkan Version 2.49.1 secara konsisten
Version 2.49.0
Ditambahkan (Added)
- Permukaan pengikatan PDFium publik kini mencakup semua 470 fungsi yang diekspor di header yang ditinjau, termasuk akses deskripsi lampiran melalui
FPDFAttachment_SetDescriptiondanFPDFAttachment_GetDescription TPdfkini mengekspos deskripsi lampiran, validitas referensi silang, offset akhir trailer, revisi security-handler, pemuatan memori 64-bit, rentang byte tanda tangan, rentang teks tautan web, dan snapshot data gambar, filter, metadata, dan profil ICC yang diperluas- Pembantu formulir kini mendukung fokus field asli, kueri dan pembaruan opsi pilihan terfokus, penerusan roda mouse, goresan tinta yang dapat ditulis, dan overlay formulir setelah rendering progresif
Diubah (Changed)
FormFieldCount, indeks field formulir, dan urutan tab kini mendeskripsikan hanya anotasi widget alih-alih menyertakan anotasi halaman yang tidak terkait- Halaman
TPdftanpa kepala kini memasuki dan meninggalkan siklus hidup halaman pengisian formulir sehingga fokus asli dan API field terfokus bekerja tanpaTPdfView - Ekspor deskripsi lampiran dibatasi kemampuan sehingga aplikasi yang menggunakan build PDFium yang lebih lama masih dapat memuat pustaka dan mendeteksi fitur yang tidak tersedia
Diperbaiki (Fixed)
- Rendering halaman progresif kini melukis kontrol formulir saat pengisian formulir diaktifkan
- Pengujian Delphi, Lazarus, dan C++Builder kini mencakup diagnostik dokumen baru, deskripsi lampiran, jalur tinta, perilaku formulir, rentang byte tanda tangan, rentang tautan web, dan metadata gambar
TPdf.AboutInfo, metadata paket Lazarus, dan metadata penginstal kini melaporkan Version 2.49.0 secara konsisten
Version 2.48.0
Ditambahkan (Added)
TPdfMatrixkini mengekspos pabrik, kloning dan penugasan, diagnostik status hingga dan dapat dibalik, perbandingan berbasis toleransi, akses translasi, pelaporan determinan, dan dekomposisi afin- Komposisi prepend, rotasi sadar pivot, penskalaan, kemiringan dan pembalikan, plus pemetaan persegi panjang stretch, contain, dan cover mendukung alur kerja local-space dan layout yang dipasang tanpa aritmetika koefisien manual
- Akses terbalik non-mutating, pemetaan titik terbalik, transformasi vektor dan segiempat, batch titik dan persegi panjang dinamis, varian in-place, dan batas yang ditransformasi dalam satu pass memperluas permukaan geometri yang dapat digunakan kembali
Diubah (Changed)
- Translasi, penskalaan, dan pembalikan sumbu kini hanya memperbarui koefisien yang terdampak alih-alih merutekan melalui perkalian afin umum
- Transformasi persegi panjang menormalkan masukannya sekali, menggunakan jalur khusus yang tepat sejajar-sumbu jika memungkinkan, dan menghitung batas rotasi umum tanpa catatan titik sementara
- Transformasi batch titik dan persegi panjang mengalokasikan satu larik hasil atau menggunakan kembali penyimpanan pemanggil, sementara batas titik yang ditransformasi diakumulasi dalam satu pass tanpa larik perantara
Diperbaiki (Fixed)
- Pemetaan persegi panjang menolak hasil berukuran nol, non-hingga, dan meluap
Singlesebelum menerbitkan matriks yang tidak dapat digunakan - Pengujian Delphi, Lazarus, dan C++Builder kini memverifikasi urutan komposisi, invarian pivot, perjalanan pulang-pergi terbalik, persegi panjang yang dipasang, dekomposisi, dan perilaku geometri massal
TPdf.AboutInfo, metadata paket Lazarus, dan metadata penginstal kini melaporkan Version 2.48.0 secara konsisten
Version 2.47.0
Ditambahkan (Added)
FPdfAsynckini menyediakan alasan dan pesan pembatalan terstruktur, pendaftaran callback yang dapat dihapus, sumber berbasis batas waktu, menunggu pembatalan, dan operasi try-cancel atomik melalui antarmuka yang diperluas yang mempertahankan API asliTPdfFuture<T>.RunExmenambahkan dispatch balasan dan prioritas pekerja yang dapat dikonfigurasi sementara amplop hasil mengekspos ID operasi, validitas nilai, nama kelas pengecualian, pengaturan waktu penyelesaian, dan pembantu penyelesaian yang dapat digunakan kembaliTPdfAsyncExecutormenambahkan kumpulan pekerja tetap yang dapat digunakan kembali dengan empat jalur prioritas FIFO, backpressure antrean terbatas opsional, handle tugas yang dapat dibatalkan, menunggu yang sadar batas waktu, snapshot tugas, statistik agregat, dan mati dengan anggun
Diubah (Changed)
- Tugas asinkron berulang dapat menggunakan kembali thread pekerja dan operasi antrean O(1) alih-alih membuat thread untuk setiap tugas, sementara penyelesaian yang disinkronkan tetap tersedia untuk host UI
- Kegagalan executor dan future mempertahankan diagnostik kelas dan pesan pengecualian, pembatalan mempertahankan alasannya yang asli, dan pengecualian callback tetap terisolasi dari siklus hidup pekerja dan mati
- Pengujian Delphi, Lazarus, dan C++Builder kini mencakup permukaan pembatalan yang diperluas, metadata future, kontrol tugas, backpressure, pengurutan prioritas, statistik, kegagalan, dan mati
Diperbaiki (Fixed)
- Pemilik pembatalan bersamaan kini menerima hasil penulis pertama yang deterministik alih-alih mengandalkan urutan observasi dan pembatalan yang terpisah
- Menunggu idle thread utama memproses balasan tugas yang disinkronkan, mencegah pekerja yang selesai meninggalkan executor secara permanen non-idle selama mati yang dikoordinasikan
TPdf.AboutInfo, metadata paket Lazarus, dan metadata penginstal kini melaporkan Version 2.47.0 secara konsisten
Version 2.46.0
Ditambahkan (Added)
FPdfAsn1kini mengekspos kelas pengidentifikasi, pengodean dan pendekodean nomor tag tinggi 64-bit, catatan TLV yang diurai, jendela pembaca anak zero-copy, dekoder primitif bertipe, dan irisan konten atau nilai yang dikodekan- Penulis DER kini mendukung rentang INTEGER 64-bit tidak bertanda penuh, konten INTEGER arbitrer yang divalidasi, ENUMERATED, pemilihan UTCTime atau GeneralizedTime otomatis, tag application dan private, SEQUENCE multi-nilai, dan keluaran SET OF yang diurutkan secara kanonik
ValidateDermengembalikan kesalahan validasi sadar-offset sambil menegakkan batas bersarang, jumlah simpul, panjang konten, jumlah kesalahan, root, dan pengurutan SET opsional yang dapat dikonfigurasi
Diubah (Changed)
- Konkatenasi DER dan komposisi multi-nilai menggunakan satu alokasi keluaran, buffer penulis mengekspos operasi reserve, count, capacity, dan transfer kepemilikan, dan pengurutan SET OF kini menggunakan pengurutan gabung
O(n log n) - Nilai BOOLEAN, INTEGER, BIT STRING, OBJECT IDENTIFIER, NULL, UTF8String, PrintableString, IA5String, UTCTime, dan GeneralizedTime menerima pemeriksaan bentuk kanonik selama pengodean, pendekodean bertipe, atau validasi
- Paket runtime Lazarus kini mengekspor
FPdfAsn1, dan suite pengujian Delphi, Lazarus, dan C++Builder melatih permukaan DER publik yang sama
Diperbaiki (Fixed)
- Angka tag spesifik konteks yang lebih besar dari 30 tidak lagi dipotong menjadi lima bit pengidentifikasi rendah
- Pengidentifikasi tag tinggi yang cacat, panjang pasti non-minimal, UTF-8 tidak valid, padding BIT STRING bukan nol, field waktu tidak valid, root tertinggal, dan pelanggaran batas sumber daya ditolak secara deterministik
TPdf.AboutInfo, metadata paket Lazarus, dan metadata penginstal kini melaporkan Version 2.46.0 secara konsisten
Version 2.45.0
Ditambahkan (Added)
FPdfPreflightReportkini menetapkan tingkat keparahan Info, Warning, atau Error ke setiap masalah dan mengekspos API tingkat keparahan, status, kategori, kode-masalah, lookup, search, flattening, dan filtering per-standar dan tingkat laporan- Laporan preflight kini mengekspor SARIF 2.1.0, JUnit XML, NDJSON, dan XML asli melalui metode
To*danSave*ToFileyang cocok untuk pipeline CI, otomasi, dan streaming - Sidik jari laporan SHA-256 yang stabil mengidentifikasi hasil validasi yang setara secara independen dari jalur sumber dan stempel waktu pembuatan
Diubah (Changed)
- Laporan JSON, CSV, text, Markdown, dan HTML kini menyertakan tingkat keparahan dan ringkasan status yang diperluas; HTML menambahkan keterangan tabel yang dapat diakses dan ringkasan status
- Konstruksi koleksi masalah dan standar menggunakan pertumbuhan kapasitas geometris, hasil kueri diukur sebelumnya, escaping JSON menulis ke dalam satu buffer keluaran terbatas, dan semua file laporan menggunakan satu penulis UTF-8 langsung
- Ringkasan kategori masalah menggunakan pengurutan deterministik, stempel waktu menyertakan milidetik, JSON membawa
formatVersion: 2, dan sel CSV menetralkan rumus spreadsheet
Diperbaiki (Fixed)
- Ekspor JSON kini mempertahankan pasangan Unicode suplementer yang valid dan menggantikan unit kode pengganti UTF-16 yang terisolasi alih-alih memancarkan data skalar yang cacat
- Ekspor HTML kini meng-escape apostrof, dan tampilan laporan yang difilter memiliki larik masalah independen alih-alih berbagi penyimpanan hasil yang dapat diubah
TPdf.AboutInfo, metadata paket Lazarus, dan metadata penginstal kini melaporkan Version 2.45.0 secara konsisten
Version 2.44.0
Ditambahkan (Added)
- Markah dan destinasi kini mengekspos keadaan terbuka, jumlah turunan, target aksi, mode tampilan destinasi, dan hingga empat parameter tampilan
Metadata,GrantedPermissions,UserGrantedPermissions,HasPermission, danUserHasPermissionmenyediakan cuplikan pemeriksaan dokumen bertipe dan kueri izinExtractThumbnail(PageNumber)merender halaman yang diminta tanpa mengubah halaman aktif, dan hasil stempel waktu RFC 3161 mengekspos detail kebijakan, waktu pembuatan, dan nonce
Diubah (Changed)
- Jalur markah, JavaScript, metadata, destinasi, dan gambar mini kini memakai buffer validasi dua-pass, pertumbuhan koleksi geometris, dan traversal yang aman terhadap siklus
- Pemrosesan-pasca penyimpanan kini me-resolve katalog aktif, pohon halaman, dan open action melalui revisi xref saat ini, menyimpan cache stream objek yang telah didekodekan, serta memindai kamus PDF dengan batas leksikal
- Penguraian PDF bersama kini memberlakukan header objek, generasi, kunci kamus, panjang stream, geometri prediktor, rentang integer, serta batas komentar, literal-string, dan hexadecimal-string yang eksak
- Validasi respons RFC 3161 kini mengikat baik nonce maupun SHA-256
messageImprint, mensyaratkan signer yang valid secara struktural, dan menerapkan aturan DER length, OID, INTEGER, dan GeneralizedTime yang ketat
Diperbaiki (Fixed)
- Dokumen inkremental tidak lagi memilih katalog duplikat yang tidak aktif atau sufiks referensi yang cacat saat menambahkan open action default
- Token stempel waktu dengan panjang DER long-form mempertahankan token terkode yang lengkap, sementara urutan field opsional CMS yang cacat dan signer set kosong ditolak
- Build Delphi yang bersih kini menulis field seed nonce PAdES melalui salinan byte aligned-safe dan meneruskan byte respons XFA dengan tipe pointer native yang eksak
Version 2.43.0
Ditambahkan (Added)
- Rekaman field dan anotasi XFDF kini mengekspos flag keberadaan yang membedakan nilai XML yang dihilangkan dari nilai kosong eksplisit
Diubah (Changed)
- Impor XFDF menerima elemen dan atribut berprefiks namespace, konten teks dan CDATA campuran, referensi entitas, dan nilai whitespace-signifikan sambil menolak referensi skalar Unicode yang tidak valid
- Impor dan ekspor XFDF memakai pencocokan field terindeks dan buffer geometris terbatas, meningkatkan throughput dan perilaku alokasi puncak untuk form bersarang dalam, koleksi anotasi besar, ink list, verteks, dan segiempat markup
- Validasi PDF/A dan PDF/UA memakai pertumbuhan terbatas untuk koleksi halaman, stream, structure-name, dan RoleMap yang besar; Resolusi RoleMap PDF/UA kini mengikuti larik langsung dan objek name atau array tidak-langsung ber-generasi eksak
Diperbaiki (Fixed)
- Siklus baca-tulis XFDF kini mempertahankan jalur field bersarang dalam, nilai field kosong eksplisit, konten anotasi kosong eksplisit, dan perbedaan antara konten yang absent dan kosong
- Pemuatan memory-buffer yang tidak valid dan penetapan halaman di luar rentang ditolak tanpa meninggalkan keadaan parsial pada dokumen atau halaman, dan kegagalan muat-ulang halaman native mempertahankan halaman yang sebelumnya aktif
- Identifier marked-content yang besar dan buffer metadata tanda tangan dibatasi dan divalidasi sebelum alokasi atau akses native
Version 2.42.0
Ditambahkan (Added)
TPdfMatrixkini menyediakanInvert,TryInvert,TransformPoint, danTransformRectuntuk pemetaan koordinat, hit testing, batas ternormalisasi, dan penanganan singular-matrix eksplisitTPdf.WrapTextmendapatkan overloadBreakLongWordsyang memecah CJK dan teks lain tanpa spasi sambil tetap menjaga pasangan surrogate UTF-16 yang validTPdfAnnotation.AttachmentPointSetsmengekspos setiap segiempat dalam anotasi markup multi-baris sementara fieldAttachmentPointsyang sudah ada tetap menjadi alias untuk himpunan pertama
Diubah (Changed)
- Ekstraksi teks, konstruksi konten terbaca, pencarian kata, dan pemetaan offset spoken-text kini memakai jalur alokasi terbatas dan pencarian biner, mengurangi alokasi berulang dan pemindai linier pada halaman besar
- Serialisasi ASN.1 dan pembuatan PDF terenkripsi kini memakai buffer keluaran geometris; Pengurutan objek terenkripsi memakai sorting
O(n log n)dan baris xref ditulis langsung ke buffer akhir WrapTextmempertahankan batas baris CR, LF, dan CRLF serta menggunakan kembali satu objek pengukuran native untuk seluruh operasi- Impor dan ekspor XFDF mempertahankan setiap segiempat markup; Impor juga menerapkan warna RGB/interior dan mengurai koordinat desimal secara independen dari locale proses
Diperbaiki (Fixed)
- Pemanggil warisan kini dapat kembali memperbarui konten dan penulis anotasi dengan menetapkan string non-kosong tanpa menyetel sentinel
HasContentsdanHasAuthoryang lebih baru - String anotasi yang kosong eksplisit kini memakai buffer native zero-terminated yang valid, sehingga menghapus
/Contents,/T, dan kunci teks opsional lainnya tidak lagi meneruskan pointer nil ke PDFium
Version 2.41.0
Diubah (Changed)
- Laporan preflight
SaveJsonToFile,SaveMarkdownToFile, danSaveTextToFilekini menulis UTF-8 pada Delphi (mencocokkan denganSaveHtmlToFileyang sudah ada), bukan halaman kode ANSI sistem; Karakter non-ASCII dalam jalur berkas, rekomendasi, dan catatan ruang lingkup sebelumnya rusak pada Delphi ketika disimpan melalui metode ini SaveCsvToFilekini menulis UTF-8 dengan awalan BOM sehingga Excel untuk Windows mendeteksi penyandian secara otomatis; Tanpa BOM, Excel memperlakukan CSV UTF-8 sebagai halaman kode 1252 dan merusak karakter non-ASCII apa pun
Diperbaiki (Fixed)
- Demo
ExtractImagesmembocorkan objekTBitmapyang disimpan dalam cache padaFExtractedImagesketika form ditutup tanpa membersihkannya secara eksplisit terlebih dahulu; Form tersebut kini mengesampingkanDestroyuntuk memanggilClearExtractedImagesguna melepaskan setiap bitmap yang disimpan dalam cache
Version 2.40.0
Diubah (Changed)
TPdf.RenderPage(HDC, ...)kini menyembunyikan pengecualian FPU/SSE di sekitar panggilanFPDF_RenderPage, mencocokkan denganTPdfView.RenderPage(HDC)(diperbaiki pada v2.25.0) dan setiap titik masuk rendering yang mengembalikan bitmap; Overload langsung-ke-DC tingkatTPdfsebelumnya membiarkan pengecualian FPU tidak disembunyikan pada kompiler pra-D12
Diperbaiki (Fixed)
ColorToARGBkini mengembalikan piksel yang sepenuhnya transparan (alfa 0) untukclNonedanclDefaultalih-alih memperlakukan nilai sentinel sebagai warna RGB literal; Perilaku sebelumnya menghasilkan isian gelap yang hampir buram saat pemanggil meneruskanclNonedengan mengharapkan “no colour”
Version 2.39.1
Diperbaiki (Fixed)
- Penyimpanan PDF 1.3 eksplisit kini menghapus entri
/SMask /None,/AIS false, dan/TK trueyang hanya mengulang keadaan grafis awal sambil terus menolak keadaan transparansi non-default
Version 2.39.0
Diubah (Changed)
CreatePDFdanImageToPDFkini menggunakan tujuan penyimpanan yang dikonfirmasi dan melaporkan keberhasilan hanya ketikaSaveAsselesai dengan suksesBatchExport,PDFtoJpg, danSplitPDFkini mengalokasikan direktori keluaran unik sehingga eksekusi berulang dan masukan bernama sama tetap mempertahankan hasil sebelumnyaSplitViewkini membungkus pencarian sekali tanpa meninggalkan status halaman tersembunyi setelah pembatalan atau tidak ada kecocokan, serta membatalkan pekerjaan cetak yang tidak lengkap alih-alih mengirimkan keluaran parsial
Diperbaiki (Fixed)
MergePDFkini menolak token rentang halaman yang cacat dan jalur keluaran yang menimpa sumber, menghitung halaman yang benar-benar diimpor, dan menolak untuk menyimpan hasil kosong- Demo
AttachmentDelphi dan C++Builder kini melakukan komit penyimpanan jalur yang sama melalui penggantian berkas yang aman dari rollback sehingga kegagalan penggantian nama tidak dapat menghapus PDF asli
Version 2.38.0
Diubah (Changed)
SetAnnotationDatakini menjaga penulisan/Contentsdan/Authordi belakang sentinelHasContents/HasAuthorpadaTPdfAnnotation, mencocokkan dengan polaHasName/HasSubject/HasIconyang sudah ada; Sebelumnya kedua kolom ini ditulis tanpa syarat, sehingga penetapan rekamanDefault(TPdfAnnotation)untuk memperbarui warna atau bendera saja secara diam-diam menimpa konten dan penulis anotasi yang ada dengan string kosong;GetPageAnnotationkini menyetel sentinel tersebut sehingga siklus baca-ubah-tulis mempertahankan nilai aslinya
Diperbaiki (Fixed)
GenerateFormAppearanceskini membaca nilai kotak centang/tombol radio melaluiFPDFAnnot_GetFormFieldValue(yang berjalan ke kamus bidang induk per ISO 32000-1 §12.7.5) alih-alihFPDFAnnot_GetStringValue(Annot, 'V', ...)(yang membaca kamus widget); Widget biasanya tidak membawa/V, sehingga/AStidak pernah disinkronkan ke status dicentang dan kotak centang/tombol radio yang diratakan dirender sebagai tidak dicentang
Version 2.37.0
Diubah (Changed)
ParseTsaUrlkini membatasi port ke1..65535setelah penguraian; nilai port yang terlalu besar jika tidak dibatasi akan berputar melalui pemotonganDWORDdan dapat mendarat pada port yang valid- XFDF
ParseFieldkini menerima parameter kedalaman (default 0, dibatasi pada 64) dan mengembalikan bidang kosong pada batas tersebut, sehingga rantai<field>bersarang dengan kedalaman 100 000 yang berniat jahat tidak dapat lagi meluap ke stack
Diperbaiki (Fixed)
- Permintaan HTTP TSA kini menjaga dari badan permintaan yang kosong sebelum meneruskan
@ReqDer[0]keWinHttpSendRequest; Dereferensi larik dinamis dengan panjang nol akan mengakses pointer yang tidak terikat;BuildTimeStampReqselalu mengembalikan SEQUENCE yang tidak kosong, tetapi situs panggilan kini mempertahankan kontrak tersebut
Catatan (Notes)
- Komentar header
FPdfTsaWintentang pemeriksaan pencabutan HTTPS telah diperbaiki: WinHttp memvalidasi rantai sertifikat server secara default tetapi tidak melakukan pemeriksaan pencabutan CRL/OCSP kecuali diaktifkan secara eksplisit melaluiWinHttpSetOption; Kalimat sebelumnya mengeklaim pemeriksaan pencabutan “comes for free”, yang mana menyesatkan
Version 2.36.0
Diubah (Changed)
- Permintaan HTTP TSA kini mengirimkan header
Content-Lengtheksplisit selain headerContent-TypedanAccept; WinHttp mensintesisnya dari panjang total, tetapi beberapa proxy RFC 3161 memerlukan header eksplisit dan menolak permintaan dengan411 Length Requiredtanpa header tersebut - Ekspor XFDF kini membuang karakter kontrol C0 (selain TAB/LF/CR yang sudah lolos) alih-alih memancarkan urutan backslash-hex yang tidak valid; Lepasan
\-01Fsebelumnya bukan XML yang valid karena backslash tidak memiliki arti khusus dalam XML, sehingga pembaca yang patuh akan menolak dokumen tersebut sebagai cacat InjectAssociatedFileskini menulis/Subtypepada kamus aliran EmbeddedFile ketika pemanggil menyediakanTAssociateFile.MIMEType; Bidang ini dideklarasikan dan didokumentasikan tetapi injektor sebelumnya mengodekan keras/Type /EmbeddedFileand mengabaikannya (ISO 32000-2 §7.11.4 mengizinkan/Subtypepada aliran)
Diperbaiki (Fixed)
- Impor XFDF melewatkan byte konten pertama setelah BOM UTF-8 dan byte pertama ketika tidak ada BOM:
BytesToAnsi(Bytes, 4, ...)(BOM) danBytesToAnsi(Bytes, 1, ...)(tanpa BOM) menggunakan offset mulai yang meleset satu karenaBytesToAnsimengambil indeks larik berbasis 0; Panggilan tersebut kini menggunakan3dan0 ExtractSignatureValuememiliki dua bug lekukan dangling-ifdi manaR.Position:= CNberjalan tanpa syarat untuk cabang opsionalcertificates [0]dansignedAttrs [0]; Cabang-cabang tersebut kini dibungkus dalambegin/endsehingga posisinya ditingkatkan hanya ketika TLV opsional benar-benar dibaca (kelas bug yang sama diperbaiki padaAddSignatureTimestampToCmsdi v2.22.0)
Version 2.35.0
Diubah (Changed)
TFPDFAvail_IsDocAvail,TFPDFAvail_IsPageAvail, danTFPDFAvail_IsFormAvailkini mengambilhints: PFX_DOWNLOADHINTSalih-alihvar hints: FX_DOWNLOADHINTS, sehingga mode hanya-kuerinullptryang didokumentasikan (memeriksa ketersediaan saat ini tanpa meminta lebih banyak data) dapat dijangkau dari Delphi; Header PDFium secara eksplisit mengizinkanhintsbernilai null, di mana pengikatanvarsebelumnya membuat hal itu tidak mungkin dilakukanTFPDF_SetSystemFontInfokini mengambilpFontInfo: PFPDF_SYSFONTINFOalih-alihvar pFontInfo: FPDF_SYSFONTINFO, sehingga pemanggil dapat meneruskanniluntuk memberi tahu PDFium agar berhenti menggunakan antarmuka font sistem yang terdaftar sebelumnya (jalur penonaktifan yang didokumentasikan)TPdfThumbnailView.Paintkini menghitungVisibleRowsdengan rumus yang sama sepertiUpdateScrollBarRange(ClientHeight div RowHeight), sehingga jumlah baris yang digambar cocok dengan ukuran halaman scrollbar; Rumus khusus menggambar sebelumnya ((ClientHeight - FMarginY) div RowHeight + 1) dapat berbeda satu baris pada batas tinggi, membuang render pada baris di luar halaman atau melewatkan baris terakhir yang terlihat
Version 2.34.0
Ditambahkan (Added)
TPdf.SaveAsEncrypted/SaveAsEncryptedToStream— API tingkat tinggi yang menyimpan dokumen kemudian mengenkripsinya dengan PDF 2.0 AES-256-CBC (V=5/R=5/R=6); MenerimaTPdfEncryptOptionsdengan kata sandi pengguna/pemilik, izin, dan revisi, serta mendelegasikan keEncryptDocumentBytes- Enkripsi string literal StrF:
EncryptDocumentByteskini mengenkripsi string literal(...)dalam objek non-aliran (kamus Info, dll.) menjadi string hex AES-256-CBC, mencocokkan format enkripsi aliran (IV 16-byte + teks sandi PKCS7); String hex<...>dibiarkan tidak tersentuh
Version 2.33.0
Ditambahkan (Added)
- Injektor enkripsi AES-256-CBC dokumen lengkap dalam
FPdfEncrypt.pas;EncryptDocumentBytesmengambil PDF teks biasa dan kata sandi, mengenkripsi setiap objek aliran tidak langsung (IV 16-byte + AES-256-CBC PKCS7 di bawah kunci berkas), menambal/Length, menambahkan objek kamus/Encrypt, dan membangun kembali tabel referensi silang klasik lengkap + trailer dengan/Encryptdan/ID; Menyelesaikan tumpukan enkripsi PDF 2.0 (blok AES + GCM + SHA-512/384 + derivasi kunci R6 + kamus + pemindaian dokumen) - Pembantu
EncryptStreamPayload— format aliran PDF 2.0 AES-256 (IV diawali ke teks sandi AES-CBC-PKCS7), dapat digunakan kembali oleh pemanggil yang mengelola tata letak objek mereka sendiri
Version 2.32.0
Ditambahkan (Added)
- Hash SHA-512 / SHA-384 (FIPS 180-4) dalam unit
FPdfSha512.pasyang baru; Pure-Pascal, diporting dari HotPDF; Diperlukan oleh iterasi hash kata sandi PDF 2.0 R6, yang bercabang pada nilai mod-3 128-bit untuk memilih SHA-256/384/512 setiap putaran; Diverifikasi known-answer FIPS-180-4 B.1 - Derivasi kunci enkripsi PDF 2.0 dan pembuat kamus Encrypt dalam unit
FPdfEncrypt.pasyang baru; Mengimplementasikan algoritma 2.B ISO 32000-2 §7.6.4.3 (R6 hash dance: AES-128-CBC + pemilihan SHA-256/384/512 berulang), menurunkan kunci enkripsi berkas 32-byte ditambah entri/O,/U,/OE,/UE,/Perms, serta membangun kamus Encrypt V=5/R=5/R=6 dengan/CFM /AESV3; Diporting dari PDFlibPas, disesuaikan dengan gaya TBytes
Version 2.31.0
Ditambahkan (Added)
- Primitif cipher blok AES (FIPS 197) dalam unit
FPdfAes.pasyang baru; Cipher blok AES-128 dan AES-256 Pure-Pascal ditambah pembantu mode CBC dan backend CSPRNG, diporting dari HotPDF; Pengujian known-answer FIPS-197 Lampiran C.2 / C.3 memverifikasi kebenaran; Ini adalah fondasi kriptografi untuk tumpukan enkripsi PDF 2.0 - Enkripsi terautentikasi AES-GCM (NIST SP 800-38D) dalam unit
FPdfAesGcm.pasyang baru; Mengimplementasikan GHASH (perkalian GF(2^128)), GCTR dan konstruksi GCM AEAD di atas primitif blok AES; Kasus uji NIST GCM 1 dan 3 (AES-128) cocok dengan teks sandi dan tag otoritatif secara tepat, kasus uji 13 (AES-256) melakukan pulang-pergi; GCM adalah mode ISO/TS 32003 untuk PDF 2.0 - Validasi integritas ParentTree dan ClassMap PDF/A Tingkat A (ISO 19005-1 §6.8.3);
pvaiParentTreeMissingmenandai StructTreeRoot tanpa pohon nomor /ParentTree, danpvaiClassMapUnresolvedmenandai referensi kelas /C tanpa /ClassMap
Version 2.30.0
Ditambahkan (Added)
- Injeksi Associate Files (
InjectAssociateFiles/TPdf.SaveAsWithAssociateFiles, ISO 32000-2 §7.11.4); UnitFPdfAssocFilesyang baru melampirkan larik/AFdari referensi spesifikasi berkas ke katalog atau kamus halaman apa pun, mencakup kedelapan nilai/AFRelationshipTabel 45 ISO 32000-2; Menggunakan kembali pola pembaruan inkremental yang dibuktikan olehInjectPadesDssMarkers - Dukungan PDF/X-6 (ISO 15930-9:2020);
TPdfXConformancemenambahkanpxc6, di mana injektor dan validator meneruskannya melalui identifikasipdfxid:GTS_PDFXVersion; PDF/X-6 adalah penerus berbasis PDF 2.0 untuk PDF/X-4 untuk pertukaran lengkap - PDF/A melarang tindakan
/Thread(celah daftar putih ISO 19005-1 §6.6.1); Daftar tindakan terlarang sekarang mencakup Thread bersama dengan Launch, ResetForm, ImportData, SetOCGState, SetState, GoTo3DView, Rendition, dan Hide
Diperbaiki (Fixed)
- Jalur validasi PDF/A-4e kini mematuhi pemeriksaan tagged-structure, MarkInfo, dan pemisah kata yang sama seperti Tingkat A; Penurunan sisi penyimpanan v2.29.0 mencakup
PdfAIsLevelE, tetapi tiga gerbangValidatePdfACompliancehanya memeriksaPdfAIsLevelA, sehingga dokumen PDF/A-4e yang kekurangan tagged-structure lolos secara diam-diam - Penyimpangan pengujian
/BaseStateOCG: kelulusan PostProcess v2.28.0 secara tepat memperluas penerimaan ke/ONatau/OFF(Tabel 8.70 ISO 32000-1), tetapi pengujian Delphi dan C++ masih mengharapkan/OFFditolak; Pengujian sekarang menggunakan nilai yang benar-benar tidak valid (/Undefined) dan pengujian positif baru mengunci penerimaan/OFF - Over-matching
/Subtype /GEOGeospasial:ContainsDictionarySubtype('GEO')mencocokkan kamus apa pun yang membawa token tersebut, termasuk yang tidak terkait seperti/ViewerPreferences << /Subtype /GEO >>yang tersesat;ContainsMeasureDictionarySubtypeyang baru sebagai tambahan memerlukan/Type /Measureatau kunci saudara eksklusif Measure, sehingga kamus non-Measure tidak lagi memicu persyaratan ADBE ExtensionLevel 3
Version 2.29.0
Ditambahkan (Added)
- Dukungan PDF/A-4 (ISO 19005-4:2020) di seluruh validator, injektor XMP, dan lapisan model objek PDFium;
TPdfAConformancemenambahkanpac4base,pac4f, danpac4e; tingkat dasar adalah PDF 2.0 (ISO 32000-2) dan menggantikan tingkat A/B/U lama dengan dasar + F (formulir) + E (aksesibilitas);ValidatePdfAmembaca paket XMPpdfaid:part=4(dasar mengabaikan elemen kesesuaian),SaveAsPdfAmemancarkannya, danSignPadesWithPdfAmenerimapac4basesebagai wadah arsip jangka panjang - Pengikatan
FPDFBookmark_GetColor— ekspor publik PDFium terakhir yang belum terikat (469/469);TBookmarkmendapatkan bidangHasColordanColoryang diisi dari larik/Cbookmark (ISO 32000-1 §12.3.3); Pengikatan menggunakan pemuatan toleran sehingga DLL lama sebelum ekspor tersebut tetap berfungsi - Pemeriksaan versi header PDF/E-1 (ISO 24517-1 §5)
pveiBadPdfVersion— PDF/E-1 didasarkan pada PDF 1.6 dan header non-1.6 sekarang ditandai - PDF/R-1 (ISO 23504-1)
pvriEncryptVersionMismatch— enkripsi hanya diizinkan pada header%PDF-2.0; badan 1.x yang membawa/Encryptsekarang ditandai (sebelumnya merupakan pernyataan tanpa operasi) - PDF/R-1
pvriBadMediaBox—MediaBoxsetiap halaman harus berupa[0 0 w h];PdfRHasNonZeroMediaBoxOriginadalah pemindai ASCII independen-lokal yang melewati MediaBoxes referensi tidak langsung - PDF/A Tingkat A
pvaiRoleMapUnresolved(ISO 19005-1 §6.8.3.4) — RoleMap yang ada-tetapi-tidak-lengkap yang membiarkan tipe struktur/Skhusus tidak dipetakan sekarang ditandai, menutup celah yang ditinggalkan oleh pemeriksaan kehadiran-sajapvaiRoleMapMissingyang sudah ada
Diperbaiki (Fixed)
PdfVersionToName(20)mengembalikan"1.0"alih-alih"2.0", merusak entri/Versionkatalog dan pesan validator untuk setiap penyimpanan PDF 2.0; Pemformat sekarang memisahkan major.minor secara eksplisit untuk kode versi>= 20- Pembuat kode negative-INTEGER
FPdfAsn1.pasgagal dikompilasi di bawah Delphi 12 (E2015padaInteger(-(V<0))), memblokir seluruh proyek pengujian; Diperbaiki dengan menggunakanInt64(-Ord(V<0))untuk masker ekstensi tanda - Daftar anotasi terlarang PDF/A kini mencakup
/RichMediadi semua bagian (sebelumnya terlewatkan; ISO 32000-1 §12.5.6.35 melarangnya dalam PDF/A)
Version 2.28.0
Ditambahkan (Added)
TPdfVersionkini menyertakanpv20untuk PDF 2.0 (ISO 32000-2);DecodePdfVersion(20)mengembalikanpv20alih-alihpvUnknown, danEncodePdfVersion(pv20)memancarkan 20 sehingga versi dokumen PDF 2.0 tidak lagi hilang saat dibaca kembali dan dapat ditulis secara eksplisit
Diubah (Changed)
DecodeDatekini mengurai string tanggal PDF dengan bidang akhiran opsional per Referensi PDF 3.8.3, alih-alih memerlukan bentukD:YYYYMMDDHHmmSSOHH'mm'23-karakter lengkap; Tanggal terpangkas yang patuh sepertiD:20260712,D:20260712153000, danD:20260712153000Zsekarang diterima; Sebelumnya tanggal tersebut ditolak oleh gerbang kerasLength=23; Selisih jam zona waktu sekarang divalidasi terhadap rentang dunia nyata UTC-12..UTC+14 alih-alih> 23FPdfMeasure.MeasureTextkini menyandikan nama font sebagai FPCAnsiString/ DelphiUTF8Encode, mencocokkan situs panggilan FPDF_BYTESTRING perpustakaan lainnya, alih-alih cetakanAnsiStringbiasa yang merusak nama keluarga non-ASCII melalui halaman kode saat ini
Diperbaiki (Fixed)
- Jalur nilai negatif
TDerWriter.Integermacet atau menghasilkan DER cacat: perulanganwhile V <> -1 do V := V shr 8membiarkanInnerkosong untukValue = -1(kesalahan rentang padaInner[Length(Inner)-1]berikutnya) dan memproduksi byte berlebih untuk nilai negatif lainnya; Pembuat kode sekarang mengekstrak byte komplemen dua dengan pergeseran perpanjangan tanda dan berhenti dengan benar ketika sisanya adalah perpanjangan tanda murni; Bidang CMS/PAdES INTEGER bernilai positif, jadi ini hanya memengaruhi pemanggil yang meneruskan nilai negatif, tetapi jalurnya sekarang sudah benar TPdf.GetCharacterOrigindanTPdfView.GetCharacterOriginmengabaikan nilai pengembalianFPDFText_GetCharOrigindan mengembalikan titik yang tidak terinisialisasi jika gagal; Hasilnya sekarang diinisialisasi nol dan pembacaan yang gagal mengembalikan origin (mencocokkan kontrakGetCharacterRectangle)
Version 2.27.0
Diubah (Changed)
- Demo
PDFViewerdanMultiPageViewermenangani pencarian,Enter/F3, danEscuntuk pembatalan - Pencetakan mengikuti rotasi viewer
- Demo
ViewerInteractionLabmendukung shortcut
Diperbaiki (Fixed)
- Pembatalan cetak menghentikan tugas printer
Version 2.26.0
Diubah (Changed)
- Metode bitmap menggunakan render lock di sekitar panggilan PDFium
TPdf.RenderPageThumbnailmenghormati/Rotate
Diperbaiki (Fixed)
GetCharacterRectanglemengembalikanRect(0,0,0,0)saat gagal
Version 2.25.0
Diubah (Changed)
- Operasi edit membatalkan cache teks dan tautan
RenderPage(HDC, ...)memakai lock dan masking FPU/SSE
Diperbaiki (Fixed)
- Code point di atas U+FFFF mengembalikan U+FFFD
TPdf.DestroymembersihkanPassword
Version 2.24.0
Ditambahkan (Added)
- Indeks halaman dan lampiran divalidasi dan dapat menimbulkan
EPdfError
Diperbaiki (Fixed)
- Leak page-object diperbaiki dan
UpdatePagedipanggil setelah penyisipan
Version 2.23.0
Diperbaiki (Fixed)
- Validasi
/BaseStatedan/Intentmenerima nilai yang diizinkan - Deteksi Geospatial Measure tidak lagi memerlukan
/Type /Measure
Version 2.22.0
Diubah (Changed)
- Fit zoom memakai
ClientWidth/ClientHeight AddSignatureTimestampToCmsmenimbulkanExceptioneksplisit untuk field CMS yang tidak terbaca
Diperbaiki (Fixed)
- Handle CNG dibebaskan dengan
NCryptFreeObject EcDsaP1363ToDermenolakr/snol
Diperbaiki (Fixed)
- Penyimpanan PDF 1.5 hingga PDF 1.7 yang eksplisit sekarang menolak struktur
/OCPropertieskatalog yang salah format, termasuk entri/OCGsatau/Dyang diperlukan yang hilang, nilai konfigurasi default yang tidak valid, dan entri status non-array
Version 2.21.12
Diperbaiki (Fixed)
- Penyimpanan PDF 1.5 hingga PDF 1.7 kini menolak struktur katalog
/OCPropertiesyang rusak
Version 2.21.11
Diperbaiki (Fixed)
- Penyimpanan versi PDF yang eksplisit sekarang menolak entri halaman
/Annotslangsung atau tidak langsung yang kamus anotasinya menghilangkan entri/Subtypeatau/Rectyang diperlukan
Version 2.21.10
Diperbaiki (Fixed)
- Penyimpanan PDF 1.7 yang eksplisit sekarang mengharuskan kamus geospasial
/Type /Measure /Subtype /GEOdan anotasi Projection mendeklarasikan/Extensions /ADBEdengan/BaseVersion /1.7dan/ExtensionLevel 3atau lebih baru
Version 2.21.9
Diperbaiki (Fixed)
- Penyimpanan PDF 1.7 yang eksplisit sekarang mengharuskan anotasi RichMedia dan tindakan
RichMediaExecutemendeklarasikan/Extensions /ADBEdengan/BaseVersion /1.7dan/ExtensionLevel 3atau lebih baru
Version 2.21.8
Diperbaiki (Fixed)
- Penyimpanan PDF 1.7 yang eksplisit sekarang mengharuskan aliran PRC 3D mendeklarasikan
/Extensions /ADBEdengan/BaseVersion /1.7dan/ExtensionLevel 1atau lebih baru, alih-alih memperlakukan PRC sebagai fitur inti PDF 1.7
Version 2.21.7
Diperbaiki (Fixed)
- Penyimpanan PDF 1.4 dan lebih lama yang eksplisit sekarang menolak entri XObject gambar
/SMaskInData, termasuk nilai eksplisit0, karena saluran topeng lunak JPEG 2000 yang tertanam memerlukan PDF 1.5 atau lebih baru
Version 2.21.6
Diperbaiki (Fixed)
- Penyimpanan PDF 1.4 dan lebih lama yang eksplisit sekarang menolak XObject gambar 16-bit yang memerlukan PDF 1.5 atau lebih baru, sementara target PDF 1.5 hingga PDF 1.7 mempertahankan data gambar
/BitsPerComponent 16mereka
Version 2.21.5
Diperbaiki (Fixed)
- Penyimpanan PDF 1.4 dan lebih lama yang eksplisit sekarang menolak nilai
/PageLayout /TwoPageLeftdan/TwoPageRightdari katalog dokumen yang memerlukan PDF 1.5 atau lebih baru, sementara target PDF 1.5 hingga PDF 1.7 mempertahankan tata letak dua halaman yang diminta
Version 2.21.4
Diperbaiki (Fixed)
- Penyimpanan PDF 1.3 eksplisit sekarang menolak entri
/Langkatalog dokumen yang memerlukan PDF 1.4 atau lebih baru, sementara target PDF 1.4 hingga PDF 1.7 mempertahankan pengidentifikasi bahasa
Version 2.21.3
Diperbaiki (Fixed)
- Penyimpanan PDF 1.3 eksplisit sekarang menolak pohon nama
/EmbeddedFilesdokumen yang memerlukan PDF 1.4 atau lebih baru, tanpa menolak aliran file yang disematkan yang direferensikan melalui spesifikasi file yang lebih lama
Version 2.21.2
Diperbaiki (Fixed)
- Versi terbaru: 2.21.2; Tanggal rilis:
Version 2.21.1
Diperbaiki (Fixed)
- Validasi referensi hibrid sekarang menerapkan entri
/XRefStmtambahan sebelum placeholder xref klasik dari revisi yang sama, sehingga anotasi terkompresi dan objek lain yang dibatasi versi tidak lagi terlewatkan
Version 2.21.0
Diubah (Changed)
- Semua contoh viewer Delphi, C++Builder, dan Lazarus kini dapat membuka PDF yang diteruskan sebagai argumen baris perintah pertama, dan contoh
MultiPageViewerC++Builder dan Lazarus menyediakan pintasan pilih-semua dan salin yang eksplisit
Diperbaiki (Fixed)
- Versi terbaru: 2.21.3; Tanggal rilis:
Version 2.20.0
Diubah (Changed)
- Semua contoh viewer Delphi, C++Builder, dan Lazarus kini menyediakan pintasan yang konsisten untuk membuka, mencari, menyimpan, mencetak, memperbesar/memperkecil, dan navigasi halaman, sementara setiap varian
ViewerInteractionLabjuga mendukung lompatan halaman, zoom manual 10–600% yang divalidasi, log interaksi persisten, dan pemeriksaan bolak-balik koordinat klik
Version 2.19.1
Diperbaiki (Fixed)
- Versi terbaru: 2.21.4; Tanggal rilis:
Version 2.19.0
Diubah (Changed)
- Versi terbaru: 2.21.12; Tanggal rilis:
Diperbaiki (Fixed)
CJKTextLabpada C++Builder kini mengukur teks melalui fungsi pengeditan PDFium yang diekspor, danMergePDFmenghindari overload pesan VCL yang ambigu, memulihkan build RAD Studio 37 yang bersih
Version 2.18.3
Diperbaiki (Fixed)
- Document Time-stamp PAdES B-LTA kini didaftarkan sebagai kolom tanda tangan yang dapat ditemukan — sebuah Widget tak terlihat yang dapat dijangkau melalui
/Annotshalaman pertama dan/FieldsAcroForm (ETSI EN 319 142-1 §5.4.3) — bukan lagi objek yatim yang tidak dapat dijangkau yang tidak dapat ditemukan oleh validator penghitungan kolom tanda tangan; anotasi dan kolom yang ada tetap dipertahankan
Version 2.18.2
Diperbaiki (Fixed)
- Penandatanganan PAdES dan penulisan referensi-silang klasik kini menampilkan kesalahan yang jelas ketika offset byte melebihi lebar bidang tetap 10 digit (~9,3 GB), daripada secara diam-diam membiarkan placeholder
/ByteRangetidak ditulis (menghasilkan tanda tangan tidak valid) atau melampaui baris xref 20-byte (ISO 32000-1 §7.5.4); keluaran xref-stream menggunakan bidang biner 8-byte dan tidak terpengaruh
Version 2.18.1
Diperbaiki (Fixed)
- Penandatanganan PAdES kini menyelesaikan referensi
/Annots,/AcroForm, dan/Fieldshalaman pertama tidak langsung melalui header objek lengkap (ISO 32000-1 §7.5.3) dan berdasarkan nomor generasi referensi yang sebenarnya; pencarian substring mentah sebelumnya mencocokkan nomor objek di dalam yang lebih panjang (menyelesaikan5 0 Rke15 0 obj) dan generasi yang dikodekan keras melewatkan objekgen>0, merusak larik kolom tanda tangan atau menolak dokumen yang valid - Ketika katalog, halaman pertama,
/Annots,/AcroForm, atau/Fieldsberada di dalam object stream, penandatanganan kini mencoba ulang pada salinan yang diperluas sebelum gagal alih-alih langsung menolak dokumen
Version 2.18.0
Ditambahkan (Added)
ReadPdfVersionInfomelaporkan versi header, versi inti efektif, override katalog, dan tingkat ekstensi pengembang Adobe dari sebuah stream PDF
Diubah (Changed)
- Penyimpanan eksplisit PDF 1.3-1.7 kini memvalidasi struktur katalog, resource halaman, XFA, redaksi, dan ekstensi pengembang dalam konteks objek pemiliknya; keluaran versi eksplisit terenkripsi dan normalisasi inkremental PDF 1.3 ditolak untuk menjaga integritas dokumen
- Penyimpanan ke jalur berkas kini menulis ke berkas sementara seinduk dan menggantikan tujuan hanya setelah semua pemeriksaan kompresi, normalisasi, dan versi berhasil
Diperbaiki (Fixed)
- Keluaran PDF 1.3 kini memuat resource
/ProcSetlengkap yang diperlukan dan menghapus kunci transparansi PDF 1.4 ketika kunci tersebut hanya mengulangi nilai status grafis awal PDF 1.3 - Berkas hybrid-reference, xref-stream, dan object-stream tidak lagi ditulis ulang oleh kompressor xref klasik, mencegah entri objek terkompresi terhapus
- Nama yang menyerupai kunci fitur transparansi atau katalog di dalam string, komentar, atau peta resource yang tidak terkait tidak lagi menyebabkan kegagalan versi target palsu
Version 2.17.0
Ditambahkan (Added)
- Tanda tangan PAdES kini didaftarkan sebagai anotasi Widget tak terlihat dalam larik
/Annotshalaman pertama dan larik/FieldsAcroForm, mempertahankan anotasi dan kolom formulir yang ada
Diubah (Changed)
- Pembaruan inkremental PDF/A, PDF/X, PDF/E, PDF/R, PDF/UA, PDF/VT, dan PAdES kini mempertahankan representasi referensi-silang sumber: dokumen xref-stream menerima pembaruan xref-stream sebagaimana disyaratkan oleh ISO 32000-1 §7.5.8.1, sementara dokumen klasik terus menerima tabel xref
- Offset referensi-silang,
startxref,/Prev, nilai ByteRange PAdES, dan pemrosesan rentang SHA-256 kini menggunakan posisi 64-bit dengan hashing berpotongan, memungkinkan berkas lebih besar dari 2 GB pada build 64-bit - Paket XMP yang dapat ditulis yang dihasilkan kini memesan 2048 byte padding sebelum instruksi paket penutup
Version 2.16.10
Diperbaiki (Fixed)
- Perluasan object-stream tidak lagi menghidupkan kembali salinan usang dari objek yang dipindahkan oleh pembaruan inkremental dari object stream ke definisi biasa (ISO 32000-1 §7.5.7); pemeriksaan keselarasan dan injeksi marker sebelumnya menyelesaikan katalog atau kamus metadata yang ketinggalan zaman pada berkas semacam itu
Version 2.16.9
Diperbaiki (Fixed)
- Pada Free Pascal, string teks yang masukannya bukan UTF-8 yang valid dilebarkan byte demi byte sebagai Latin-1 dan ditulis sebagai string hex UTF-16BE; byte tinggi mentah sebelumnya bocor ke dalam string literal, yang bukan encoding text-string PDF 1.7 yang sah
- Dekoding stream kini mengenali data deflate mentah tanpa pembungkus zlib RFC 1950 (cacat umum dari penulis yang rusak) dan mendekompresinya dalam mode mentah, sehingga pemindaian keselarasan tidak lagi secara diam-diam buta pada stream semacam itu
Version 2.16.8
Diperbaiki (Fixed)
- Pembaruan inkremental yang ditulis oleh jalur pasca-pemrosesan penyimpanan kini menyegarkan elemen
/IDtrailer kedua (yang berubah) sebagaimana disyaratkan oleh ISO 32000-1 §14.4; sebelumnya kedua elemen disalin verbatim, sehingga alat caching dan sinkronisasi melihat pengidentifikasi yang tidak berubah setelah setiap pembaruan
Version 2.16.7
Diperbaiki (Fixed)
- Pemutihan badan stream yang digunakan oleh pemindaian keselarasan kini mengharuskan kata kunci
streamdiikuti oleh akhir baris (ISO 32000-1 §7.3.8.1); kata tersebut di dalam string literal seperti(downstream)sebelumnya memutihkan semua struktur berikutnya hinggaendstreamberikutnya, menyembunyikan pelanggaran nyata dari pemeriksaan tingkat byte - Pemindaian fitur terlarang PDF/X dan PDF/E juga memutihkan string literal dan komentar (§7.2.2), sehingga nilai seperti
/Title (see /JavaScript docs)atau token yang dikomentari tidak lagi menghasilkan temuanJavaScript,AcroForm, atauLZWDecodepalsu
Version 2.16.6
Diperbaiki (Fixed)
- Entri DPM PDF/VT kini divalidasi saat penulisan sebagaimana didokumentasikan: nama kunci yang melanggar aturan NMTOKEN ISO 16612-2 §6.6 atau aturan prefiks pendaftar Annex E, serta nama duplikat, ditolak alih-alih ditulis ke kamus DPart — nama yang mengandung spasi sebelumnya terpecah menjadi pasangan kunci/nilai palsu dan merusak kamus
Version 2.16.5
Diperbaiki (Fixed)
- Menghapus entri kamus yang nilainya berupa hex string (seperti
/Check <...>) kini menghapus seluruh entri; injektor sebelumnya meninggalkan nilai hex yatim di belakang, menghasilkan kamus yang rusak secara sintaksis - Menghapus entri yang referensi tidak langsungnya menggunakan baris baru antar token (ISO 32000-1 §7.3.10 mengizinkan spasi apa pun) tidak lagi meninggalkan nomor generasi dan kata kunci
Rdi belakang
Version 2.16.4
Diperbaiki (Fixed)
- Pemindaian nomor-objek-maksimum tidak lagi mengharuskan header objek dimulai pada awal baris (ISO 32000-1 §7.5.3 mengizinkan spasi atau pemisah apa pun sebelumnya), sehingga injektor tidak dapat lagi mengalokasikan nomor objek yang bertabrakan dengan header
N G objinline dan diam-diam merusak berkas; nomor objek dibatasi oleh batas atas Annex C - Stream yang
/Length-nya berupa referensi tidak langsung kini menyelesaikan objek integer yang direferensikan dan menggunakan nilainya ketika selaras denganendstreampenutup; sebelumnya stream semacam itu dibatasi oleh pencarian pola, yang memotong badan yang secara sah mengandung urutan byteendstream— umum untuk lampiran PDF yang disematkan
Version 2.16.3
Diperbaiki (Fixed)
- Kompresi stream melewatkan dokumen xref-stream (berkas PDF 1.5+ tanpa kata kunci
trailerklasik) tanpa perubahan; jalur rekonstruksi sebelumnya salah mem-parsingstartxrefsebagai lokasi tabel dan mensintesis trailer yang ditebak, yang dapat menghasilkan berkas yang tidak dapat dibuka - Kompressor melewati stream metadata XMP sehingga dokumen PDF/A mempertahankan stream metadata yang tidak difilter yang wajib (ISO 19005-1 §6.7.2), dan membiarkan stream berkas eksternal (
/Fdengan/FFilter) tidak tersentuh - Tabel referensi-silang yang direkonstruksi memindai salinan dokumen yang telah dilucuti streamnya, sehingga konten stream biner tidak dapat lagi memalsukan header objek atau mengembungkan tabel;
/Sizetrailer yang direkonstruksi kini mencerminkan tabel yang sebenarnya dan nomor objek dibatasi pada batas atas Annex C - Menemukan tabel referensi-silang asli menerima akhiran baris CR saja (ISO 32000-1 §7.5.1) dan tidak lagi dapat mencocokkan huruf
xrefdi dalamstartxref; pemindaian kata kunci stream mendapatkan penjaga ekorendstreamyang sama yang digunakan di tempat lain dan kini melompati badan stream yang dilewati
Version 2.16.2
Diperbaiki (Fixed)
- Pengurai integer di seluruh pembaca PDF tingkat byte kini menerima tanda
+eksplisit yang diizinkan oleh ISO 32000-1 §7.3.3 dan menolak rangkaian digit yang akan meluap, sehingga dokumen berbahaya atau rusak tidak dapat lagi membungkus panjang dan offset yang diurai menjadi nilai yang menyesatkan
Version 2.16.1
Diperbaiki (Fixed)
- Injektor PDF/UA menulis nilai
/Langkatalog sebagai string teks PDF yang tepat; sebelumnya nilai tersebut diproses melalui XML escaper, sehingga tag bahasa yang mengandung&atau tanda kurung menghasilkan entri yang rusak, dan masukan non-ASCII ditulis sebagai UTF-8 mentah - Entri Info
/ISO_PDFEVersionPDF/E menggunakan encoder text-string bersama, menjaga nilai non-ASCII tetap sah dalam PDF 1.7 - XML escaping untuk paket XMP membuang karakter kontrol yang tidak sah dalam XML 1.0, sehingga metadata yang disalin dari dokumen sumber yang rusak tidak lagi membuat seluruh stream metadata tidak terbentuk dengan baik
- Konversi tanggal PDF-ke-XMP memvalidasi bahwa bidang tanggal adalah numerik dan mengisi bidang menit yang hilang, mencegah tanggal ISO 8601 yang salah bentuk dalam XMP yang dihasilkan; pada platform non-Windows, stempel waktu fallback kini menyertakan waktu dalam sehari alih-alih hanya tanggal
Version 2.16.0
Ditambahkan (Added)
- Dekoding stream kini merekonstruksi prediktor
/DecodeParms(prediktor PNG 10-15 dan prediktor TIFF 2, ISO 32000-1 §7.4.4.4) setelah FlateDecode, mengikuti/Colors,/BitsPerComponent, dan/Columns; object stream yang dikompresi dengan prediktor — pilihan umum penulis PDF 1.5+ — sebelumnya memunculkan byte terdifferensikan, sehingga objek yang dibawanya secara diam-diam tidak terlihat oleh pemindaian keselarasan dan injeksi marker
Diperbaiki (Fixed)
- Deteksi FlateDecode kini mem-parsing nilai
/Filtersebagai nama atau larik alih-alih pencocokan substring, sehingga rantai filter bertingkat dan kemunculan kata tersebut di dalam nilai yang tidak terkait tidak lagi memicu inflate palsu; rantai yang tidak didukung kembali ke byte mentah seperti sebelumnya
Version 2.15.1
Diperbaiki (Fixed)
- Pemindai kamus kini melewati string literal, hex string, dan komentar saat menyeimbangkan
<</>>(ISO 32000-1 §7.2.2), sehingga kamus yang mengandung nilai seperti(A >> B)atau hex string yang berdekatan dengan pemisah penutup tidak lagi terpotong selama pengurai trailer, katalog, dan pemindaian keselarasan - Ekstraksi string literal kini mendekode set escape lengkap §7.3.4.2 Tabel 3 —
\n \r \t \b \f, oktal\ddd, kelanjutan baris, dan normalisasi EOL tanpa escape — alih-alih menyalin huruf escape verbatim, memulihkan perbandingan/Producer,/GTS_PDFXVersion, dan/ISO_PDFEVersionyang benar untuk penulis yang menggunakan escape oktal - String literal yang ditulis oleh injektor marker kini meng-escape CR, LF, dan karakter kontrol lainnya sehingga nilai bertahan dari normalisasi akhir baris sisi pembaca byte demi byte
Version 2.15.0
Diperbaiki (Fixed)
- Pembaruan inkremental yang ditulis oleh injektor marker PDF/A, PDF/X, PDF/E, PDF/R, PDF/UA, dan PDF/VT serta oleh jalur penandatanganan PAdES dan DSS kini mempertahankan pengidentifikasi berkas permanen dokumen sumber: elemen
/IDtrailer pertama dibawa verbatim sebagaimana disyaratkan oleh ISO 32000-1 §14.4 dan hanya elemen kedua (yang berubah) yang disegarkan; sebelumnya kedua elemen diregenerasi, sehingga referensi eksternal dan alur kerja validasi jangka panjang melihat identitas dokumen yang berbeda setelah setiap penyimpanan - Tanda tangan PAdES, injeksi DSS, dan Document Time-stamp B-LTA kini membawa referensi
/Infotrailer sumber ke depan (ISO 32000-1 §7.5.6), sehingga properti dokumen tidak lagi menghilang dari panel pembaca setelah penandatanganan; trailer Document Time-stamp juga mendapatkan larik/ID - Fallback
/Infotrailer untuk dokumen xref-stream kini menemukan kamus stream XRef dengan benar dan mempertahankan nomor generasi referensi; sebelumnya tidak pernah cocok pada berkas PDF 1.5+ yang sesuai, secara diam-diam menghapus/Info
Version 2.14.4
Diperbaiki (Fixed)
- Tanggal
/Mkamus tanda tangan yang ditulis olehTPdf.SignPadesdanSignPadesByteskini memuat prefiksD:wajib dan penanda offset UTCZyang diperlukan oleh ISO 32000-1 §7.9.4; validator ketat sebelumnya menolak waktu penandatanganan sebagai string tanggal yang salah bentuk
Version 2.14.3
Diperbaiki (Fixed)
- Pencarian kunci kamus dalam pembaca PDF bersama kini mencocokkan token nama yang utuh (ISO 32000-1 §7.3.5); sebelumnya stream yang kamus-nya mencantumkan
/Length1sebelum/Length(umum untuk stream FontFile) dipotong ke jumlah byte yang salah, secara diam-diam membutakan pemindaian keselarasan PDF/A, PDF/UA, dan lainnya yang membaca stream font, CMap, atau metadata - Pencarian trailer
/Encrypt,/Root,/Size, dan/Infotidak lagi mencocokkan kunci yang lebih panjang yang berbagi awalan yang sama (seperti/EncryptMetadata) - Perluasan object-stream tidak lagi mempercayai nilai
/Nyang rusak atau berbahaya: nilai non-integer kini menghasilkan 0 alih-alih angka yang tidak diinisialisasi, dan batas atas yang berasal dari/Firstmencegah alokasi berlebih saat memindai dokumen yang salah bentuk
Version 2.14.2
Diperbaiki (Fixed)
- Injektor marker PDF/X, PDF/VT, PDF/UA, PDF/E, dan PDF/R kini menyalin dokumen sumber yang terenkripsi tanpa perubahan alih-alih menambahkan bagian pembaruan plaintext; perilaku sebelumnya menghasilkan berkas yang trailer terbarunya kehilangan entri
/Encrypt(ISO 32000-1 §7.5.6), sehingga pembaca yang sesuai salah membaca badan terenkripsi sebagai plaintext TPdf.SignPades,SignPadesBytes, danInjectPadesDssMarkerskini memunculkanEPadesCryptoketika dokumen sumber terenkripsi, alih-alih secara diam-diam memancarkan berkas yang rusak atau tidak dapat diverifikasi; hapus enkripsi sebelum menandatangani atau menyematkan materi DSS
Version 2.14.1
Diperbaiki (Fixed)
TPdf.SignPadesdanSignPadesByteskini mengisi balik semua empat bidang/ByteRangedari kamus tanda tangan; sebelumnya tiga bidang terakhir tetap pada placeholder nol-nya, sehingga tanda tangan yang dihasilkan mendeklarasikan rentang byte kosong dan gagal verifikasi di validator yang sesuai- Kamus Document Time-stamp PAdES B-LTA menerima koreksi isian balik
/ByteRangeyang sama ValidatePadesCompliancekini menerima tata letak tanda tangan standar di mana celah rentang byte menyimpan nilai hex/Contents, dan memeriksa bahwa segmen rentang kedua berakhir tepat di akhir berkas; sebelumnya hanya rentang tanpa celah yang lulus pemeriksaan cakupan
Version 2.14.0
Ditambahkan (Added)
TPdf.ExportXFDFmenyerialisasi setiap nilai kolom formulir dan anotasi di semua halaman ke dokumen XFDF (ISO 19444-1), memancarkan<fields>untuk nilai formulir hierarkis dan<annots>untuk semua subtipe anotasi yang didukung (text, highlight, underline, strikeout, squiggly, line, circle, square, caret, polygon, polyline, stamp, ink, freetext, fileattachment, sound, link, redact)TPdf.ImportXFDFmembaca dokumen XFDF kembali ke dalam PDF yang dimuat, membuat ulang anotasi pada halaman yang cocok dan menerapkan nilai kolom ke anotasi widget-nya- Record
TPdfAnnotationmendapatkanName(NM),Subject,ModificationDate(M),CreationDate,Icon,Opacity(CA), titik akhir garis, titik sudut polygon/polyline, dan bidang gestur ink-list sehingga perjalanan pulang-pergi XFDF mempertahankan metadata anotasi lengkap - Sampel
XfdfLabbaru dalam set demo Delphi, C++Builder, dan Lazarus mendemonstrasikan perjalanan pulang-pergi ekspor/impor
Version 2.13.6
Diperbaiki (Fixed)
ValidatePdfAkini memperlakukan stream/Metadatakatalog tanpa/Type /Metadataatau/Subtype /XMLsebagai metadata XMP yang hilang melaluipvaiMissingXmpMetadata- Laporan preflight PDF/A kini mengklasifikasikan
pvaiMissingXmpMetadatasebagai Metadata dan merekomendasikan stream/Metadatakatalog dengan/Type /Metadata,/Subtype /XML, XMP yang tidak difilter, dan markerpdfaid
Version 2.13.5
Diperbaiki (Fixed)
ValidatePdfAkini melaporkan anotasi Widget tanpa kamus tampilan dan anotasi PDF/A-2 / PDF/A-3 yang memerlukan tetapi tidak memiliki/APmelaluipvaiAnnotationApDictViolation- Laporan preflight PDF/A kini mengkategorikan
pvaiAnnotationApDictViolationsebagai konten yang tidak dapat diperbaiki oleh injeksi marker
Version 2.13.4
Diperbaiki (Fixed)
ValidatePdfAkini melaporkan gambar inline PDF/A-2 dan PDF/A-3 yang nilai/Iatau/Interpolate-nya adalahtruemelaluipvaiImageDictionaryViolation, sesuai dengan cakupan kamus Image XObject yang ada- Laporan preflight PDF/A kini mengkategorikan
pvaiImageDictionaryViolationsebagai konten yang tidak dapat diperbaiki oleh injeksi marker
Version 2.13.3
Diperbaiki (Fixed)
ValidatePdfAkini melaporkan gambar inline PDF/A-1 yang menggunakan filter/LZWDecodeatau/LZWyang disingkat di dalam stream konten melaluipvaiInlineImageLzwForbidden, sesuai dengan cakupan gambar inline PDF/A-2 dan PDF/A-3 yang ada- Pemindai filter gambar inline kini melompati nama resource terdepan seperti
/GS1, menghindari penghentian saat memindai stream konten PDF/A-1 yang lebih luas
Version 2.13.2
Ditambahkan (Added)
TPdf.SetFocusedFormFieldTextmenulis teks ke dalam buffer edit kolom formulir yang sedang difokus melaluiFORM_ReplaceSelection, simetris denganFocusedFormFieldText. Untuk kolom teks/kombo AcroForm, nilai dikonfirmasi ke/Vsaat fokus hilang dan tetap bertahan; untuk kolom teks XFA, penulisan hanya mendarat di buffer dalam memori (PDFium tidak mengekspos API publik untuk merekonsiliasi nilai XFA kembali ke paket datasets, sehingga tidak bertahan melewati penyimpanan)- Platform host JavaScript kini dilampirkan setiap kali mesin V8 tersedia, terlepas dari apakah dokumen adalah XFA — sehingga JavaScript AcroForm yang disematkan (skrip tingkat doc, kalkulasi kolom,
app.alert) juga dapat dieksekusi. Sebelumnyam_pJsPlatformhanya dihubungkan untuk dokumen XFA, membiarkan JS AcroForm dinonaktifkan secara diam-diam
Diubah (Changed)
- Lampiran platform JavaScript kini independen dari keputusan XFA dalam
InitializeFormFill— tabelm_pJsPlatformdibangun setiap kaliV8FeaturesAvailableadalah true, diterapkan setelah pengkabelan versi/callback XFA daripada bersarang di dalamnya
Version 2.13.1
Ditambahkan (Added)
- Event host baru memunculkan informasi yang sebelumnya ditelan oleh callback form-fill v2.13.0:
OnXfaUriAction,OnXfaPageCountChanged,OnXfaFocusChange,OnXfaEmail,OnXfaHttpRequest,OnXfaOpenFile,OnJavaScriptBeep,OnJavaScriptPrint,OnJavaScriptMail,OnJavaScriptSubmitForm. Setiap event secara default berperilaku tidak melakukan apapun ketika tidak ditetapkan, sehingga host yang ada tidak terpengaruh - Properti read-only
TPdf.XfaFormPacketsmengembalikan snapshot satu-kali dari semua paket XFA (TXfaPacketList), memenuhi tipeTXfaPacket/TXfaPacketListyang sebelumnya dideklarasikan tetapi tidak digunakan - Kode error PDFium khusus XFA
FPDF_ERR_XFALOAD/FPDF_ERR_XFALAYOUTkini terikat dan dimunculkan melaluiLastPdfError, menggantikan pesan "Unknown error" generik untuk kegagalan pemuatan/tata letak XFA
Diubah (Changed)
FFI_DoURIActionWithKeyboardModifierkini berkonsultasi denganOnXfaUriActionsebelum menjalankan URI dari kolom XFA melalui shell, memberikan host hak veto (keamanan: kolom XFA berbahaya sebelumnya dapat meluncurkan URL sembarang tanpa syarat). Handler yang tidak ditetapkan mempertahankan defaultShellExecuteWsebelumnyaDecodeFormFieldTypekini merutekan tipe kolom XFA melaluiIsXfaFormFielddaripada sebuah case 8-cabang eksplisit, menjaga enum selaras denganFPDF_FORMFIELD_XFA_*berdasarkan offset ordinal
Diperbaiki (Fixed)
ValidatePdfAkini melaporkan klaim PDF/A-1 yang menggunakan xref-stream PDF 1.5 atau object stream dengan isu barupvaiPdfA1Pdf15Structure, sambil terus mengizinkan object stream untuk PDF/A-2 dan PDF/A-3
Version 2.13.0
Ditambahkan (Added)
- Dukungan runtime XFA (XML Forms Architecture) penuh:
TPdf.InitializeFormFillkini menghubungkan semua 14 callbackFPDF_FORMFILLINFOversi-2 (FFI_DisplayCaret,FFI_GotoURL,FFI_PageEvent,FFI_PopupMenu,FFI_OpenFile,FFI_EmailTo,FFI_UploadTo,FFI_GetPlatform,FFI_GetLanguage,FFI_DownloadFromURL,FFI_PostRequestURL,FFI_PutRequestURL,FFI_OnFocusChange,FFI_DoURIActionWithKeyboardModifier) dan melampirkanIPDF_JsPlatformsehinggapdfium.dllyang mendukung XFA dapat merender dan men-skrip formulir XFA dinamis - Unit
Lib\FPdfXfa.pasbaru yang mendeklarasikan konstanta XFA (FXFA_PAGEVIEWEVENT_*,FXFA_MENU_*,FXFA_SAVEAS_*,FPDF_FORMFIELD_XFA_*) dan tipeTXfaPacket/TXfaSaveFormatyang sebelumnya hanya direferensikan dalam komentar - Pembaca paket XFA statis pada
TPdf:GetXfaPacketCount/GetXfaPacketName/GetXfaPacketContent/GetXfaPacketByNameditambahGetXfaTemplate/GetXfaDatasets/GetXfaConfigmengekstrak paket XFAtemplate,datasets, danconfigsebagai XML mentah tanpa memerlukan runtime XFA yang diaktifkan — berguna untuk audit kepatuhan dan migrasi data - Probe kapabilitas: global
XfaFeaturesAvailable, dan per-dokumenTPdf.XfaRuntimeAvailable(apakahFPDF_LoadXFAbenar-benar berhasil) danTPdf.XfaStaticReadable(apakah ekspor pembaca paket dapat diselesaikan) TPdfFormFieldTypediperluas denganfiXfa,fiXfaCheckBox,fiXfaComboBox,fiXfaImageField,fiXfaListBox,fiXfaPushButton,fiXfaSignature,fiXfaTextField, denganDecodeFormFieldTypememetakan nilaiFPDF_FORMFIELD_XFA_*baru- Event host JavaScript pada
TPdf:OnJavaScriptAlert,OnJavaScriptResponse,OnXfaGotoUrl, danOnXfaRuntimeMissingmemungkinkan host menyesuaikan dialog JS dan navigasi XFA, atau bereaksi ketika dokumen XFA tidak dapat menjalankan mesin - Sampel Delphi
XfaLabbaru yang mendemonstrasikan deteksi XFA, ekstraksi paket, pemeriksaan kapabilitas, dan jalur fallback runtime-missing
Diubah (Changed)
TPdf.LoadDocumentkini memindai terlebih dahulu masukan untuk marker XFA (/XFAdalam kamus AcroForm, atau/NeedsRenderingkatalog) dan, ketika ditemukan, secara otomatis memilihpdfium.v8.dlldengan menetapkanEnableV8Engine := Truesebelum pustaka singleton pertama kali dimuat; setelahpdfium.dllbiasa dimuat, proses tidak dapat beralih, sehinggaOnXfaRuntimeMissingmemberi sinyal pada kasus tersebutTPdf.GetPageCountkini mencerminkan jumlah halaman yang dilaporkan mesin XFA melaluiFFI_PageEventsetelah repaginasi dinamis, bukan hanya pohon halaman PDF statis- Ketika dokumen XFA dibuka tetapi runtime tidak tersedia,
InitializeFormFillkini menyematkanversion=1danxfa_disabled=1alih-alih meminta versi 2 dengan callback yang tidak ditetapkan, yang sebelumnya berisiko dereferensi pointer callback yang buruk
Version 2.12.2
Diperbaiki (Fixed)
ValidatePdfACompliancekini melaporkan namespace XMP kustom yang digunakan tanpapdfaExtension:schemassambil tetap menerima metadatapdfaidstandar tanpa deklarasi ekstensi- Validasi berkas yang disematkan PDF/A-3 kini mengharuskan entri
/Fdan/UFtingkat atas pada kamus filespec dan mengabaikan kunci stream/EFbersarang saat memeriksa nama tersebut
Version 2.12.1
Diperbaiki (Fixed)
ValidatePdfACompliancekini mendekode token nama PDF yang di-escape sebelum mencocokkan JavaScript, LZWDecode, Type1, dan nama terlarang terkait, sehingga nama yang diobfuskasi tetapi semantis identik dilaporkan dengan benar- Pemeriksaan gambar inline PDF/A kini menolak nilai
/Filterdan/Fyang menggunakan/LZWDecode,/LZWyang disingkat, atau/Crypt, termasuk bentuk larik dan nama yang di-escape - Validasi PDF/A kini melaporkan stream metadata dengan filter stream yang dilarang, profil ICC OutputIntent yang jumlah komponen
/N-nya hilang atau tidak konsisten, dan spec berkas yang disematkan PDF/A-3 dengan/AFRelationshipyang hilang atau tidak valid
Version 2.12.0
Ditambahkan (Added)
- Permintaan HTTP TSA kini menetapkan batas waktu 30 detik eksplisit untuk setiap fase (resolve/connect/send/receive) melalui
WinHttpSetTimeouts, sehingga otoritas timestamp yang lambat atau tidak dapat dijangkau tidak dapat menggantung thread penandatanganan tanpa batas waktu alih-alih mengandalkan default implisit WinHttp - Derivasi nonce per-permintaan untuk permintaan timestamp PAdES B-T / B-LTA ketika pemanggil menghilangkan
TPadesSignOptions.Nonce: fold SHA-256 dari penghitung monoton + jam dinding +GetTickCount64+ id proses menggantikan fallback tetap$100000000sebelumnya, sehingga dua permintaan yang dikeluarkan dalam milidetik yang sama tidak lagi menggunakan ulang nonce anti-replay yang sama PdfInflatekini membatasi keluaran terdekompresi pada 256 MiB untuk menghentikan stream terkompresi zlib dari menghabiskan memori pada masukan yang berbahaya atau rusak (sebuah “zlib bomb”); batas ini cukup besar untuk stream PDF nyata apapun
Diubah (Changed)
- Pencampuran overlay
TPdfView(highlight pencarian, seleksi teks, kata baca, seleksi spread) tidak lagi menggunakanGetPixel/SetPixelVper-piksel; persegi panjang kini dicampur melaluiTBitmapoff-screen 32-bpp danScanLinedalam satu pass, menghilangkan ribuan penyeberangan kernel GDI per paint dan membuat seleksi besar menjadi responsif FPdfAsn1.TDerReader.ReadIntegerkini menolak bidang INTEGER yang lebih panjang dari 8 byte (dan negatif 8-byte yang bit tandanya memerlukanshl >= 64), mengembalikan 0 alih-alih menghitung nilai yang salah melalui perilaku undefined-shift pada masukan ASN.1 CMS/PAdESParseTimeStampResptidak lagi menggemakan kembali nonce permintaan sebagaiTPadesTimestamp.Nonce; hingga walker TSTInfo yang memverifikasi nonce yang dikembalikan tersedia, bidang tetap 0 untuk memberi sinyal “tidak terverifikasi” daripada memberikan kepercayaan diri palsu kepada pemanggil bahwa respons timestamp adalah segar
Diperbaiki (Fixed)
PointsToPixelsmengembalikan masukannya tidak berubah untuk setiap DPI: pembaginya adalahPointsPerInch(konstanta 72) alih-alih literal 72, menyederhanakan rumus menjadiResult := Points. Pemanggil eksternal yang melakukan pengukuran titik→piksel-perangkat melalui helper ini kini mendapatkanPoints × PixelsPerInch / 72yang benarPdfMaxObjNummenghasilkan hitungan kurang pada dokumen yang menggunakan object stream (PDF 1.5+ ObjStm): objek yang terkompresi di dalam/ObjStmtidak membawa markerN 0 obj, sehingga pemindaian byte mentah melewatkannya, dan injektor yang mengalokasikanMaxObj+1untuk objek baru akan bertabrakan dengan anggota ObjStm yang tersembunyi dan diam-diam merusak berkas. Pemindaian kini memperluas object stream terlebih dahulu sehingga setiap nomor objek terlihatInjectPdfAMarkerstidak lagi memalsukan klaim kepatuhan PDF/A pada dokumen terenkripsi: PDF/A (ISO 19005-1 §7.1) melarang enkripsi, dan injektor sebelumnya menyalin sumber dengan marker meskipun validasi berikutnya akan menolaknya. KetikaHasEncryptdisetel, sumber kini diteruskan tanpa perubahan. JalurTPdf.SaveAsPdfAnormal sudah menghapus enkripsi (saRemoveSecurity) sebelum injeksi, sehingga ini hanya mempengaruhi pemanggil langsungPdfReadStreamByteskini menolak/Lengthyang lebih besar dari seluruh berkas sebelum mengalokasikan buffer hasil, menutup jalur alokasi awal pada panjang tidak langsung yang rusak atau berbahaya
Version 2.11.0
Ditambahkan (Added)
- Record PDFium
FPDF_FILEHANDLERkini mendeklarasikan enam callback-nya (Release,GetSize,ReadBlock,WriteBlock,Flush,Truncate) sebagai bidang nyata alih-alih komentar, sesuai dengan tata letak header C. Callback transfer berkas XFA FFI (FFI_OpenFile/FFI_EmailTo/FFI_UploadTo/FFI_DownloadFromURL) yang mengembalikan atau mengonsumsiPFPDF_FILEHANDLERmasih tidak diimplementasikan di lapisan form-fill Pascal, tetapi tipenya kini secara struktural benar untuk jalur submit/upload XFA di masa depan - Pemuatan dan pembongkaran pustaka PDFium (
LoadLibrary/UnloadLibrary) kini diserialisasi oleh critical section global proses, sehingga dua thread workerTPdfFuture<T>(atau worker yang bersaing dengan thread utama) tidak dapat keduanya mengamatiPDFiumLibrary=0dan mengikat ganda, atau membebaskan DLL sementara thread lain sedang dalam proses pengikatan - Bagian
initialization/finalizationkini memanggilUnloadLibrarysaat unit dibongkar, memastikanFPDF_DestroyLibrary berjalan (penggabungan thread worker, pembuangan isolat V8, penghancuran font/cache) alih-alih mengandalkan OS untuk mengklaim kembali DLL
Diubah (Changed)
TPdf.SetActivekini menelan setiap pengecualian selama pemuatan (sebelumnya hanyaEPdfError), sehingga kesalahan stream atau pelanggaran akses selama pengaturan formulir/halaman meninggalkanActive=Falsealih-alih komponen yang sebagian dimuat dengan status tidak tentu- Encoding karakter yang konsisten untuk argumen kunci metadata PDFium:
TPdf.GetMetaTextkini menggunakan pemisahanAnsiStringFPC /UTF8EncodeDelphi yang sama sepertiGetViewerPreferencedan jalur pemuatan, alih-alih castAnsiString(Tag)mentah - Mendeduplikasi helper
BytesToAnsi,AnsiToBytes,WriteBytes, danWriteStr:FPdfCompresskini mengimpornya dariFPdfPdfCommon(aliasWriteBytesToStream/WriteAnsiToStream-nya sudah dihentikan) dan overload tiga-argumenBytesToAnsiyang redundan diFPdfPdfadihapus.FPdfAsn1mempertahankan 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) danTPdf.CreateDocument: jikaInitializeFormFillatauReloadPagememunculkan pengecualian setelahFPDF_LoadDocument/FPDF_CreateNewDocumentberhasil, handleFPDF_DOCUMENTasli bocor karenaFActivemasih False pada saat itu. Setiap jalur kini membungkus pengaturan pasca-pemuatan dalamtry/exceptdan menutup dokumen saat gagal, membiarkan komponen tidak aktif dengan bersih - Diagnostik pemuatan DLL PDFium yang lebih ramah:
CheckLoadLibrarymendeteksiERROR_BAD_EXE_FORMAT(193) dan melaporkan ketidakcocokan arsitektur 32/64-bit yang menunjuk ke buildDLLs/Win32atauDLLs/Win64yang cocok, alih-alih hanya meneruskan error OS generik.CheckGetProcAddresskini menyatakan bahwapdfium.dllyang 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
issuerAndSerialNumberRFC 5652 §5.3 (issuer Name + serialNumber, keduanya diekstrak verbatim dari DER sertifikat penanda tangan), menggantikan placeholdersubjectKeyIdentifier+ 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 rentangInt64, sehingga TLV mentah wajib digunakan. BentuksubjectKeyIdentifiertetap tersedia hanya sebagai fallback ketika parsing DER sertifikat gagal
Diubah (Changed)
TCmsSignerId.SerialNumber: Int64diganti denganSerialDer: TBytes(TLV serialNumber mentah). Pembangun CMS menyematkan TLV yang dipotong verbatim ke dalamIssuerAndSerialNumber, menghindari luapanInt64pada 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,SignPadesBytesmenambahkan pembaruan inkremental yang membawa kamus/DSSberisi sertifikat penanda tangan dan rantai intermediate penuh (root self-signed dikecualikan per RFC 5652 §10.2.3), plus penanda/Extensions /ESICLevel 1 (EN 319 142-1 §5.4.2) - Stempel waktu arsip PAdES B-LTA: ketika
Level >= plB_LTAdanTsaUrldisetel, 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:
ResolveWinSignerkini memanggilCertGetCertificateChaindan mengisiTPadesResolvedSigner.ChainCertDerdengan sertifikat CA intermediate, sehingga/DSS /CertsB-LT membawa setiap sertifikat yang diperlukan untuk memvalidasi tanda tangan tanpa pencarian eksternal.CertFreeCertificateContextkini diikat, menutup kebocoran satu-konteks-per-tanda tangan yang dicatat di v2.8.0 - Alur kerja integrasi PDF/A:
TPdf.SignPadesWithPdfAmengonversi 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:
TPadesSignOptionsmendapatkan fieldLevel,TsaUrl, danNonce. KetikaLevel >= plB_TdanTsaUrldisetel,SignPadesBytesmengekstrak nilai tanda tangan dari CMS yang dibangun, meminta stempel waktu RFC 3161 atasnya, dan menyematkan TimeStampToken yang dikembalikan sebagai atribut unsigned SignerInfosignature-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), danRequestTimestamp(build+POST+parse sekali jalan).PadesTsaAvailablemengatur fitur pada platform tanpa backend HTTPFPdfTsaWin: backend WinHttp Windows, diikat secara dinamis dari winhttp.dll (nol dependensi waktu kompilasi baru; HTTPS dinegosiasikan oleh penyimpanan sertifikat Windows). Mencerminkan pola dynamic-bindingFPdfCryptoWinFPdfCms:ExtractSignatureValuemenelusuri CMS yang dibangun untuk memulihkan oktet tanda tangan mentah (input hash TSA), danAddSignatureTimestampToCmsmembangun ulang ContentInfo denganunsignedAttrs [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) memungkinkanTPdf.SignPades/SignPadesToStreammenghasilkan 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 melaluiNCryptSignHash 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 tipeTSHA256Digesttunggal tanpa percabangan RTLFPdfAsn1: 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 CMSFPdfCms: 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.4FPdfCrypto+FPdfCryptoWin: abstraksi backend kriptografi denganPadesCryptoAvailable/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 DERECDSA-Sig-Valueyang dibutuhkan CMSSignPadesBytes: injeksi tanda tangan tingkat byte — menyisihkan slot hex/Contentslebar tetap, menghitung/ByteRangeyang 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
FPdfPadesbaru dan metodeTPdf.ValidatePadesmemeriksa kamus nilai tanda tangan yang dapat dijangkau dari/ByteRange, menelusuriSignedDataCMS di dalam/Contentscukup 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.sha1danadbe.x509.rsa_sha1ditandai sebagai terlarang), cakupan berkas/ByteRange, larangan/Cert, bentuk CMSSignedData(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/Reasonvscommitment-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/SaveAsPadesDssToStreammenambahkan 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):
pvviOutputIntentSchememenandai OutputIntent yang/S-nya bukan/GTS_PDFX;pvviOutputIntentMissingIdentifiermenandai/OutputConditionIdentifieryang hilang - Pengecualian Reference XObject PDF/VT-2 (§6.2.2):
pvviReferenceXObjectForbiddentidak lagi memicu untuk berkasPDF/VT-2, yang secara legal dapat menggunakan Reference XObjects pada basis X-5g/5pg - Validasi karakter batas MIME (RFC 2046 §5.1.1):
vtmviBoundaryInvalidCharmenandai batas yang karakternya berada di luar himpunan bchars atau yang panjangnya melebihi 70
Diperbaiki (Fixed)
InjectPdfVTMarkerskini menulis Info/CreationDatedan/ModDatedari opsi simpan, sehingga berkas yang dihasilkan round-tripValidatePdfVTCompliancetanpapvviInfoModDateMismatchpalsu (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):pvviInfoModDateMismatchmenandai/ModDatekamus Info yang, setelah normalisasi tanggal-PDF ke tanggal-XMP, tidak sama denganxmp:ModifyDate - Kepatuhan chunk inline PDF/VT-2s (Lampiran A.2): validator MIME kini menjalankan
ValidatePdfVTCompliancepada setiap bagianapplication/pdfinline dan menandai isi non-PDF/VT melaluivtmviInlinePdfNotPdfVT
Version 2.5.1
Ditambahkan (Added)
- Validasi chunking DParts (ISO 16612-2 §6.5 Table 4):
pvviDPartsBadChunkingmenandai larik/DPartsyang 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
/RecordLevelsetiap PDF inline dan menandai ketidaksesuaian melaluivtmviRecordLevelMismatch, melengkapi pemeriksaan NodeNameList yang ada - Petunjuk objek grafis berulang (§6.7):
pvviGtsScopeInvalidValuemenandai/GTS_Scopedi luar {SingleUse, Record, File, Stream, Global, Unknown};pvviGtsScopeRecordWithoutRecordLevelmenandai/Recordtanpa/RecordLevel;pvviGtsXidNotUuidmenandai/GTS_XIDyang bukan uuid: URI RFC 4122;pvviGtsEnvMissingmenandai/GTS_Envyang hilang ketika/GTS_Scopeadalah Stream atau Global (§6.7.4) - Deteksi forward-reference MIME (Lampiran A.2):
vtmviForwardReferencemenandai PDF inline yang mengutip nama berkas (melalui/EF /F) yang tidak diperkenalkan oleh bagian lampiran sebelumnya di dalam stream
Diperbaiki (Fixed)
ExtractNodeNameListFromPdfdanExtractRecordLevelFromPdfdiFPdfPdfvtMimemenyelesaikan off-by-one berulang di mana offset 1-based yang dikembalikan olehAnsiFindKeydiperlakukan 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):
TPdfVTSaveOptionsmendapatkanDpmEntriesdanDpmTargetsehingga penulis dapat melampirkan kamus/DPMke node DPart yang disintesis, dengan validasi nama-kunci terhadap aturan prefiks kelas-kedua Lampiran E dan aturan §6.6 NMTOKEN / keunikan / bentukGTS_Manageddi sisi validator - Pertukaran streaming PDF/VT-2s (Lampiran A): unit
FPdfPdfvtMimebaru menyediakanBuildPdfVT2sStreamdanValidatePdfVT2sStreamuntuk amplop MIMEmultipart/mixedyang membawa chunk PDF/VT inline plus profil ICC lampiran, dengan aturan urutan headerX-PDFVT-Stream-version: 1dan pemeriksaan konsistensiNodeNameListlintas stream TPdf.ValidatePdfVTkini melakukan hitungan JavaScript-action yang otoritatif melaluiFPDFDoc_GetJavaScriptActionCount, melengkapi pemindaian nama/JavaScripttingkat byte
Diperbaiki (Fixed)
- Kebenaran
TrappedPDF/VT pada basis PDF/X-4: nilai enumptvUnknowndihapus (PDF/X-4 melarang/Unknown),ptvUnspecifieddinormalisasi menjadi/Falsepada saat penulisan (/Trappedyang hilang juga dilarang), dan masalahpvviTrappedInvalidbaru menandai nilai yang tidak ada atauUnknown ValidatePdfVTCompliancekini 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(/AcroFormatau/XFA),pvviAdditionalActionsForbidden(catalog/AA),pvviMissingTrimBox, danpvviReferenceXObjectForbidden(Reference XObject, hanya X-5g/5pg) - Deduplikasi lintas standar:
BuildDictObj,IccComponentCount, profil ICC sRGB bawaan (GetSrgbIccProfile),PdfTextStr,PdfEnclosingObjNum,PdfDictRefNum, danPdfExpandObjectStreamsdipromosikan dari salinan lokal tertriplikasi diFPdfPdfa/FPdfPdfx/FPdfPdfvtke satu rumah kanonik diFPdfPdfCommon; literal ICC 3144-byte kini ada persis sekali di basis kode
Version 2.4.0
Diperbaiki (Fixed)
InjectPdfUaMarkerstidak lagi menghilangkan referensi/Infotrailer pada basis cross-reference-stream:SourceTrailerInfoReflokal (yang tidak memiliki xref-stream fallback) telah digantikan olehPdfSourceTrailerInfoRefbersama (dipromosikan dari salinan PDF/A yang memiliki fallback sejak v2.0.0)PdfReadStreamBytesbersama sekarang menangani referensi/Length N G Rtidak 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
PdfReadTrailerlokal diFPdfPdfaandFPdfPdfx, salinanSourceTrailerInfoReflokal diFPdfPdfaandFPdfPdfua, sertaPdfReadStreamByteslokal diFPdfPdfasemuanya telah dihapus — versiFPdfPdfCommonbersama 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/NumComponentsdi 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_DetectsConformanceyang ada kini juga memverifikasi bahwa referensi/Metadatakatalog diselesaikan dan XMPpdfaid:partdibaca pada basis xref-stream (tidak hanya/Root+/ID). PengujianInjectPdfA_XrefStreamBase_RoundTripsbaru 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_FlagsRequiredMarkersmenegaskan bahwa PDF minimal kosong memicupvaiMissingPdfAIdentifier,pvaiMissingOutputIntent,pvaiMissingIccProfile,pvaiMissingXmpMetadata, danpvaiMissingXmpDates— menutup celah simetri dengan validator PDF/E dan PDF/X yang sudah memiliki pengujian setara. Dua enum cakupan nol lainnya mendapatkan pengujian positif:pvaiUnembeddedFontdanpvaiSubsetMissingCidSet
Version 2.1.0
Diperbaiki
- PDF/E secara tidak sengaja terlewatkan dari perbaikan cross-reference-stream v2.0.0: baik
InjectPdfEMarkersmaupunValidatePdfECompliancemasih memanggilPdfReadTrailertanpaAcceptXrefStream, sehingga injektor PDF/E gagal secara senyap pada output PDF 1.5+ (bawaanSaveAsCopypdfium). Kedua lokasi panggilan kini meneruskanTrue - Fallback cross-reference-stream
PdfReadTrailerbersama kini membawa pelindung/Type /XRefyang sudah dimiliki oleh salinan lokal PDF/A dan PDF/X, sehingga offsetstartxrefyang rusak yang mengarah ke kamus yang tidak terkait akan gagal dengan bersih alih-alih salah diurai sebagai trailer - Penyelesai referensi tidak langsung
/LangdiValidatePdfUaCompliance(v2.0.0) tidak dapat dijangkau:PdfFindObjDicthanya menemukan kamus<<, tetapi objek string/Langadalah(...)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
FPdfPdfCommonbersama telah dihapus dariFPdfPdfadanFPdfPdfua— versi bersama kini berlaku di mana saja melaluiuses
Version 2.0.0
Diperbaiki
- Kegagalan senyap lintas standar: helper
PdfReadTrailerbersama (digunakan oleh injektor dan validator penanda PDF/UA, PDF/X, PDF/VT, dan PDF/R) kini menerima parameterAcceptXrefStreamdan melakukan fallback ke kamus objek cross-reference-stream ketika tidak ada kata kuncitraileryang ada (PDF 1.5+). Sebelumnya, outputSaveAsCopypdfium (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
InjectPdfUaMarkersdanInjectPdfAMarkerskini menggunakanPdfDictEndyang peka kedalaman alih-alih pencarian>>biasa, sehingga trailer yang berisi kamus bersarang (misalnya/Encrypt << ... >>) tidak lagi terpotong sebelum entri/Infoakhir
Diubah
TPdf.ValidatePdfUakini menekanpvuaiFontNotEmbeddedtingkat byte yang kasar ketikapvuaiPdfiumFontNotEmbeddedmodel-objek Pdfium yang presisi telah dipicu, sehingga laporan preflight tidak lagi membawa dua baris yang hampir duplikat “embed your fonts” untuk cacat yang samapvuaiLangInvalidFormat(§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/Langberkode heksadesimal begitu saja: pasangan UTF-16BE (dengan BOMFE FF) dan string heksadesimal ASCII murni kini didekodekan dan dijalankan melalui pemeriksaan tata bahasa BCP 47 yang sama seperti string literal(...)strings, sehingga/Langheksadesimal yang cacat akan tertangkap sementara yang patuh (misalnya UTF-16BEen-US) tidak lagi berisiko ditandai
Diubah
pvuaiFontMissingToUnicode(§7.21.7) kini mengecualikan/MacExpertEncodingbersama dengan/WinAnsiEncodingdan/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/AcroFormuntuk 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). PelindungpvuaiLangInvalidFormatsengaja diabaikan karena pemeriksa tingkat byte secara konservatif menandai string/Langberkode heksadesimal yang tidak dapat didekodekannya
Version 1.97.0
Diperbaiki
- pengerasan
ValidatePdfUaStructureElements: penelusuran rantai indukEnclosingTablekini membawa penghitung lompatan (dibatasi oleh jumlah elemen), sehingga siklusParentIndexyang cacat pada array elemen struktur sintetis tidak lagi menggantung pemanggil. Alokasi array ID konten bertandaValidatePdfUaPageContentTaggingkini dibatasi maksimal satu juta entri, mencegah alokasi multi-GB padaMarkedContentIDyang cacat/berbahaya
Diubah
- komentar dokumen enum
pvuaiOrderedListMissingListNumberingkini secara akurat menjelaskan apa yang dilakukan oleh pemeriksaan tersebut: ini menandai elemenLyang nilaiListNumbering-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-t02kini dihubungkan ke dalamLive_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.ValidatePdfUamendapatkan 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
AllElemsdiTPdf.ValidatePdfUakini mendasarkan ulangParentIndexdari 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:
PdfReadRoleMapPairstidak 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-alihBreak-ing, menghilangkan positif palsupvuaiRoleMapUnresolvedpada tipe yang dipetakan setelah entri tidak langsung/array
Diubah
FPdfPreflightReport: 18 nilaiTPdfUaValidationIssueaktif 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 ketikpuaNone / pua1→pucNone / puc1diPDFSpecComplianceMatrix.md
Version 1.95.0
Diubah
- peninjauan kembali dan pemeriksaan kelayakan
TPdf.ValidatePdfUa: pemeriksaan §7.21.3.3pvuaiCMapWModeMismatchdan pemeriksaan §7.21.7pvuaiToUnicodeForbiddenValuekini mengembangkan stream CMap / ToUnicode yang dikompresi denganFlateDecodesebelum memindai (sebelumnya hanya stream tidak terkompresi yang dinilai, sebuah negatif palsu yang diketahui). Pembantu bersamaPdfInflate/PdfReadAndDecodeStreamdipromosikan dariFPdfPdfa/FPdfPdfxkeFPdfPdfCommonsehingga setiap unit kepatuhan berbagi satu salinan
Ditambahkan
pvuaiSubsetCharSetEmpty(§7.21.4.2) menandaiFontDescriptorsubset Type 1 yang membawa kunci/CharSetdengan nilai string kosong —pvuaiSubsetMissingCharSetyang sudah ada hanya menangkap kunci yang hilang./CIDSetyang kosong tidak ditandai, karena font tanpa CID secara sah dapat membawa bitmap kosong
Version 1.94.0
Ditambahkan
- audit
TPdf.ValidatePdfUatahap 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/Langelemen 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.pvuaiPdfiumAnnotationMissingContentsdanpvuaiPdfiumLinkMissingContents(§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/Fatau/Rect
Version 1.93.0
Ditambahkan
TPdf.ValidatePdfUakini melapiskan pass model objek Pdfium di atas inspektur tingkat byte, mencerminkan arsitektur PDF/A putaran ke-7: berjalan menelusuri objek teks di setiap halaman melaluiFPDFTextObj_GetFont→FPDFFont_GetIsEmbedded(pvuaiPdfiumFontNotEmbedded, §7.21.4) dan memindai setiap karakter melaluiFPDFText_HasUnicodeMapError(pvuaiPdfiumUnicodeMapError, §7.21.7) danFPDFText_GetUnicode(pvuaiPdfiumNotDefGlyph, §7.21.8) — lebih presisi daripada heuristik tingkat byte, yang hanya memicu ketika tidak ada program font sama sekali atau tidak ada/ToUnicodeyang 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.notdefketikaUnicodeMapErrorsudah 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
ValidatePdfEdanValidatePdfVTmendapatkan 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.ValidatePdfEdanTPdf.ValidatePdfVTjuga mendapatkan lapisan model objek Pdfium (pveiPdfiumFontNotEmbedded/pvviPdfiumFontNotEmbedded) yang menelusuri objek teks halaman melaluiFPDFFont_GetIsEmbedded, terputus awal pada font non-tertanam pertama
Version 1.90.0
Ditambahkan
TPdf.ValidatePdfXkini melapiskan pass model objek Pdfium di atas inspektur tingkat byte: berjalan menelusuri objek teks di setiap halaman melaluiFPDFTextObj_GetFont→FPDFFont_GetIsEmbeddeddan melaporkan font non-tertanam sebagaipvxiPdfiumFontNotEmbedded— 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: pemanggilanValidatePdfUaPageContentTaggingper halaman (yang membangun peta klaim ID konten bertanda dan memeriksa silang setiap objek teks/gambar) kini dilewati pada halaman berikutnya setelahpvuaiUntaggedContentsudah 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.notdefketikaUnicodeMapErrorsudah kena. Pemeriksaan ketersediaan APIAssigned()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 pemanggilanAssignedberulang)
Version 1.88.0
Ditambahkan
ValidatePdfXmendapatkan delapan nilaiTPdfXValidationIssuetingkat 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/TrimBoxdi halaman mana pun), danpvxiTrappedNotSet(/Trappedtidak ada atau/Unknown). Validator PDF/X sebelumnya hanya memeriksa penanda XMP/OutputIntent; ini adalah pass tingkat konten pertamanya. Pembantu bersamaPdfStructureBytes/PdfHasName/PdfCountNameditambahkan keFPdfPdfCommonsehingga semua unit kepatuhan dapat menggunakannya
Version 1.87.0
Ditambahkan
- Validasi PDF/UA kini mencakup aturan font komposit ISO 14289-1 §7.21.3:
pvuaiCidSystemInfoMismatchmenandai font Type0 yang CMap tertanam dan CIDFont turunannya tidak sepakat padaRegistry/Orderingatau CIDFontSupplement-nya melebihi nilai CMap,pvuaiCMapNotEmbeddedmenandai CMap yang dirujuk berdasarkan nama (sebagaiEncodingatauUseCMap) yang bukan CMap bawaan dari ISO 32000-1 Tabel 118, danpvuaiCMapWModeMismatchmenandai CMap tertanam yang kamusWMode-nya berbeda dari WMode dalam konten stream-nya
Diperbaiki
- Pemeriksaan §7.21.3.2
pvuaiCidFontMissingCidToGidMapmelewatkan kamus CIDFontType2 yang pasangan kunci/nilaiSubtype-nya dipisahkan oleh baris baru, dan kini juga menandai nilai namaCIDToGIDMapselainIdentity
Version 1.86.0
Ditambahkan
- Validasi PDF/UA kini mencakup aturan pengkodean TrueType ISO 14289-1 §7.21.6:
pvuaiTrueTypeEncodingInvalidmenandai font TrueType non-simbolik yangEncoding-nya tidak ada atau bukanMacRomanEncodingmaupunWinAnsiEncoding(langsung atau melaluiBaseEncoding), danpvuaiSymbolicTrueTypeEncodingmenandai font TrueType simbolik yang memiliki namaEncodingnon-standar
Version 1.85.1
Diubah
- Pemeriksaan urutan tab ISO 14289-1 §7.18.3
pvuaiMissingTabsOrderkini berjalan per halaman: setiap halaman yang memuat anotasi harus mendeklarasikan/Tabs /Sdi 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:
pvuaiXfaDynamicmenandai formulir yang konfigurasi XFA-nya menetapkandynamicRenderkerequired
Diubah
- Bendera kandidat XFA sebelumnya
pvuaiXfaPresentdihentikan 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:
pvuaiUntaggedContentmenandai 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
GetPageContentMarkInfosdanValidatePdfUaPageContentTaggingdengan rekamanTPdfPageContentMarkInfountuk digunakan langsung
Version 1.83.0
Ditambahkan
- Validasi PDF/UA kini menegakkan model heading ISO 14289-1 §7.4.4:
pvuaiHeadingModelMixedmenandai dokumen yang mencampur tagHgenerik dengan heading bernomorH1..Hn, danpvuaiHeadingMultipleInNodemenandai simpul struktur yang memiliki lebih dari satu heading anakH
Version 1.82.0
Ditambahkan
- Validasi PDF/UA kini menyelesaikan RoleMap yang diwajibkan ISO 14289-1 §7.1:
pvuaiRoleMapRemapsStandardmenandai entri RoleMap yang mendefinisikan ulang tipe struktur standar, danpvuaiRoleMapUnresolvedmenandai 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) danValidatePdfUaRoleMapUsageuntuk 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:
pvuaiListStructureInvalidmenandai 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:
pvuaiTableStructureInvalidmenandai sel TH/TD di luar baris TR dan baris atau grup baris di luar kontainer Table-nya,pvuaiTableHeaderMissingScopemenandai sel header yang relasinya tidak dapat ditentukan baik melalui atribut Scope maupun asosiasi Headers/ID, danpvuaiTableHeadersUndefinedIdmenandai referensi Headers dalam dokumen yang tidak mendefinisikan ID elemen struktur apapun TPdfStructureElementmengekspos atribut tabelScope,HasHeaders,HeadersIds,ColSpan, danRowSpan, 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
AnnotationsLabke Lazarus dan C++Builder, bergabung dengan sampel konsol Delphi yang sudah ada
Perbaikan
TPdf.CreateAnnotationdapat 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
AnnotationsLabbaru: 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.MeasureTextdanTPdf.MeasureTextWidthbaru: 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 atasAddText; disediakan oleh unit mandiriFPdfMeasuresebagai asisten kelas (class helper)TPdf.WrapTextbaru: pemotongan kata yang serakah yang dibangun di atasMeasureTextWidthyang 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
ValidatePdfAmemperoleh tiga nilaiTPdfAValidationIssuebaru 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), danpvaiLinkActionMissingTarget(6.6.3 — tindakan GoToR/URI/SubmitForm yang tidak memiliki kunci target tampilan sehingga pembaca tidak dapat menyajikannya)
Version 1.76.0
Ditambahkan (Added)
ValidatePdfAmendapatkan tiga nilaiTPdfAValidationIssuebaru (ordinal ditambahkan, nilai yang sudah ada tidak berubah):pvaiNameNotValidUtf8(PDF/A-2/3 6.1.8 — token/BaseFontatau/FontNameyang 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), danpvaiTrueTypeDifferencesForbidden(6.3.7 Cor.2 — font TrueType non-simbolik yang kamus Encoding-nya membawa/Differences)
Version 1.75.0
Ditambahkan (Added)
ValidatePdfAmendapatkan tiga nilaiTPdfAValidationIssuebaru (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/BMdi luar set blend-mode standar ISO 32000-1 §11.3.5; melengkapipvaiTransparentColorSpacepada PDF/A-1 yang hanya mengizinkan Normal/Compatible), danpvaiHexStringOddDigits(6.1.6 — sebuah string hex<...>dengan jumlah digit hex ganjil)
Version 1.74.0
Ditambahkan (Added)
ValidatePdfAmendapatkan tiga nilaiTPdfAValidationIssuebaru (ordinal ditambahkan, nilai yang ada tidak berubah):pvaiPermissionsViolation(6.1.12 — sebuah kamus (dictionary)/Permsyang membawa/DigestLocation,/DigestMethod, atau/DigestValuebersama/DocMDP),pvaiTransActionForbidden(PDF/A-2 6.5.1 — sebuah aksi transisi Trans, terdeteksi melalui pola action-dict/S /Transuntuk menghindari kecocokan palsu dengan/Transparency), danpvaiPdfiumObjectTransparency(PDF/A-1 6.4 — sebuah objek halaman yang membawa transparansi nyata sesuaiFPDFPageObj_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.ValidatePdfAkini melapiskan pass model objek Pdfium di atas inspektur tingkat byte: metode ini menelusuri objek teks setiap halaman melaluiFPDFPage_GetObject→FPDFTextObj_GetFont→FPDFFont_GetIsEmbeddeddan melaporkan font yang dirender tanpa penyematan sebagaipvaiPdfiumFontNotEmbedded(ISO 19005 6.3.4), serta memuat setiap halaman teks untuk memindaiFPDFText_HasUnicodeMapErrordan melaporkan pemetaan Unicode yang rusak sebagaipvaiPdfiumUnicodeMapError(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 sendiriValidatePdfACompliancetidak berubah
Version 1.72.0
Ditambahkan (Added)
ValidatePdfAmendapatkan lima nilaiTPdfAValidationIssuebaru (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/EFharus juga membawa/UF),pvaiXmpPacketBytesAttr(6.7.5 — header paket XMP tidak boleh membawa atributbytes=atauencoding=yang sudah tidak digunakan lagi), danpvaiAnnotationToggleNoView(PDF/A-2 6.3.2 — bit anotasi/FToggleNoView, nilai 512, dilarang)
Version 1.71.0
Diubah
ValidatePdfUakini memunculkanpvuaiOrderedListMissingListNumbering(ISO 14289-1 7.6): penelusur pohon struktur (structure-tree walker) menyelesaikan atribut tata letakListNumberingpada setiap elemenLmelalui 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
ValidatePdfUamendapatkan empat nilaiTPdfUaValidationIssuebaru (ordinal ditambahkan, nilai yang ada tidak berubah):pvuaiSubsetMissingCidSet(ISO 14289-1 7.21.4.2 —FontDescriptorsubset CID harus mendeklarasikan/CIDSet),pvuaiToUnicodeForbiddenValue(7.21.7 — CMap ToUnicode tidak boleh memetakan kode apa pun keU+FEFFatauU+FFFE; stream yang tidak dikompresi dipindai untuk mencari bentuk output<FEFF>/<FFFE>),pvuaiLangInvalidFormat(7.2 —/Langharus berupa tag RFC 1766 / BCP 47 yang valid; tata bahasa permisif menerimaen,en-US,zh-Hans,es-419dan menandai nilai yang jelas-jelas tidak sesuai), danpvuaiOrderedListMissingListNumbering(7.6 — dipertahankan untuk kelengkapan API; belum dimunculkan oleh validator karena membedakan secara andal antara daftar berurutan dan tidak berurutan memerlukan nilai atributListNumbering, yang tidak diekspos oleh penelusur pohon struktur)
Version 1.69.0
Ditambahkan
ValidatePdfUamendapatkan dua nilaiTPdfUaValidationIssuebaru (ordinal ditambahkan, nilai yang ada tidak berubah):pvuaiWidgetOutsideForm(ISO 14289-1 7.18.4 — elemen struktur Widget harus disarangkan di dalam elemenForm; penelusur pohon struktur kini memverifikasi setiap jenis induk langsung Widget) danpvuaiSubsetMissingCharSet(7.21.4.2 —FontDescriptorsubset Type 1 harus mendeklarasikan/CharSet, yang diidentifikasi oleh awalan nama subset enam huruf+pada/FontName)
Version 1.68.0
Ditambahkan
ValidatePdfUamendapatkan dua nilaiTPdfUaValidationIssuebaru (ordinal ditambahkan, nilai yang ada tidak berubah):pvuaiUriActionIsMap(ISO 14289-1 7.18.5 — kamus tindakan URI tidak boleh membawa/IsMapdengan nilaitrue, karena menonaktifkan target tautan yang dapat diakses) danpvuaiHeadingSequenceViolation(7.4.2 — judul bernomor harus dimulai dariH1dan urutan menurun tidak boleh melewati tingkat perantara, mis.H1→H3adalah sebuah pelanggaran). Pemeriksaan judul adalah aturan PDF/UA tingkat pohon struktur pertama di validator:ValidatePdfUaStructureElementskini menelusuri daftar elemen yang diketik dan memverifikasi urutanH1…H6(danH7+per 7.4.3) dalam urutan dokumen
Version 1.67.0
Ditambahkan
ValidatePdfUamendapatkan lima nilaiTPdfUaValidationIssuebaru (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/Contentsharus memiliki deskripsi alternatif; Popup dan Widget dikecualikan),pvuaiEmbeddedFileMissingName(7.11 — kamus spesifikasi file harus memuat/Fdan/UF),pvuaiMediaClipMissingAlt(7.18.6.2 — kamus data klip media harus memuat/CTdan/Alt), danpvuaiCidFontMissingCidToGidMap(7.21.3.2 — CIDFont Type 2 yang disematkan harus memuat/CIDToGIDMap)
Version 1.66.0
Ditambahkan
ValidatePdfUamendapatkan lima nilaiTPdfUaValidationIssuebaru (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/XFAditandai karena XFA dinamis dilarang),pvuaiTrapNetAnnotation(7.18.2 — anotasi/TrapNetdilarang), danpvuaiReferenceXObject(7.20 — Reference XObject, yang dikunci dari penanda/Ref, dilarang)
Diperbaiki
ValidatePdfUatidak lagi memunculkan positif palsupvuaiEncryptionPresentpada setiap file yang dienkripsi: PDF/UA mengizinkan enkripsi selama kunci/Pkamus enkripsi menetapkan posisi bit 10 (nilai 1024), yang memberikan akses teknologi bantuan (7.16). Pelanggaran spesifik kini dilaporkan melaluipvuaiEncryptionPBitMissingbaru;pvuaiEncryptionPresentdipertahankan di enum untuk kompatibilitas API tetapi tidak lagi dimunculkan oleh validator tingkat byte
Version 1.65.0
Ditambahkan
ValidatePdfAmendapatkan lima nilaiTPdfAValidationIssuebaru (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 —FontDescriptorsubset Type 1 harus membawa/CharSet),pvaiSubsetMissingCidSet(6.3.5 —FontDescriptorsubset CID harus membawa/CIDSet),pvaiWidgetActionForbidden(6.6.1 — anotasi Widget tidak boleh membawa/Aatau/AA), danpvaiOptionalContentAsKey(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
ValidatePdfAmendapatkan delapan nilaiTPdfAValidationIssuebaru (ordinal ditambahkan, nilai yang ada tidak berubah):pvaiHeaderBinaryMarkerMissing(ISO 19005-1 6.1.2 — header%PDF-x.yharus diikuti oleh komentar%dengan setidaknya empat byte yang lebih besar dari 127),pvaiExternalStreamRef(6.1.7 — kamus stream tidak boleh membawa/F,/FFilteratau/FDecodeParms),pvaiOutputIntentScheme(6.2.2 —/SOutputIntent harus berupa/GTS_PDFA1),pvaiInfoXmpDateMismatch(6.7.3 —CreationDate/ModDateInfo harus juga muncul sebagaixmp:CreateDate/xmp:ModifyDate),pvaiMarkInfoMissing(6.8.2.2 — Level A mensyaratkan/MarkInfodengan/Marked true),pvaiAnnotationApDictViolation(6.5.3 Cor.2 — kamus/APanotasi hanya boleh memuat/N),pvaiEmbeddedFileMissingAFRelationship(ISO 19005-3 Lampiran E.2 — setiap spesifikasi file terkait harus membawa/AFRelationship), danpvaiJpeg2000Violation(ISO 19005-2 6.2.8.3 — gambar JPEG2000 harus mendeklarasikan 1, 3 atau 4 komponen)
Diperbaiki
ValidatePdfAtidak lagi memunculkan positif palsupvaiAnnotationFlagsViolationpada dokumen yang menggunakan nama sumber daya font satu huruf seperti/Font << /F 5 0 R >>; pemindaian tanda/Fkini dibatasi pada konteks anotasi (/Subtypedari suatu tipe anotasi), sesuai dengan perilaku yang didokumentasikan (6.5.3)ValidatePdfAkini melaporkan persyaratan file terkait PDF/A-3 per file: suatu dokumen ditandai hanya ketika/Type /Filespectersemat yang mereferensikan stream tersemat melalui/EFtidak 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
/SetStateyang 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.MeasureTextdanTPdf.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 atasAddText; disediakan oleh unit mandiriFPdfMeasuresebagai class helper
Diubah (Diubah)
Demo\Delphi\MergePDF,Demo\CBuilder\MergePDF, danDemo\Lazarus\MergePDFditingkatkan 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
CreatePDFuntuk 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 (contohEuropeanTextlama telah digabungkan) - Contoh
ExtractTextPagesdanEuropeanTextdihapus: kemampuan ekstraksi teks per halaman dariExtractTextPageskini tercakup oleh opsi rentang halaman dan pemisah halaman diExtractText; rendering multibahasaEuropeanTexttelah digabungkan keCreatePDF
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.RenderPageThumbnailmerender halaman apa pun berdasarkan index menjadi bitmap yang disesuaikan dengan rasio aspek tanpa mengubah halaman dokumen saat ini, halaman yang sedang dimuat, atau memicuOnPageChange
Diperbaiki (Diperbaiki)
TPdfThumbnailViewtidak lagi mengubahPageNumberdokumen host saat melukis; sebelumnya setiap repaint memuat ulang halaman, memicuOnPageChange, dan membuang text page, yang dapat menggangguTPdfViewterkait dan memicu loop repaint. Thumbnail kini dirender melaluiRenderPageThumbnailtanpa 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_PDFXVersiondibaca dari bentuk elemen dan bentuk atribut RDF di XMP - Validasi PDF/R kini melaporkan
pvriInfoXmpMismatchketika 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
TPdfViewdan metode publikRenderPage/RenderTilekini menahan document render lock, sehingga terserialisasi terhadap rendering worker-thread dariTPdfyang 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
/Lengthberupa indirect reference secara benar, memuat source bytes denganReadBuffer(sehingga short read gagal bersih), dan menolak offsetstartxrefnegatif 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_OpenFilekini membawacdecl(konvensi stack Win32), dan parametervaluedariFPDFAnnot_SetStringValuedanFPDFAttachment_SetStringValuekiniFPDF_WIDESTRING(UTF-16LE) agar cocok dengan header PDFium - Callback progressive-load
FX_FILEAVAIL.IsDataAvaildanFX_DOWNLOADHINTS.AddSegmentkini memakai offsetsize_t, dansize_tmemiliki lebar pointer pada Free Pascal / Lazarus Win64 (sebelumnya terpotong menjadi 32-bit), sehingga panggilan API ketersediaan data danoutsize_tpada FPC Win64 kini diperbaiki
Diperbaiki (Diperbaiki)
- Keamanan memori: use-after-free pada timer form-fill saat menghancurkan
TPdfdengan caret AcroForm yang aktif; doubleFPDF_CloseDocumentpada jalur galatImportNPagesToOne; pengecualian Pascal yang lolos dari callbackFPDF_FILEWRITE/FPDF_FILEACCESSmelintasi 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
/Nyang 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
/Infodokumen SaveAsdengan 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/Prevyang 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-1yang tepat, membaca metadata stream indirect-/Lengthdengan benar, dan tidak lagi salah mencocokkan key/IDatau/StructTreeRootmilik struktur element saat memeriksa trailer PDF/UA; offsetstartxrefyang 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;
TPdfViewjuga tidak lagi menyisakan dangling reference saatTPdf-nya dibebaskan lebih dulu - Laporan preflight: HTML disimpan sebagai UTF-8 agar cocok dengan charset yang dinyatakan, dan escape string JSON menghasilkan urutan
\uyang benar untuk karakter non-ASCII pada Free Pascal - Build trial: dialog pengingat trial kini muncul alih-alih disembunyikan sebelum sempat tampil
TPdfStreamAdapterkini 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 denganBuildSpokenTextFromWords, posisi kata SAPI dimasukkan keFeedSpokenPosition, 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:
EstimatePacingmenyesuaikan 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:
ResumeRestartsChunkmembacakan 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 barureInvertdanreNightDuotonemewarnai 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 NightDuotoneInkdanNightDuotonePapermengatur palet malam, dengan bawaan teks amber di halaman hitam;reInvertmenang 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 potonganTPdfSpokenTextyang dimuat saat host melaporkan mesin sedang idle melaluiTick, menerjemahkan offset teks yang dibacakan kembali ke karakter halaman, dan menggerakkan kursor kataTPdfViewyang terpasang secara otomatis; host menyambungkan mesin suara apa pun melaluiOnSpeakserta event permintaan cancel / pause / resume, sehingga pustaka tidak menautkan API suara apa pun
\t\t\t\tFeedSpokenPositionmengonsumsi posisi kata dari engine (sepertiStatus.InputWordPositionSAPI);EstimatePacingdenganEstimatedWordsPerMinutemengatur tempo engine tanpa sinyal posisi;ResumeRestartsChunkmengucapkan ulang chunk saat ini untuk engine tanpa jeda bawaan
\t\t\t\tOnChunkChange,OnWordChangedanOnFinishedhanya 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
EstimateSpokenWordIndexmemperkirakan 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:
BuildSpokenTextFromWordsdanSpokenTextAppendmenyusun string yang diberikan ke engine text-to-speech dari kotak kata halaman sambil merekam tabel span, danSpokenToPageCharmenerjemahkan offset lisan yang dilaporkan engine (sepertiStatus.InputWordPositionSAPI) 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 TPdfSpokenTextdanTPdfSpokenSpanmembawa 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\PreflightReportmenambahkan pratinjau Action Plan yang merangkum standar yang tidak lolos, prioritas, tindakan berikutnya, kode isu, dan rekomendasi ke dalam daftar perbaikan
\t\t\t\tDemo\Delphi\PreflightReportClimenerimaplan/actionplansebagai 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
ViewerInteractionLabkini menyertakan kontrol loncat halaman, kontrol zoom manual, pencatatan koordinatDeviceToPage/PageToDeviceberbasis klik, dan log interaksi yang lebih jelas untuk pemeriksaan seleksi, pencarian, rotasi, dan navigasi
\t\t\t\tViewerInteractionLabhalaman readme kini mendokumentasikan alur interaksi tambahan di seluruh set readme demo yang dilokalkan
Version 1.56.7
Ditambahkan
-
\t\t\t\t
AccessibilityWorkbenchClimemetakan 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\tAccessibilityWorkbenchClimenghitung 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\tAccessibilityWorkbenchClimenerimafailscore=Nuntuk menggagalkan proses (kode keluar 2) ketika ada file yang skornya di bawah N
\t\t\t\tAccessibilityWorkbenchClimenulis 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\tAccessibilityWorkbenchClimenambahkan perintahversionyang mencetak versi PDFiumPas yang ditautkan
Version 1.56.6
Ditambahkan
-
\t\t\t\t
IntakeWorkbenchClimenghitung hash forensik SHA-256 untuk setiap file masukan (turun keunavailablepada compiler tanpaSystem.Hash) dan melaporkannya di setiap format
\t\t\t\tIntakeWorkbenchClimenerimapasswords=file.txtuntuk 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\tIntakeWorkbenchClimenerimacopyto=diruntuk mengarahkan setiap file yang diaudit ke subfolder per tingkat risiko, sehingga auditor berubah menjadi penyortir intake
\t\t\t\tIntakeWorkbenchClimenulis 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\tIntakeWorkbenchClimenambahkan perintahversionyang mencetak versi PDFiumPas yang ditautkan
Version 1.56.5
Ditambahkan
-
\t\t\t\t
IntakeWorkbenchClikini menurunkan tindakan pascainput yang direkomendasikan seperti accept, request-password, manual-review, quarantine, dan deduplicate, serta menampilkan jumlah tindakan di ringkasan batch
\t\t\t\tAccessibilityWorkbenchClikini 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, danTLinkAnnotationkini 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
TPdfyang telah mendaftarkan handlerOnUnsupportedFeaturekini melepaskannya dari callback PDFium global proses, sehingga pemuatan dokumen berikutnya dari instanceTPdflain 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
AccessibilityWorkbenchClitidak 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\tAccessibilityWorkbenchClideteksi header tabel tidak lagi mengatribusikan tabel luar untuk selTHyang milik tabel bertingkat, dan nama field formulir serta font dicocokkan secara case-sensitive sehingga field yang berbeda tidak digabung
\t\t\t\tIntakeWorkbenchCliinventaris host URL kini menghapus bagian userinfo, query, dan fragment, sehingga tautan buatan sepertitrusted.example@evil.examplediatribusikan ke host yang sebenarnya, dan targetmailto:menyumbang domainnya alih-alih tidak terlihat
\t\t\t\tIntakeWorkbenchClilaporan 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
AccessibilityWorkbenchClimelaporkan 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\tIntakeWorkbenchCliringkasan 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
AccessibilityWorkbenchClikini 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\tIntakeWorkbenchClikini 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
IntakeWorkbenchClimenerimamaxpages=Ndalam 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.dllyang lebih lama dan kehilangan export yang lebih baru kini gagal dengan bersih: jalur kegagalan mengatur ulang setiap entry point API yang terikat, sehingga pemeriksaanAssigned()(misalnya padaFPDF_GetLastErroratauFPDF_GetSecurityHandlerRevision) melaporkan library sebagai belum dimuat alih-alih memanggil modul yang sudah dilepas dan crash dengan access violation
\t\t\t\t UnloadLibrarykini 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:TrackReadingWordAtmemetakan offset karakter kata saat ini dari engine text-to-speech (sepertiStatus.InputWordPositionSAPI) 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 SetReadingWorddanClearReadingWordmenyetel atau menghapus kata yang disorot langsung dariTPdfWordBox; menyetel ulang kata yang sama tidak menghasilkan operasi apa pun, sehingga pelacakan per kata tidak pernah menimbulkan kedipan tampilan
\t\t\t\tReadingWordColordanReadingWordFollowmengontrol 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.SelectWordBoxdanSelectWordSpanmemilih satu kotak kata atau rentang kotak kata pada halaman yang sama (dariPageWordBoxes) berdasarkan rentang karakter mereka, sehingga kata atau baris yang sedang dibaca juga bisa dipilih dan disalin
\t\t\t\t WordBoxIndexAtCharIndexmemetakan 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,FocusedFormFieldNamedanFocusedFormFieldDetailspadaTPdfdanTPdfViewmelaporkan nilai field saat ini, nama yang dapat dibaca manusia (/TUtooltip, dengan fallback ke/T) danTPdfFormFieldInfolengkap (type, flags, options) — semua yang perlu diumumkan UI suara saat melangkah melalui formulir
Diperbaiki
-
\t\t\t\t
FocusedFormFieldValuemembaca field melaluiFocusedFormFieldIndexalih-alih focus interaktif pdfium, sehingga pengisi formulir berbasis suara mendapat nilai yang benar meski tanpa caret di layar (saat iniFocusedFormFieldTexttetap mencerminkan focus pdfium dan tidak berubah)
Version 1.53.0
Ditambahkan
-
\t\t\t\t
- Dukungan highlight tingkat kata:
TPdf.PageWordBoxesdanTPdfView.PageWordBoxesmembagi halaman menjadi recordTPdfWordBox, 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 keSetReadingHighlight
\t\t\t\t BuildWordBoxesmengekspose 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,GrayscalePdfBitmapdanDuotonePdfBitmapmenerapkan 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.DocumentReadingUnitsdanTPdfView.ReadingUnitsmelinierkan aliran konten yang dapat dibaca menjadi recordTPdfReadingUnitberukuran 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 BuildReadingUnitsmengonversi sembarangTPdfContentFragmentslangsung 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
ValidatePdfAkini 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
ValidatePdfAtidak lagi melaporkan deskripsipdfaExtension:schemasyang 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
ValidatePdfAkini 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
ValidatePdfAkini memeriksa dokumen PDF 1.5+ yang data cross-reference-nya berupa cross-reference stream (file yang tidak memiliki kata kuncitrailer). Level conformansi,/IDtrailer, 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
ValidatePdfAtidak lagi melaporkan isu font non-embedded yang keliru pada dokumen yang sebenarnya menanam semua font mereka. Heuristik sebelumnya membandingkan jumlah token/FontDescriptordengan 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 koreksiValidatePdfUayang 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/Nyang diperlukan (3 untuk profil RGB bawaan), sebagaimana diwajibkan ISO 19005-1 6.2.3.2. Dokumen yang dihasilkanSaveAsPdfAsebelumnya 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
ValidatePdfUatidak lagi melaporkan identifikasi XMP yang hilang secara keliru pada PDF bertag yang sesuai — pengenal PDF/UA (pdfuaid:part),dc:title, tanggal XMP, dan trailer/IDsekarang dibaca dari byte dokumen asli, bukan dari salinan yang disimpan ulang, yang menghilangkan stream XMP/Metadatadan, untuk file cross-reference-stream, trailer/ID
\t\t\t\tValidatePdfUakoreksi 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\tValidatePdfUakini menerima elemen strukturFormulayang teks alternatifnya disediakan melaluiActualTextalih-alih entriAlt(ISO 14289-1 §7.7), konsisten dengan aturanFigureyang sudah ada
Version 1.48.0
Ditambahkan
- Seleksi teks programatik pada
TPdfView:SelectTextRange(berdasarkan rentang halaman dan karakter) danSetSelection(berdasarkan rentang per halaman yang eksplisit) memilih teks dari kode — misalnya untuk membaca dan menyorot sebuah bagian; keduanya menggambar ulang dan memicuOnSelectionChangesaat seleksi berubah.SelectionRangesmembaca seleksi saat ini sebagai rentang karakter per halaman, danSelectionRectanglesmengembalikan 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
TPdfdanTPdfView:FormFieldTabOrder,FocusedFormFieldIndex,FocusFormField,FocusNextFormField,FocusPreviousFormField,ClearFormFieldFocusdanFocusedFormFieldText. 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 melaluiFormFieldInfo[Index].AlternateName(tooltip /TU), dan mengisinya melaluiFormField[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.DocumentReadableContentdanTPdfView.ReadableContentmengembalikan daftar terurut item semantikTPdfContentFragment, masing-masing membawa teks yang diucapkan (glyph nyata, atauActualText/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,ClearReadingHighlightdanReadingHighlightColoryang dipublikasikan menyorot blok yang sedang dibaca, di atas overlay pencarian dan seleksi - Tipe publik baru
TPdfContentFragment,TPdfContentFragments,TPdfReadableContent,TPdfContentFragmentKinddanTPdfReadingOrderSource, serta helper baruClassifyStructType
Version 1.45.0
Ditambahkan (Ditambahkan)
ValidatePdfUakini juga menelusuri live tagged structure tree dan melaporkan tiga pelanggaran konten berkepercayaan tinggi yang tidak dapat dideteksi oleh pemindaian tingkat byte: elemenFiguretanpa entri Alt maupun ActualText (ISO 14289-1, 7.3), elemenFormulatanpa atribut Alt (7.7), dan elemenNoteyang tidak memiliki ID unik (7.9). Tiga nilaiTPdfUaValidationIssuebaru menampilkan ini:pvuaiFigureMissingAlt,pvuaiFormulaMissingAltdanpvuaiNoteMissingId. Penelusuran tree dilewati untuk dokumen tanpa tag- Helper publik baru
ValidatePdfUaStructureElementsmenerapkan aturan structure-tree tersebut pada daftar elemen datar (seperti yang dikembalikanTPdf.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)
ValidatePdfVTkini menolak tree DPart ISO 16612-2 §6.5 yang salah format ketika/DPartsberupa array referensi datar alih-alih array of array yang disyaratkan, atau ketika sebuah leaf DPart mengulang halaman/Startsebagai/Endpadahal rentangnya hanya satu halamanValidatePdfVTkini memvalidasi nama/NodeNameListsebagai nilai XML NMTOKEN setelah ekspansi escape nama PDF#xx, sehingga nama level hierarki yang tidak valid dilaporkan melaluipvviMissingDPartRootalih-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)
ValidatePdfVTkini membiarkan markerpdfvtid:GTS_PDFVTVersionyang ada tetapi tidak dikenali sebagaipvcUnknownalih-alih menurunkannya kepvcNone. Ini menjaga string tingkat file yang tidak valid sepertiPDF/VT-2stetap 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
/DPartRootkini memvalidasi semantik tree ISO 16612-2 §6.5 dengan lebih ketat:/DPartRootNodedan/NodeNameListharus menggambarkan kedalaman DPart yang sebenarnya, tautan parent DPart harus membentuk tree,/Startdan/DPartssaling eksklusif, dan setiap/DParthalaman harus menunjuk ke leaf DPart yang mencakupnya dalam urutan depth-first yang sama dengan page tree
Version 1.44.1
Diperbaiki
SaveAsPdfVTkini menulis Document Part Hierarchy minimal ISO 16612-2 §6.5 ketika PDF sumber tidak memiliki/DPartRootyang 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 pemanggilValidatePdfVTkini 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-5pgTPdfVTSaveOptions.Conformance = pvc2tidak 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)
ValidatePdfUakini 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/ToUnicodeketika 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
TPdfUaValidationIssuebaru —pvuaiFontNotEmbedded,pvuaiFontMissingToUnicodedanpvuaiMissingTabsOrder— ditampilkan olehValidatePdfUadan 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)
SaveAsPdfUakini menegakkan entri katalog wajib ISO 14289-1, 7.1/ViewerPreferences/DisplayDocTitle truedan/MarkInfo/Marked true/Suspects falsebahkan 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,/ViewerPreferencestanpaDisplayDocTitleatau/MarkInfodengan/Marked falseakan kembali menjadi file yang tidak patuh- Kunci yang sudah ada dalam dictionary
/ViewerPreferencesatau/MarkInfotetap dipertahankan, dan dictionary yang diberikan sebagai referensi tidak langsung diselesaikan terlebih dahulu sebelum kunci wajib diterapkan
Version 1.43.0
Ditambahkan (Ditambahkan)
ValidatePdfAkini 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/AFRelationshipyang diwajibkan (ISO 19005-3 Annex E) akan ditandai, sedangkan lampiran PDF/A-2 diizinkan (patuhannya sendiri tidak diverifikasi secara rekursif). Masalah barupvaiUnicodeMappingMissingmelaporkan 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 propertiPdfAConformance. EnumerasiTPdfAConformancemendapatpac2a,pac2u,pac3a, danpac3u(PDF/A-1 tidak punya Level u). Saat menyimpan, ditulispdfaid:partyang cocok (2 atau 3) danpdfaid:conformance(A, B, atau U), sambil mempertahankan subtipe OutputIntentGTS_PDFA1yang 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)
ValidatePdfAkini 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 truedan/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). NilaiTPdfAValidationIssuebaru menampilkan tiap kasus; nilai yang sudah ada tetap sama
Version 1.40.3
Diperbaiki (Diperbaiki)
SaveAsPdfAkini 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)
SaveAsPdfAtidak 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/StructTreeRootdi katalog dan dictionary/MarkInfodengan/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 aksiSetOCGStatekini ditolak agar sesuai ISO 32000-1 (Table 198); sebelumnya aksi seperti itu bisa lolos ke keluaran versi lebih rendah. AksiSetStatePDF 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 bindingFPDFTextObj_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, danMultiPageVieweragar membuka dokumen dalam modeZoom to Pagesecara 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\CreatePDFsehingga 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.htmlyang 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\PreflightReportClidengan 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\PreflightReportClisehinggabatchdir=foldermengumpulkan 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.txttetap 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\PreflightReportCliuntuk mencatat setelan run: jenis sumber, jalur sumber, status rekursif, direktori output, format report, standar yang dipilih, dan modefailon= - 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\PreflightReportClisehingga nama file input duplikat yang berbagi satuoutdir=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\PreflightReportClisehingga keluaran TXT dan JSON kini menyertakan total agregat untuk total file, file yang diproses, file yang gagal, issue, dan kecocokanfailon= - 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\PreflightReportClidengansummary=batch.html/.htmagar 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\PreflightReportClidenganbatchdir=folderdanrecursiveagar skrip dapat memindai folder PDF secara langsung tanpa lebih dulu menulis file daftar - Mode batch direktori memakai ulang perilaku
outdir=,summary=,standards=, danfailon=dari mode batch berbasis daftar, sedangkan pemindaian non-rekursif hanya mencakup folder yang dipilih danrecursivemenyertakan subfolder - Memperbarui
TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.45
Version 1.39.44
- Memperkaya
Demo\Delphi\PreflightReportClidengansummary=batch.csv|json|txtagar 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\PreflightReportClidenganbatch=list.txtdanoutdir=reportsagar 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\PreflightReportClidenganfailon=none|issues|action|reviewagar 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\PreflightReportClidenganattach=output.pdfagar 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 pembuatanFPdfPreflightReportyang 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 filterstandards=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
FPdfPreflightReportdenganTPdfPreflightReport.ToMarkdowndanSaveMarkdownToFileagar report preflight dapat diekspor sebagai Markdown yang ramah issue tracker - Memperbarui sampel
PreflightReportDelphi, 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
SecurityAuditDelphi, 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, danfindingsterstruktur 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
FPdfPreflightReportdenganTPdfPreflightReport.ToCsvdanSaveCsvToFileagar report preflight dapat diekspor sebagai CSV yang ramah spreadsheet - Memperbarui sampel
PreflightReportDelphi, 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
FPdfPreflightReportdenganTPdfPreflightReport.IssueCategoryCountsplus tipe reusableTPdfPreflightIssueCategoryCountdanTPdfPreflightIssueCategoryCountsuntuk mengagregasi issue tingkat marker per kategori - Memperbarui
TPdfPreflightReport.ToText,ToHtml, danToJsonagar 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
PrintDialogyang diperluas menjadiPrintPreferencesdi 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\PrintPDFdengan pemuatan PDF drag-and-drop dan mendokumentasikan workflowDemo\CBuilder\PrintPDFyang 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
TPdfViewterhubung 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\ContentExtractionLabdanDemo\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, danDemo\CBuilder\PreflightReportdengan 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
FPdfPreflightReportmelaluiTPdfPreflightReport.ToJsondanSaveJsonToFile, menghasilkan ringkasan yang bisa dibaca mesin, status / prioritas per standar, tindakan berikutnya, dan detail issue - Memperbarui
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReport, danDemo\CBuilder\PreflightReportdengan 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
FPdfPreflightReportdenganTPdfPreflightStatus, kategori issue, prioritas per standar, dan panduan tindakan berikutnya di report TXT / HTML - Memperbarui
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReport, danDemo\CBuilder\PreflightReportagar 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, danDisplayModespread; 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 transformasiTPdfMatrix, 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 transformasiTPdfMatrix, 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 workflowFPdfPreflightReportyang dapat dipakai ulang - Sampel C++Builder memakai
FPdfPreflightReport.hppuntuk 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\SearchAndSelectdengan 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
HighlightSearchTextpada halaman aktif - Memperbarui
TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.11
Version 1.39.10
- Memperkaya
Demo\Delphi\SecurityAuditdengan 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\ContentExtractionLabdengan 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 membungkusValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfR, danValidatePdfVTke dalam satu objekTPdfPreflightReport - 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, danClearSelectiontanpa 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\ViewerInteractionLabmenjadi sampel UX viewer bergaya SearchAndSelect denganHighlightSearchText, opsi match-case / whole-word, pratinjau teks terpilih, dan kontrol seleksi / clipboard yang sudah ada - Memperluas
Demo\Delphi\PrintDialoguntuk memeriksa preferensi cetak penulis PDF:PrintCopies,PrintPageRanges,PrintScaling,PrintPaperHandling, dan pemetaan duplexSetPdfPrintPaperHandlingDevModeyang 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\ImageToPDFdanDemo\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, inputTFileStreamstreaming, 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, danFPDFPageObj_SetMatrixtanpa menambah API library baru - Memperbarui
Docs\en-us\Examples.htmlagar memakai polaTPdfMatrix.Handlesaat ini ketika meneruskan matrix keFPDFPageObj_SetMatrix - Memperbarui
TPdf.AboutInfo, metadata paket Lazarus, dan metadata versi installer agar melaporkan 1.39.2
Version 1.39.1
- Menambahkan
Demo\Delphi\ViewerInteractionLab, sampelTPdfViewterfokus untuk mode tampilan, mode fit, warna halaman, rotasi, seleksi teks pengguna, aksi clipboard, dan umpan balik koordinatDeviceToPage - Menambahkan
Demo\CBuilder\StandardsLab/Demo\Lazarus\StandardsLabagar 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.dprojdanLib\FPC\PDFiumLaz.lpkserta memperbaiki build demo DelphiSplitViewdengan menghapus impor gandaWinapi.ShellAPI - Memperbaiki penghalang batch-build demo Delphi di
BatchExport,PDFViewer,MultiPageViewer, danSplitViewtanpa mengubah perilaku runtime-nya - Memperbaiki kompatibilitas batch-build demo C++Builder di
PDFViewerdanMultiPageViewerdengan menggantinullptrmenjadiNULLuntuk 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, menjalankanValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfR, danValidatePdfVT, lalu menampilkan conformance yang terdeteksi, status lulus/gagal, dan jumlah issue dalam satu grid - Tombol simpan StandardsLab memanggil
SaveAsPdfA,SaveAsPdfUa,SaveAsPdfE,SaveAsPdfX,SaveAsPdfR, danSaveAsPdfVT, 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
TPdfViewkini memakai alpha blending nyata alih-alih logical mask painting, sehingga konten halaman di bawah sorotan tetap terjaga - Menambahkan
SetPdfPrintPaperHandlingDevModeuntuk memetakanTPrintPaperHandlingke nilai WindowsDEVMODE.dmDuplex:DMDUP_SIMPLEX,DMDUP_HORIZONTAL, danDMDUP_VERTICAL TPdfView.SmoothScrollkini menganimasikan perintah scrollbar baris / halaman dalam segmen yang dikendalikan timer; pelacakan thumb tetap langsung- Memperbarui
TPdf.AboutInfodan metadata versi installer agar melaporkan 1.38.0
Version 1.37.0
TPdfkini memiliki render lock per instance yang menserialkan jalurRenderPage,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
TBitmapbottom-up dan beralih ke buffer milik PDFium sebelum menyalin keluar, menghilangkan kegagalan stride-corruption / access-violation di tes render VCL - Memperketat perilaku seleksi
TPdfView:AllowUserTextSelectionhanya membatasi input pengguna, API seleksi tingkat kode tetap merender, danSelectAllmengikuti spread yang benar-benar terlihat sehingga halaman sampul tidak lagi memilih halaman 2. Tes Delphi, Lazarus, dan C++Builder diperluas sesuai itu - Memperbarui
TPdf.AboutInfodan metadata versi installer agar melaporkan 1.37.0
Version 1.36.0
- Mengaktifkan pemilihan teks oleh pengguna akhir di
TPdfView— propertiAllowUserTextSelectionyang 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+Amemilih halaman saat ini (kedua halaman dalam mode tampilan spread), danCtrl+Cmenyalin seleksi ke clipboard Windows sebagaiCF_UNICODETEXT Shift+Left/Shift+Rightmemperluas seleksi satu karakter demi satu karakter (meluas ke halaman yang bersebelahan dalam mode spread);Shift+Home/Shift+Endmemperluas 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.SelectedTextmenggabungkan potongan per halaman dengan CR/LF sehingga teks hasil round-trip terbaca seperti konten multi-baris normal - Properti terpublik baru
SelectionColor(defaultclHighlight, warna seleksi sistem Windows) — terpisah dariHighlightColoryang 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
OnSelectionChangedipicu 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 dariAllowUserTextSelection— 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 menetapkanPopupMenusendiri — pola standar "select text, right-click, copy" langsung berfungsi. Caption dipilih antara Inggris dan Tionghoa olehSysLocale.PriLangID; host yang butuh lokalisasi penuh (atau menu yang lebih kaya) cukup menetapkanPopupMenusendiri dan defaultnya akan disembunyikan - Seleksi dibersihkan otomatis pada transisi
SetPdf,SetPageNumber,SetActive(False), danDisplayMode, denganOnSelectionChangeterpanggil 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 menerimaCtrl+C/Ctrl+A/Shift+arrowsuntuk 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.SaveAsPdfVTmenaikkan 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/Trappeddi Info,/OutputIntentsdi katalog yang merujuk ke dictionary OutputIntent dengan profil ICC tertanam) bersama properti khusus PDF/VT - Injeksi khusus PDF/VT mencakup
pdfvtid:GTS_PDFVTVersiondi XMP (= "PDF/VT-1" atau "PDF/VT-2" menurut §6.3 Table 2) danpdfvtid:GTS_PDFVTModDate(disinkronkan denganxmp:ModifyDatemenurut §6.3 NOTE 1), plus deskripsipdfaExtension:schemasyang mendeklarasikan namespacepdfxiddanpdfvtid(URI NPEShttp://www.npes.org/pdfx/ns/id/danhttp://www.npes.org/pdfvt/ns/id/). Trailer membawa array/ID - Menambahkan
TPdf.SaveAsPdfVTToStreamuntuk keluaran PDF/VT di memori, dan singkatan opsi defaultTPdf.SaveAsPdfVT(FileName)yang menghasilkan PDF/VT-1 dengan OutputIntent sRGB IEC61966-2.1 bawaan (3144 bytes, profil yang sama denganSaveAsPdfA/SaveAsPdfX) dan/Trapped /False - Menambahkan
TPdf.ValidatePdfVT: memeriksa PDF yang terbuka untuk marker kepatuhan PDF/VT (keberadaanpdfvtid:GTS_PDFVTVersiondanGTS_PDFVTModDatedi XMP, kesetaraan antarapdfvtid:GTS_PDFVTModDatedanxmp:ModifyDate, keberadaan identifier dasarpdfxid:GTS_PDFXVersion, keberadaan/DPartRootdi katalog menurut §6.5,/OutputIntentsdengan/DestOutputProfile, trailer /ID, status enkripsi, keberadaanxmp:CreateDate/ModifyDate) dan mengembalikanTPdfVTValidationResultdengan 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 memanggilValidatePdfVTsecara 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/ treeDPartper §6.5) adalah struktur level aplikasi yang bergantung pada pemetaan recipient / page-range dari workflow cetak variable-data.SaveAsPdfVTTIDAK membuat tree DPart —ValidatePdfVTmenampilkan/DPartRootyang hilang sebagaipvviMissingDPartRootagar 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.AboutInfoagar melaporkan versi produk saat ini
Version 1.34.0
- Menambahkan dukungan injeksi marker PDF/R-1 (ISO 23504-1:2020):
TPdf.SaveAsPdfRmenaikkan 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.0yang 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/Metadatadi katalog yang membawa empat entri Table 1 §6.4.4 (xmp:CreatorTool / pdf:Producer / xmp:CreateDate / xmp:ModifyDate), dan array/IDdi trailer - Menambahkan
TPdf.SaveAsPdfRToStreamuntuk keluaran PDF/R di memori, dan singkatan opsi defaultTPdf.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 mengembalikanTPdfRValidationResultdengan 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 memanggilValidatePdfRsecara eksplisit - Tipe baru yang diekspor dalam unit baru
FPdfPdfr:TPdfRConformance,TPdfRValidationResult,TPdfRValidationIssue,TPdfRSaveOptions.TPdfRSaveOptions.DefaultmengaturStripInfoOptionalEntriesdanStripCatalogOptionalEntrieske 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.ValidatePdfRmenampilkan 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.AboutInfoagar melaporkan versi produk saat ini
Version 1.33.0
- Menambahkan dukungan injeksi marker PDF/X (keluarga ISO 15930):
TPdf.SaveAsPdfXmenaikkan 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 membawapdfxid:GTS_PDFXVersion(danpdfxid:GTS_PDFXConformanceuntuk PDF/X-1a / PDF/X-3) plus deskripsipdfaExtension:schemasyang 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_PDFXdan profil ICC tertanam, serta array/IDdi trailer - Menambahkan
TPdf.SaveAsPdfXToStreamuntuk keluaran PDF/X di memori, dan singkatan opsi defaultTPdf.SaveAsPdfX(FileName)yang menghasilkan PDF/X-4 dengan OutputIntent sRGB IEC61966-2.1 bawaan (3144 bytes, profil yang sama dengan yang dipakaiSaveAsPdfA) - 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/OutputIntentsdengan/DestOutputProfile, keberadaan Title, trailer /ID, status enkripsi, keberadaanxmp:CreateDate / xmp:ModifyDate) dan mengembalikanTPdfXValidationResultdengan 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 memanggilValidatePdfXsecara 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.Defaultmenargetkan PDF/X-4 dengan OutputIntent sRGB dan/Trapped /False; pemanggil dapat menimpaConformance, menyediakan blobIccProfileDataCMYK untuk workflow cetak komersial, atau mengubahOutputCondition/OutputConditionIdentifier/RegistryNameuntuk 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
ValidatePdfXdengan alat preflight seperti callas pdfaPilot atau Ghent PDF Workgroup Output Suite untuk verifikasi conformance lengkap - Memperbarui string
TPdf.AboutInfoagar melaporkan versi produk saat ini
Version 1.32.0
- Menambahkan dukungan injeksi marker PDF/E-1 (ISO 24517-1:2008):
TPdf.SaveAsPdfEmenaikkan 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 membawapdfe:ISO_PDFEVersion = "PDF/E-1"plus deskripsipdfaExtension:schemasyang 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/IDdi trailer yang diwajibkan §6.2 - Menambahkan
TPdf.SaveAsPdfEToStreamuntuk keluaran PDF/E di memori dan singkatan opsi defaultTPdf.SaveAsPdfE(FileName)untuk kasus umum - Menambahkan
TPdf.ValidatePdfE: memeriksa PDF yang terbuka untuk marker kepatuhan PDF/E-1 (keberadaanpdfe:ISO_PDFEVersiondi XMP dan kesetaraannya dengan nilai di Info dictionary, deskripsi schema ekstensi pdfe, entri Info-dictionary/ISO_PDFEVersion, trailer /ID, keberadaanxmp: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 memanggilValidatePdfEsecara 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 —
SaveAsPdfEmenempelkan marker level format file tetapi tidak mengubah konten halaman atau menghapus fitur yang dilarang - Memperbarui string
TPdf.AboutInfoagar melaporkan versi produk saat ini
Version 1.31.0
- Menambahkan dukungan injeksi marker PDF/UA-1 (ISO 14289-1:2014):
TPdf.SaveAsPdfUamenaikkan 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 membawapdfuaid:part = 1plus deskripsipdfaExtension:schemasyang cocok,dc:titlewajib, 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/IDdi trailer - Menambahkan
TPdf.SaveAsPdfUaToStreamuntuk keluaran PDF/UA di memori, dan singkatan opsi defaultTPdf.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 XMPpdfuaid:part, keberadaandc: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 memanggilValidatePdfUasecara eksplisit - Tipe baru yang diekspor dalam unit baru
FPdfPdfua:TPdfUaConformance,TPdfUaValidationResult,TPdfUaValidationIssue,TPdfUaSaveOptions - Field
Title / Author / Subject / Keywords / Creator / Producer / CreationDate / ModDate / DocumentId / InstanceId / Languageyang dibiarkan kosong diTPdfUaSaveOptionsdiisi otomatis dariFPDF_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 —
SaveAsPdfUamenempelkan marker level format file tetapi tidak mengubah konten halaman atau menciptakan tag.ValidatePdfUamenampilkan ketiadaan StructTreeRoot sebagaipvuaiMissingStructTreeRootagar pemanggil dapat mengarahkan dokumen tanpa tag melalui pipeline tagging terpisah - Memperbarui string
TPdf.AboutInfoagar 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:MetadataDatejuga diterbitkan - Trailer PDF/A kini selalu berisi array
/ID(persyaratan keras ISO 19005-1 6.1.3). SaatTPdf.SaveAsPdfAmemproses 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 TPdfASaveOptionsmendapat lima field opsional baru: Producer, CreationDate, ModDate (string tanggal PDF dalam bentuk “D:YYYYMMDDHHmmSSOHH'mm'”), DocumentId, dan InstanceId (string byte 16 byte untuk array/IDdi trailer).TPdf.SaveAsPdfA/SaveAsPdfAToStreammengisi otomatis field yang hilang dariFPDF_GetMetaTextdanFPDF_GetFileIdentifier, sehingga pemanggil yang sudah ada tetap bekerja tanpa perubahanTPdf.ValidatePdfA/TPdf.PdfAConformancekini melaporkan tiga issue tambahan:pvaiMissingTrailerId(tidak ada/IDdi trailer),pvaiMissingXmpDates(xmp:CreateDateatauxmp:ModifyDatehilang), danpvaiMissingExtensionSchema(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.AboutInfoagar 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_SetCharcodesdan penguatan internal lain dari proyek PDFium - Mengekspos flag simpan baru
FPDF_SUBSET_NEW_FONTSmilik PDFium diFPdfPageOps.pas, sehingga pemanggilFPDF_SaveAsCopydapat meminta subsetting otomatis file font tertanam untuk text object yang baru ditambahkan. KonstantaFPDF_INCREMENTAL,FPDF_NO_INCREMENTAL, danFPDF_REMOVE_SECURITYyang sudah ada kini didefinisikan memakai bentuk bit-shift hulu (nilai numerik lama 3 dipertahankan sebagaiFPDF_REMOVE_SECURITY_DEPRECATEDdemi kompatibilitas biner) - Menambahkan enum
FPDF_FONT_BACKEND_TYPE(FREETYPE/FONTATIONS) dan fieldm_FontLibraryTypeyang cocok padaFPDF_LIBRARY_CONFIGdiFPdfView.pas, sehingga aplikasi yang menginisialisasi PDFium dengan renderer Skia kini dapat memilih font backend saat startup - Memperbarui signature
TFPDFPage_InsertObjectagar cocok dengan hulu: fungsi C kini mengembalikanFPDF_BOOL(TRUEsaat berhasil,FALSEjikapage_objectadalahNULLatau 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.AboutInfoagar 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.SaveAsPdfAmenyimpan 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.SaveAsPdfAToStreamuntuk 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 memanggilValidatePdfAsecara eksplisit - Tipe baru yang diekspor:
TPdfAConformance,TPdfAValidationResult,TPdfAValidationIssue,TPdfASaveOptions(di unit baruFPdfPdfa.pas) SaveAsPdfAmendukung profil ICC kustom melaluiTPdfASaveOptions.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 DelphiBatchExportv1.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 didukungIPdfCancellationToken. 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”:CreateXObjectFromPagemembuat handle yang dapat dipakai ulang dari halaman mana pun di dokumen lain;InsertFormObjectFromXObjectmenyisipkan SATU salinan halaman yang dibungkus ke halaman saat ini. MengembalikanFPDF_PAGEOBJECTyang disisipkan agar pemanggil dapat memosisikan / menskalakan / memutarnya denganFPDFPageObj_SetMatrixdan helperTPdfMatrixv1.9.0 - Class Pascal baru
TPdfXObjectmembungkus handleFPDF_XOBJECTmilik PDFium dan menutupnya otomatis di destructor-nya, sehingga tidak perlu lagi ritual manualFPDF_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— varianRenderPageyang bisa dibatalkan dan menggerakkan progressive rendering loop PDFium serta memeriksaIPdfCancellationTokenv1.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, atauprsFailed. BerikanAToken = niluntuk merender sampai selesai tanpa pernah berhenti sejenak (tidak ada kemungkinanprsCancelled) - Memakai jalur cepat zero-copy yang sama seperti yang diperkenalkan di v1.21.0 — PDFium merender langsung ke DIB milik
TBitmaptujuan. 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
RenderPagesinkron pada token hidup
Version 1.23.0
- Menambahkan enam method
TPdfViewbaru yang mengekspos seleksi teks widget form dan Undo/Redo milik PDFium ke aplikasi:GetSelectedFormTextmengembalikan teks yang saat ini dipilih di dalam widget form yang sedang fokus;SelectAllFormTextmemilih setiap karakter;FormUndo/FormRedo/FormCanUndo/FormCanRedomenggerakkan 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:ImportPagesByIndexmengambil array indeks berbasis nol untuk menyalin halaman tertentu dari dokumen sumber;ImportNPagesToOnemengembalikanTPdfbaru yang halamannya adalah komposit N-up dari dokumen ini;MovePagesmengurutkan ulang halaman di tempat. API PDFium yang mendasarinya sudah terikat tetapi belum punya titik masuk yang ramah Pascal ImportPagesByIndexmenerima 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 helperTPdfViewyang sesuai) ke jalur keluaran zero-copy. PDFium kini menulis langsung ke buffer DIB milikTBitmaptujuan 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 maskHighlightColordi atas setiap kecocokan pada setiap redraw.ClearHighlightmenghapus sorotan; berpindah ke halaman lain menghapusnya otomatis karena kecocokan bersifat per halaman HighlightColordefault keclYellowdan 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
TPdfViewdengan empat nilai:pfmNone(zoom manual),pfmActualSize(100%),pfmFitPage(seluruh halaman pas di viewport), danpfmFitWidth(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
Zoomsecara langsung membatalkan mode fit aktif (FitModekembali kepfmNone), sesuai konvensi viewer PDF standar saat mengetik nilai zoom membuat keluar dari Fit Page / Fit Width - Default adalah
pfmNonesehingga 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 dariColorkontrol di sekitarnya. Default adalahclWhite, 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.Coloruntuk mewarnai ulang halaman PDF harus mengaturPageColorsebagai 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
TPdfViewsehingga aplikasi yang menanam viewer di kiosk, panel pratinjau, atau konteks read-only dapat menonaktifkan gesture navigasi tanpa subclassing:AllowUserPageChangemengontrol shortcut keyboard baruPgUp/PgDn/Ctrl+Beranda/Ctrl+End;ChangePageOnMouseScrollingmengontrol loncatan halaman wheel-up / wheel-down baru;AllowUserTextSelectiondisisihkan 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+wheelsehingga aplikasi dapat mempertahankanCtrl+wheelkhusus 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
TPdfViewuntuk klik tautan anotasi saat halaman viewer berbeda dari halamanTPdfterkait, 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
TPdfViewsehingga aksi anotasi otomatis dan web-link memakai halaman yang saat ini ditampilkan viewer, bahkan saat komponenTPdfterkait berada di halaman lain - Memperkeras
TPdfThumbnailViewterhadap referensiPdfyang menggantung saat komponenTPdfyang 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(FPdfThumbnailunit) 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 sebelahTPdfViewagar pengguna akhir dapat menelusuri dokumen panjang per halaman - Komponen ini terdaftar di tab palette losLab bersama
TPdfdanTPdfView; properti kunci:Pdf,CurrentPageIndex,ThumbnailWidth,ThumbnailHeight,TextColor,HoverColor,SelectionColor,BorderColor, dan eventOnPageClick - 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 menggunakanTPdf.LoadCustomDocumentuntuk pemuatan streaming,IPdfCancellationTokenuntuk pembatalan kooperatif, dan bilah progres keseluruhan + per halaman per file. Demo ini memakai satu instanceTPdfper 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
TPdfViewmelalui tiga properti baru:AsyncRendering,LoadingText, danLoadingColor. SaatAsyncRenderingbernilai 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:
AsyncRenderingbernilai 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
TPdfper 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 baruLinkOptionsmengontrol perilaku otomatis untuk empat jenis aksi tautan PDF: goto (loncatan halaman), URI (ShellExecute), launch (ShellExecute), dan GotoR tersemat (disisihkan). Default mengaktifkanloAutoGotodanloAutoOpenURI;loAutoLaunchdanloAutoEmbeddedGototetap mati agar klik liar tidak bisa menjalankan program arbitrer - Menambahkan event
OnAnnotationLinkClickdanOnWebLinkClickyang dipicu sebelum aksi otomatis apa pun dan memungkinkan aplikasi memeriksa tautan, menandainyaHandled, atau mengalihkannya (misalnya, ke prompt keamanan) - Deteksi klik tautan hanya berjalan ketika gesturnya adalah klik, bukan drag, memakai anchor
MouseDownyang 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
LinkOptionsdefault, round-trip set, dan penetapan event-handler
Version 1.11.0
- Menambahkan polesan visual pada
TPdfView: propertiPageShadowSize,PageShadowColor, danPageBorderColormenggambar drop shadow opsional di bawah persegi halaman dan border satu piksel di sekelilingnya. Default mempertahankan tampilan datar sebelumnya (PageShadowSize = 0; border digambar denganclBlackdefault tetapi menyatu ke latar putih default sampai pemanggil mengubah warnanya) - Menambahkan properti
SmoothScrollsebagai 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.AddImagedanTPdfView.AddImageyang menerima path file atauTBitmap, di sampingAddPictureberbasisTPictureyang 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 denganAddPicturesehingga perilakunya identik AddImage(TBitmap)melewati perantaraTPicture, yang menyederhanakan pemanggil yang sudah memegangTBitmapdari 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
TPdfMatrixdi unitFPdfMatrix.TPdfMatrixmembungkusFS_MATRIXmilik PDFium dengan API OO untukTranslate,Scale,Rotate,HorizontalFlip,VerticalFlip,CentralFlip,Skew, danMultiply, cocok untuk menyusun transformasi sebelum menyerahkannya keFPDFPageObj_SetMatrixdan API PDFium serupa TPdfMatrix.Multiplydengan 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 helperTPdfStreamAdapter, didukung olehFPDF_LoadCustomDocumentmilik PDFium. PDFium kini membaca blok dariTStreamyang 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 = Truemenyerahkan masa hidupTStreamkeTPdf, yang akan membebaskannya saatUnloadDocumentberjalan - 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, mengeksposIPdfCancellationToken/IPdfCancellationTokenSourcedan singletonPdfNoCancellationTokenyang 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 envelopeTPdfFutureResult<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.PrintPageRangeske print page range pada preferensi viewer PDF, mengembalikan rentang halaman berbasis satu untuk kode aplikasi - Menambahkan
TPdf.SetFormFieldFlags / SetFormFieldFlagsAtdan helperTPdfViewyang 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_DWORDberukuran Windows, callbackFPDF_FILEACCESS, dan field slot embedder V8
Version 1.6.9
- Menambahkan binding rendering Skia level rendah untuk API baru yang diekspor
FPDF_RenderPageSkiadanFPDF_FFLDrawSkiadi 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.SetTextPositionsdanTPdfSingleArrayuntuk mengatur posisi per karakter pada text object yang sudah ada melalui APIFPDFText_SetPositionsyang baru diekspor - Menaikkan
FPDFText_SetPositionsmenjadi 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
TPdfke aksi name-tree JavaScript dokumen, mengembalikan nama aksi dan skrip melaluiJavaScriptActiondanJavaScriptActions - Menambahkan
TPdf.FileIdentifieruntuk membaca ID trailer permanen dan berubah sebagaiTBytesbiner tanpa byte terminator PDFium - Menambahkan
TPdf.PageBox,GetPageBox, danSetPageBoxuntukMediaBox,CropBox,BleedBox,TrimBox, danArtBoxpada 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
EnableV8Enginesebelum memuat kini memilihpdfium.v8.dlldari treeDLLs\Win32atauDLLs\Win64dan mengekspos binding khusus V8/XFA saat DLL yang dimuat menyediakannya - Menambahkan
V8FeaturesAvailable,XfaBStrHelpersAvailable,GetRecommendedV8Flags, dan binding opsional level rendah untukFPDF_BStr_*,FPDF_GetRecommendedV8Flags, danFPDF_GetArrayBufferAllocatorSharedInstance - Membuat
FPDFText_SetPositionsopsional 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.StructureElementsdanTPdfView.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
TPdfPrintModedanSetPdfPrintMode, 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
TPdfViewuntuk helper fit-zoom, round-trip koordinat device/page, hit-testing karakter, dan pan mouse melalui kontrol viewer jendela tersembunyi - Fixture
TPdfViewkini 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, sementaraPageNumberkini 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
SetStatedireklasifikasi 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 aksiSetStatekini 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
SetStatePDF 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
/Versioncatalog 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
/Versioncatalog 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
TPdfViewdi ketiga suite IDE (Tests.PdfView). Setiap suite membangunTForminduk tersembunyi (viaTForm.CreateNewdi sisi Pascal dannew TForm(NULL, 0)di sisi C++Builder), memindahkan indukTPdfView, menetapkanActive := True, lalu memverifikasi permukaan round-trip untukPageCount, defaultPageNumber,Zoom,Rotation,DisplayMode, dan bahwaView.Textcocok denganTPdf.Textyang 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.RendermemanggilTPdf.RenderPagepadasample.pdfdan 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.CreateAnnotationmembangun anotasianHighlightplus round-trip SaveAs/LoadDocument, jalur baca AcroForm padaDemo/Delphi/FormFill/cmp_fill_out_and_merge_forms.pdf(FormTypeadalahftAcroForm,FormFieldCount > 0,FlattenAllPagesmenurunkan field menjadi nol), dan cakupan jalur baca senyap untukBookmarks,LinkAnnotationCount, danWebLinkCountpada 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 substringTPdf.FindFirst / FindNext, kecocokanCharacterOrigin / CharacterRectangleterhadap originAddText, registrasiCreateAttachmentplus round-trip SaveAs/LoadDocument, dan round-tripAddTextteks 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 melewatkanFontData, yang saat ini access-violate di dalamFPDFFont_GetFontDatapada 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
TPdfViewsebagai helper level unitComputeSpreadPages(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 didmTwoPageContinuousWithCover, 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/Langpada katalog PDF - Menambahkan akses subtype MIME attachment dengan
TPdf.AttachmentType - Menambahkan
anRedactkeTPdfAnnotationSubtypedan menambahkan helper penghapusan page-object untukTPdfdanTPdfView - Memperbarui demo viewer dan attachment agar menampilkan informasi bahasa dan tipe attachment baru saat tersedia
Version 1.5.1
- Menambahkan
dmTwoPageContinuousWithCoveruntukTPdfViewsehingga 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 diTests\TestDatadan menjalankan tujuh kasus yang sama masing-masing, mencakup pemuatan dokumen, info halaman, ekstraksi teks, metadata, round-trip penyimpanan, validasi header PDF, dan propertiCompressed
Version 1.4.3
- Memperkaya demo FontProperti agar menampilkan API metadata font
TPdfViewdanTPdf, termasuk handle font, ukuran data font, dan metrik karakter - Menambahkan properti inspeksi karakter dan font terindeks
TPdfViewdan memperbarui demo FontProperti agar mengquery metadata font text-object
Version 1.4.2
- Menambahkan properti inspeksi karakter dan font terindeks ke
TPdfuntuk 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 FontBaseNamemembaca 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
PDFiumLazmenyediakanTPdf,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 terkaitFLAT_* / FLATTEN_*kini tercakup diTPdf,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.AddTextkini 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: memanggilGenerateFormAppearancessetelah memodifikasi nilaiFormField[]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) danTPdfView(FlattenPageuntuk 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\FormFilluntuk 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 terkompresiFlateDecodesaat menyimpan, secara signifikan mengurangi ukuran file untuk PDF yang dihasilkan secara programatik. Aplikasi yang memerlukan keluaran polos tanpa kompresi dapat menetapkanCompressedke False sebelum memanggilSaveAs
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.dlldanpdfium.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