Ghi chú phát hành PDFium Delphi Component
Lịch sử phiên bản cho các tính năng người dùng thấy của PDFium Delphi Component, bản sửa lỗi, cải tiến trình xem, tạo tài liệu, xuất PDF/A, rendering và cập nhật tài liệu
Phát hành mới nhất
- Phiên bản mới nhất: 3.117.0; Ngày phát hành:
Version 3.117.0
Đã thêm (Added)
- Phát hiện bảng giờ đây đọc được cả đường kẻ lẫn vùng đổ bóng vẽ dưới dạng hình chữ nhật đặc: một khối đặc có độ dày không vượt quá
MaxRulingThicknessmới sẽ được tính là một đường kẻ, còn khối đặc lớn hơn thì đóng góp các cạnh của nó vào lưới, nhờ vậy những bảng xuất ra từ Word, Google Docs và trình duyệt nay được nhận diện thành lưới kẻ có hàng tiêu đề gộp thay vì các mảnh khoảng trắng.DetectFilledRulingstắt hành vi này - Tọa độ đường kẻ được căn khớp trong phạm vi
RulingSnapTolerancetrước khi lưới được ghép lại, nhờ đó các mảnh viền từng ô, viền đôi và các ô đổ bóng cách nhau một khe hở nhỏ được nối thành một bảng - Các đường kẻ nằm trong form XObject cũng tham gia phát hiện thông qua ma trận đối tượng kết hợp, được bật/tắt bằng
IncludeFormXObjects ExtractDocumentTablesnối các mảnh continuation kết thúc nơi nội dung trang kết thúc và chạy tiếp nơi nội dung trang kế bắt đầu, chứ không chỉ những mảnh chạm mép trang, và vẫn giữ một hàng tràn duy nhất như một phần của chuỗi- TableExtractionLab hiển thị
DetectFilledRulingstrên panel tùy chọn ở cả ba bản Delphi, Lazarus và C++Builder
Đã thay đổi (Changed)
- Phát hiện theo khoảng trắng bỏ qua các từ đã thuộc về một lưới kẻ, đồng thời yêu cầu mọi biên cột phải là một hành lang không chứa văn bản chạy suốt các hàng mà nó phân tách, nhờ vậy đoạn văn căn đều hai bên và danh sách gạch đầu dòng không còn bị báo nhầm là bảng
- Một ứng viên continuation có hàng đầu tiên chỉ là một ô trải hết chiều ngang sẽ được coi là một bảng mới có tiêu đề riêng thay vì phần còn lại của bảng trước đó
MinRowschấp nhận giá trị 1 cho lưới kẻ; phát hiện theo khoảng trắng vẫn giữ mức sàn hai hàng, và ngân sáchMaxRulingSegmentsmặc định tăng lên 16384 vì các khối viền từng ô xuất hiện với số lượng lớn hơn hẳn các đường lưới vẽ bằng nét- Văn bản trong ô được ghép từng dòng từ các word box chồng lấp lên nhau, nhờ đó những từ có glyph box cao thấp khác nhau vẫn giữ đúng thứ tự từ trái sang phải
TPdf.AboutInfo, metadata của package Lazarus và metadata phiên bản của installer báo 3.117.0
Version 3.116.4
Đã thêm (Added)
- TableExtractionLab có thêm xử lý hàng loạt theo thư mục:
Batch folderchạyExtractDocumentTablestrên mọi PDF trong thư mục được chọn, liệt kê số bảng của từng tài liệu, đánh dấu các tài liệu thiếu lớp văn bản để OCR, và không để các tệp hỏng hay bị khóa làm gián đoạn cả lượt chạy Export all CSVghi mọi bảng phát hiện được thành tệp<document>-<n>-page<p>-t<i>.csvtrong thư mục contableskhi chạy hàng loạt, hoặc đặt cạnh tài liệu đang nạp với tệp đơn lẻ- Bộ chọn preset nhận diện mở ra các bộ
TPdfTableExtractionOptionsđã tinh chỉnh: Default, Compact columns (MinColumnGap4 kết hợpAlignmentTolerance5 cho các bản xuất chật chội từ trình soạn thảo văn bản), và Compact + wide rows (MaxRowGapFactor6 cho giãn dòng 1.5-2x) - Tài liệu không cho ra bảng nào với preset Default sẽ được thử lại một lần bằng Compact columns ở cả chế độ tài liệu đơn lẫn chạy hàng loạt, và các dòng kết quả hàng loạt cho biết preset nào đã tạo ra kết quả
Đã sửa (Fixed)
- Chạy hàng loạt mở từng tài liệu trong một instance
TPdfriêng thay vì tải lại một component dùng chung, nhờ đó loại bỏ các lỗi tải âm thầm từng biểu hiện thành lỗi component không hoạt động giữa chừng khi chạy qua thư mục
Đã thay đổi (Changed)
TPdf.AboutInfo, metadata của package Lazarus và metadata phiên bản của installer báo 3.116.4
Version 3.116.3
Đã thay đổi (Changed)
- Mẫu TableExtractionLab ở cả ba toolchain nay ghi tài liệu mẫu nó tạo ra ra tệp
TableExtractionSample.pdfcạnh executable của demo thay vì chỉ giữ trong bộ nhớ; khi thư mục không ghi được, lab quay về hành vi giữ trong bộ nhớ như trước và báo điều đó trên dòng trạng thái TPdf.AboutInfo, metadata của package Lazarus và metadata của installer báo 3.116.3
Version 3.116.2
Đã sửa (Fixed)
- Thư viện từng không biên dịch được trên các bản Delphi cũ. Helper tick 64-bit cùng các codec XML trusted-list và production gọi
GetTickCount64vàCP_UTF8từ các unit RTL mà chỉ trình biên dịch mới hơn mới đưa vào, writer HTML reflow nhúng một string literal CSS vượt giới hạn 255 phần tử mà các trình biên dịch ấy áp dụng cho một literal duy nhất, còn phần merge XFA datasets gán chéo giữaTBytesvà một trường dynamic array thường — điều các trình biên dịch trước XE7 từ chối. Giờ đây trình biên dịch cũ bindGetTickCount64trực tiếp từ kernel32 và tự khai báoCP_UTF8khi RTL không có, style sheet được phân phối dưới dạng các literal ngắn nối lại với nhau, và payload của packet được sao chép theo từng phần tử
Đã thay đổi (Changed)
TPdf.AboutInfo, metadata của package Lazarus và metadata của installer báo 3.116.2
Version 3.116.1
Đã thêm (Added)
Demo\Delphi\TableExtractionLab,Demo\CBuilder\TableExtractionLabvàDemo\Lazarus\TableExtractionLabgói việc phát hiện bảng vào một workflow duy nhất. Lab dựng một tài liệu mẫu gồm một bảng có kẻ với các ô tiêu đề gộp, một bảng căn theo khoảng trắng không có đường kẻ, và một bảng dài bị ngắt qua ranh giới trang, sau đó chạyExtractTableshoặcExtractDocumentTablesvà liệt kê hàng, cột, span, cờ tiêu đề, chế độ phát hiện, độ tin cậy cùng các nhóm continuation- Lab xuất bảng đang chọn qua
TPdfTable.ToCsvvàTPdfTable.ToJson, chỉnhDetectRuledTables,DetectWhitespaceTables,DetectContinuationsvàMinConfidencengay trên panel tùy chọn, và copy toàn bộ báo cáo vào clipboard TPdf.AboutInfo, metadata của package Lazarus và metadata phiên bản của installer báo 3.116.1
Version 3.114.21
Đã sửa (Fixed)
- Xác thực PDF/A từng báo tham chiếu tệp ngoài với mọi tài liệu có chứa annotation. ISO 19005-1 §6.1.7 cấm
/F,/FFiltervà/FDecodeParmstrong dictionary của stream object, nhưng check này lại rà những tên đó trên toàn bộ tệp, mà/Fcũng chính là khóa cờ annotation mà §6.5.3 yêu cầu mọi annotation phải mang. Giờ đây check chỉ nhìn vào bên trong các dictionary của stream object
Version 3.114.20
Đã sửa (Fixed)
- Chữ ký RSASSA-PSS mang tham số thuật toán dị dạng trên cả ba backend ký. RFC 4055 tag cả bốn trường của RSASSA-PSS-params; độ dài salt bị ghi như một số nguyên trần, khiến parser đọc nhầm đó là điểm bắt đầu của một trường khác, còn trường trailer bị ghi ra dù giá trị của nó trùng với mặc định mà DER yêu cầu phải bỏ đi. Verifier hoặc không parse được tham số, hoặc rơi về salt mặc định 20 byte trong khi chữ ký dùng 32, nên chữ ký PSS bị từ chối. Chữ ký PKCS#1 v1.5 và ECDSA không bị ảnh hưởng
Version 3.114.19
Đã sửa (Fixed)
- Yêu cầu timestamp với một digest khác SHA-256 tạo ra request tuy khai báo thuật toán đó nhưng lại mang digest SHA-256 — thứ mà timestamp authority hoặc từ chối, hoặc tệ hơn, đóng dấu đúng như bản gửi. Thư viện chỉ tính SHA-256, nên mọi định danh khác giờ bị từ chối thẳng; định danh rỗng vẫn chọn mặc định SHA-256. Mẫu PDF Viewer cho Lazarus và C++Builder cũng từng bind một handler mở rộng bookmark mà form file có nhắc tên nhưng code không định nghĩa — điều này gây lỗi khi form được nạp; handler đã được port từ mẫu Delphi
Version 3.114.18
Đã sửa (Fixed)
- Các mẫu XFA Lab và XFDF Lab cho Delphi cùng mẫu XFA Lab cho Lazarus gặp lỗi ngay khi khởi động. Mỗi mẫu dựng controls của mình từ create handler của form, nhưng form resource vừa không có mặt vừa không được link, nên việc tạo main form phát sinh lỗi resource-not-found và handler không bao giờ được chạy. Cả ba nay đều kèm form file cùng directive nhúng nó
Version 3.114.17
Đã sửa (Fixed)
- Hai resource native bị xử lý sai khi một thao tác fail giữa chừng. Render thumbnail gặp lỗi giải phóng bitmap đích trước khi đóng native render, và khi render đang vẽ thẳng vào pixel của chính bitmap đó, phần teardown lúc này đọc phải vùng nhớ đã được giải phóng. Một lần cấp phát bitmap thất bại trong
AddBitmapđể lại object image vừa tạo ra không chủ sở hữu và không còn đường nào với tới nó
Version 3.114.16
Đã sửa (Fixed)
- Đọc văn bản FDF cho ra ký tự sai với các điểm mã trên
0x7E. Bảng PDFDocEncoding trong Phụ lục D.2 của ISO 32000-1 bắt đầu tại0x80bằng dấu bullet, nhưng bảng mapping lại bắt đầu từ0x7F, nên cả khối cho tới0x9Fbị lệch một bậc: dagger đọc thành bullet, em dash thành ellipsis, và cứ thế cho tới zcaron — ký tự này thì rơi hẳn khỏi cuối bảng. Dấu Euro tại0xA0cũng bị mất và trả về dưới dạng no-break space. Tên và giá trị trường trong FDF nhập vào nay decode đúng
Version 3.114.15
Đã sửa (Fixed)
- Xác thực trust trên một tài liệu mà trailer hoặc catalog không đọc được đã ghi tràn qua cuối mảng. Trong trường hợp đó, bước compliance bỏ cuộc mà không ghi nhận chữ ký nào, trong khi collector chạy ngay sau đó làm việc trực tiếp trên byte stream và vẫn có thể tìm thấy các signature dictionary, nên mỗi dictionary tìm được lại được ghi một entry vào một mảng chẳng có chỗ nào. Số lượng nay được kẹp đúng bằng những gì bước compliance tạo ra
Version 3.114.14
Đã sửa (Fixed)
- Thực thi một kế hoạch sửa PDF/A từng áp dụng cả những bước mà planner đã chặn. Một bước bị chặn khi tài liệu mang chữ ký, bước đó sẽ làm mất hiệu lực chữ ký, và caller không cho phép điều đó; executor chỉ kiểm tra safety level của bước — thứ không diễn tả được điều kiện trên — nên một tài liệu có chữ ký có thể bị vô hiệu hóa chữ ký bởi một repair tự động mà kế hoạch đã từng từ chối. Các bước bị chặn nay được bỏ qua và được đếm là skipped
Version 3.114.13
Đã sửa (Fixed)
- Thêm signature timestamp vào một giá trị CMS mà tập chứng chỉ của nó lớn hơn 127 byte — tức là mọi chứng chỉ thật — làm hỏng kết quả. Helper định vị điểm bắt đầu của một cấu trúc lồng nhau đi lùi qua các length octet và nhầm octet cuối thành octet đầu, nên lát cắt nó tạo ra bắt đầu xa trước cả cấu trúc được yêu cầu. Độ dài header nay được suy ra từ độ dài nội dung — điều DER mô tả rõ ràng không thể lẫn lộn. Self-checks không bắt được lỗi này vì các chứng chỉ fixture của chúng nhỏ đủ để dùng dạng ngắn
Version 3.114.12
Đã sửa (Fixed)
- Các signed attribute được phát ra theo thứ tự chúng được dựng chứ không sắp theo encoding, điều X.690 §11.6 yêu cầu với một DER SET OF. Verifier mà encode lại tập attribute trước khi băm — như OpenSSL và BouncyCastle đều làm — vì thế tính ra một digest khác và báo một chữ ký PAdES hoàn toàn hợp lệ là không hợp lệ. Chữ ký mà thư viện này tạo ra giờ verify được trên các stack đó; xác thực qua lớp Windows không bị ảnh hưởng vì nó băm các byte nhận được nguyên trạng
Version 3.114.11
Đã sửa (Fixed)
- Một DER INTEGER âm rộng hơn hai byte nội dung bị encode với giá trị sai. Writer mô phỏng arithmetic shift bằng cách bơm lại bit dấu sau một logical shift, nhưng mask nó dùng lại bật mọi bit phía trên byte thấp thay vì chỉ riêng byte mà phép shift vừa để trống, nên phần magnitude còn nằm trong các byte phía sau bị ghi đè. Ví dụ, giá trị -100000 bị encode thành -34464. Nonce của timestamp request và mọi signed integer khác cỡ đó nay encode đúng
Version 3.114.10
Đã sửa (Fixed)
- Xác thực PDF/A chưa bao giờ báo được phần constant alpha của quy tắc transparency trong ISO 19005-1 §6.4. Helper dựng khóa tìm kiếm bằng cách thêm một solidus làm tiền tố, mà caller cũng đã truyền sẵn một cái, nên nó đi tìm
//CAvà không khớp gì cả. Cả hai check alpha khi đó cũng chỉ chấp nhận đúng hai chuỗi1và1.0, khiến một/CA 1.00đục hoàn toàn bị coi là vi phạm; giờ đây giá trị một được nhận diện bất kể cách viết
Version 3.114.9
Đã sửa (Fixed)
- URI action ở cấp trang trả về văn bản bị hỏng. Path trả về từ lớp native dưới dạng các byte UTF-8 và bị ghi thẳng vào một wide string — thứ ghép các byte thành code unit 16-bit và để phần còn lại của buffer giữ nguyên thứ nằm sẵn trong bộ nhớ.
GetPageActionURInay decode các byte theo cùng cách mà luồng action cấp tài liệu vẫn làm
Version 3.114.8
Bảo mật (Security)
- Trên các target khác Windows, các byte ngẫu nhiên đứng sau mọi khóa mã hóa, salt và initialisation vector đến từ PRNG của runtime, vốn có seed là một hằng số trừ khi chương trình gọi
Randomize. Vì thế mỗi process đều sinh ra cùng một khóa mã hóa tệp, cùng các salt/UEvà/OE, cùng các byte/Permsvà cùng các nonce AES-GCM — điều khiến output mã hóa từ một bản build Free Pascal trên Linux hay macOS có thể khôi phục một cách dễ dàng, đồng thời lặp lại một nonce GCM dưới một khóa cố định. Các byte nay lấy từ/dev/urandom, và khi kernel pool không khả dụng sẽ raise thay vì fallback, đúng như cách mộtCryptGenRandomkhông khả dụng đã làm trên Windows
Version 3.114.7
Đã sửa (Fixed)
- Một object stream dị dạng có thể khiến các entry point nén và sửa chữa đọc tràn qua cuối buffer đã decode. Các member offset mà stream khai báo nay được kiểm tra phạm vi và thứ tự tăng dần ngay khi header được parse, số lượng member khai báo lớn hơn sức chứa của header bị từ chối trước khi bất kỳ vùng nhớ nào được cấp phát, và byte range của từng member được xác thực trước — chứ không phải sau — khi khoảng trắng cuối của nó được cắt bỏ
Version 3.114.6
Đã sửa (Fixed)
- Đưa inline image ra ngoài tạo ra một image XObject không dùng được. Dictionary bị ghi kèm một dấu solidus thừa trước khóa đầu tiên, mở ra một tên rỗng và đẩy mọi khóa dồn lên giá trị của khóa đứng trước, còn bảng viết tắt inline lại map Decode thành
Gthay vìD, nên mảng/Dbị bỏ rơi và chữ viết tắt giá trị DeviceGray bị nhầm thành một khóa. Ảnh được tách khỏi content stream nay mang một dictionary đúng chuẩn và giữ lại mảng Decode của mình
Version 3.114.5
Đã sửa (Fixed)
- Shaper HarfBuzz gán cluster length cho sai glyph trong các run viết từ phải sang trái, đồng thời cho các glyph dùng chung một cluster — như dấu thanh và thành phần ligature — một độ dài bằng một.
ClusterLengthcủa mỗi glyph nay trải từ điểm bắt đầu cluster của nó tới cluster kế tiếp theo thứ tự logic, bất kể run chạy theo hướng nào, nên ánh xạ ký tự sang glyph cho văn bản Ả Rập và Hebrew khớp với những gì backend Uniscribe báo
Version 3.114.4
Đã sửa (Fixed)
- Transport timestamp dùng libcurl truyền các option số và đọc mã trạng thái HTTP dưới dạng giá trị 32-bit, trong khi libcurl nhận và trả về một
longkiểu C — 64 bit trên Linux và macOS. Truy vấn trạng thái có thể ghi đè bốn byte nằm cạnh đích của nó trên stack, còn giá trị option thì phụ thuộc vào nửa trên của register đang chứa gì. Cả hai nay dùng độ rộnglongcủa nền tảng, nênFPdfTsaFpcchạy chuẩn trên các target LP64
Version 3.114.3
Đã sửa (Fixed)
- Backend PKCS#11 copy thẳng các byte thô của nhãn token object vào một string — thứ trên Delphi đặt các byte UTF-8 lên các code unit UTF-16. Vì vậy một chứng chỉ chọn qua
TPdfPkcs11Options.CertificateLabelkhông bao giờ khớp được, vàEnumerateCertificatesbáoLabelTextlỗi font. Nhãn nay được decode theo UTF-8 như chuẩn định nghĩa, và PIN đưa choC_Loginđược encode dưới dạng UTF-8 thay vì bị thu hẹp qua codepage của máy chủ, nên một PIN non-ASCII tới token nguyên vẹn
Version 3.114.2
Đã sửa (Fixed)
- Signer macOS Keychain hỏi
SecKeyIsAlgorithmSupportedvề một thao tác sai khi quyết định khóa có chấp nhận RSASSA-PSS hay không: truy vấn nêu thao tác decrypt thay vì sign, nên câu trả lời luôn là không và mọi chữ ký RSA lặng lẽ rơi về PKCS#1 v1.5. Khóa hỗ trợ PSS nay ký bằng PSS đúng nhưTPadesSignerOptions.PaddingSchemeyêu cầu, và tham số thao tác được truyền với độ rộng mà framework khai báo
Version 3.114.1
Đã sửa (Fixed)
- Các cặp ngoặc lồng nhau trong văn bản viết từ phải sang trái được phân giải theo hướng sai. Quy tắc BD16 của UAX #9 xử lý các cặp theo thứ tự dấu ngoặc mở xuất hiện, và một cặp được N0 phân giải trở thành ngữ cảnh mạnh đi trước cho cặp mở sau nó; các cặp khi đó lại được xử lý theo thứ tự dấu ngoặc đóng kết thúc chúng, nên một cặp bên trong có thể bám theo chữ nó bao quanh thay vì ngữ cảnh mà cặp ngoài thiết lập. Văn bản như một câu Ả Rập hay Hebrew chứa chú thích trong ngoặc có ngoặc lồng nhau nay được dàn trang đúng như người đọc mong đợi
Version 3.114.0
Đã thêm (Added)
FPdfCryptoSslxác thực chữ ký PDF và timestamp token qua OpenSSL, lấp khoảng trống nền tảng cuối cùng của xác thực chữ ký: Linux trước đây chẳng có backend xác thực CMS nào cả.ConfigureSslCmsVerifiercài backend này, libcrypto được resolve theo tên lúc chạy nên không có gì bị link cứng vào nó, và cả hai dòng 1.1 lẫn 3.x đều bind được- Chữ ký và chuỗi chứng chỉ được đánh giá ở các pass riêng biệt, nhờ đó một chữ ký tốt nằm dưới một chuỗi không với tới trust anchor được báo là chữ ký hợp lệ nhưng trust không hợp lệ, thay vì bị coi là chữ ký hỏng
ConfigureSslTrustAnchorsthêm các DER trust anchor vào system store, vàConfigureSslCrlscung cấp các CRL mà bước kiểm tra thu hồi có thể tra cứu. Revocation chỉ được tính là đã kiểm tra khi một CRL thực sự có mặt, vì OpenSSL tự nó không fetch cái nào; khi không cung cấp gì, kết quả báo unsupported thay vì cho qua một chuỗi chưa hề được kiểm traSslAvailable,SslMissingSymbols,SslLibraryPath,SslLibraryVersionvàSslAbiLayoutcho biết cái gì đã bind và cái gì chưa, cònConfigureSslLibraryPathtrỏ backend tới một thư viện cụ thể khi các mặc định của nền tảng không tìm được
Version 3.113.0
Đã thêm (Added)
TPdfKeychainCmsVerifierxác thực chữ ký PDF và timestamp token trên macOS quaCMSDecodervà SecTrust, nhờ vậy xác thực chữ ký không còn là độc quyền của Windows.ConfigureKeychainCmsVerifiercài nó, và cùng unit đó nay phủ cả hai nửa của hỗ trợ macOS, y nhưFPdfCryptoWinlàm với Windows- Kiểm tra thu hồi được tôn trọng: khi được yêu cầu, một revocation policy tham gia cùng policy X.509 cơ bản, và tắt retrieval trực tuyến sẽ giới hạn việc đánh giá trong các phản hồi cached. Các checkpoint tiến trình phát cho các giai đoạn chữ ký, chuỗi, retrieval trực tuyến và revocation đúng như backend Windows báo
KeychainVerificationAvailablebáo khả năng xác thực tách riêng khỏi khả năng ký, vì hai thứ này cần những framework symbol khác nhau và cái này có thể có mặt mà không cần cái kia
Version 3.112.0
Đã thêm (Added)
FPdfCryptoMacký PAdES bằng một identity Keychain macOS — đối tác của certificate store Windows: chứng chỉ và khóa riêng lấy từ Keychain và chữ ký được tạo ra bởiSecKeyCreateSignature, nên khóa không bao giờ rời khỏi keystore của hệ thống.ConfigureKeychainSignerProvidercài nó, và không cần deploy thêm module nào kèm theo ứng dụng như backend token PKCS#11 vốn đòi hỏi- Signer đi theo chứng chỉ: khóa EC ký ECDSA, khóa RSA ký RSASSA-PSS, và ở những chỗ PSS không khả dụng — một macOS cũ, hoặc một khóa không chấp nhận nó — padding rơi về PKCS#1 v1.5 và AlgorithmIdentifier phát ra nói đúng như vậy thay vì nhận là PSS
KeychainMissingSymbolsliệt kê mọi framework symbol không resolve được, nhờ đó một bản triển khai báo backend không khả dụng có thể phân biệt được framework vắng mặt với một cái tên mà binding này gọi sai
Version 3.111.0
Đã thêm (Added)
ConfigurePadesCmsVerifiercài backend xác thực CMS mà validator PAdES dùng, nhờ vậy xác thực chữ ký và timestamp không còn bị trói vào Windows.IPdfCmsVerifierkhai báo hai thao tác mà một backend trả lời — detached cho chữ ký PDF, attached cho timestamp token — vàPadesCmsVerificationAvailablebáo có backend nào hiện diện hay không
Đã thay đổi (Changed)
- Các record kết quả xác thực và tùy chọn chuyển sang
FPdfCryptovới tênTPdfCmsVerify*. Các tênTWinCmsVerify*vẫn được giữ làm alias, nên code hiện có vẫn chạy và một backend cắm vào dùng chung các kiểu với backend Windows - Hành vi trên Windows không đổi: khi chưa cài verifier nào, nó vẫn dùng CryptoAPI, và các checkpoint tiến trình, tùy chọn revocation cùng các mã lỗi native giữ nguyên. Ở những chỗ không backend nào trả lời, mọi kết luận đều báo unsupported thay vì bị bỏ qua không kiểm
Version 3.110.0
Đã thêm (Added)
FPdfPkcs11ký PAdES bằng một key nằm ngay bên trong token PKCS#11.ConfigurePkcs11SignerProvidercài nó làm signing backend, module được nạp lúc chạy theo đường dẫn nên không phải link thứ gì, và cùng một mã nguồn đó chạy được trên Windows, Linux lẫn macOS. Phần liệt kê token mà interfaceIPdfPkcs11SignerProviderkhai báo cũng được hiện thực kèm theo: slots, token và các certificate mà mỗi cái đang giữ- Ký ở ngoài Windows với trường hợp thông thường không còn cần provider do host cung cấp nữa: một token module cộng với
TPdfPkcs11Optionslà đủ. RSA PKCS#1 v1.5, RSASSA-PSS và ECDSA đều được thực hiện thông qua token FPdfSha1thêm SHA-1 cho đúng một mục đích: so khớp certificate theo thumbprint màTPadesSignerOptionsmang theo. Trên Windows việc đó được giải ngay trong certificate store; còn token thì trả về các byte của certificate và để việc so khớp lại cho caller. Nó không phải digest dùng để ký, và toàn bộ stack PAdES vẫn ký bằng SHA-256 như cũ
Đã thay đổi (Changed)
- Các helper DER của certificate — đọc OID của thuật toán public key, tách issuer và serial, bọc lại signature ECDSA thô — đã chuyển từ backend Windows sang
FPdfCmsđể mọi signing backend đều với tới được
Version 3.109.0
Đã thay đổi (Changed)
- Loader thư viện native không còn dành riêng cho Windows.
LibraryNamemặc định thànhpdfium.dll,libpdfium.sohaylibpdfium.dylibtùy target, bản V8 được tìm theo tên tương ứng, còn việc nạp thư viện và bind symbol đi qua loader portable trên Free Pascal. Hành vi trên Windows giữ nguyên, kể cả layout triển khai Win32/Win64 lẫn diagnostic báo lệch kiến trúc - Thư mục triển khai trên các target khác theo đúng kiểu viết
<cpu>-<os>mà các unit đã biên dịch đang dùng, nênDLLs/x86_64-linux/libpdfium.sonằm cạnhLib/FPC/x86_64-linux. Nhánh fallback sang thư mục hệ thống vẫn chỉ có trên Windows; ở nơi khác loader tự tìm qua search path
Version 3.108.0
Đã thêm (Added)
TPdfHarfBuzzTextShapershape văn bản bidirectional và chữ viết phức tạp trên các target Free Pascal không có Uniscribe. Nó giải embedding level bằngFPdfBidi, chia run theo script, shape từng run bằng libharfbuzz rồi xếp các run theo thứ tự hiển thị. Cài bằngConfigureTextShaper; libharfbuzz được resolve lúc chạy vàHarfBuzzAvailablebáo thẳng thắn khi nó vắng mặt- Shaper không tự liệt kê font. Uniscribe đọc binary của font từ device context — thứ không có gì tương đương trên môi trường portable — nên host truyền vào một
TPdfFontDataResolverđể map tên font sang các byte của file font, giữ đúng chỗ cho chính sách đó
Version 3.107.0
Đã thêm (Added)
FPdfBidihiện thực Unicode Bidirectional Algorithm (UAX #9) bằng Pascal thuần:PdfResolveBidiLevelstrả về một embedding level cho mỗi UTF-16 code unit,PdfBidiVisualOrderáp dụng phép sắp xếp lại L2, cònPdfBidiClassOfcho biết Bidi_Class của một code point. Các rule P2-P3, X1-X10, W1-W7, N0-N2, I1-I2 và L1-L2 đều được phủ hết, gồm cả isolate initiator và cặp bracket BD16- Unit này trung lập với compiler lẫn platform, và chính điều đó cho phép dàn văn bản bidirectional ở những nơi không có Uniscribe. Shaping engine resolve glyph cho một run mà hướng của nó đã biết sẵn, nên mảnh ghép phải quyết định hướng trước tiên chính là cái này
Version 3.106.0
Đã thêm (Added)
ConfigureTextShapercài text shaping backend mà toàn thư viện đi qua, kèm theo đó làActiveTextShaper,ActiveTextShaperNamevàClearTextShaper. CảShapePdfTextlẫnTPdf.AddShapedTextgiờ đều dùng shaper đã cài thay vì tự tạo một cái Uniscribe trực tiếp, nên host có thể cấp engine riêng của mình và test có thể cấp một cái deterministic
Đã thay đổi (Changed)
FPdfTextShapingbiên dịch được trên các target ngoài Windows: backend Uniscribe giờ là default theo platform thay vì là implementation duy nhất, và bị giới hạn trong bản build Windows. Ở những nơi không có backend nào, các entry point shaping sẽ báo điều đó thay vì lỗi biên dịch
Version 3.105.1
Bảo mật (Security)
- Response timestamp giờ bị chặn giới hạn 4 MB trên cả hai transport. Trước đây một TSA cứ gửi mãi có thể làm receive buffer phình ra không kiểm soát, biến một lời gọi ký thành việc tiêu thụ bộ nhớ không giới hạn
Version 3.105.0
Đã thêm (Added)
- Timestamping RFC 3161 chạy được trên các target Free Pascal ngoài Windows: backend libcurl mới gửi TimeStampReq và đọc TimeStampResp, nên
PadesTsaAvailablebáo True và PAdES B-T, B-LT, B-LTA lấy được token ở đó. libcurl được resolve lúc chạy, không phải build-time dependency; khi nó vắng mặt, backend báo unavailable y như bản WinHttp. Windows vẫn dùng WinHttp và không bị ảnh hưởng - Ký trên các target đó vẫn cần key material mà thư viện không sở hữu: cấp nó qua
ConfigurePadesSignerProvidervới mộtIPadesSignerProvider(hoặcIPdfPkcs11SignerProvidercho key nằm trên token), vìFPdfCryptoWinchỉ chạy trên Windows
Version 3.104.1
Đã thêm (Added)
- Sample XFA inspection lab giờ có sẵn cho Lazarus luôn, nên các probe capability của XFA, liệt kê packet, export packet và fallback
OnXfaRuntimeMissingđều chạy thử được từ bản build LCL
Version 3.104.0
Đã thay đổi (Changed)
- Thư viện biên dịch sạch, không còn các diagnostic tránh được trên Free Pascal 3.2: timing nội bộ đọc tick millisecond từ
GetTickCount64thay cho lời gọi 32-bit đã deprecated, các accessor control-word SSE bị deprecated được thay bằngGetMXCSRvàSetMXCSR, offset basis của content fingerprint được khai báo kiểu tường minh để không còn vướng compile-time range check, và địa chỉ scanline được so sánh như pointer unsigned khi kiểm tra bitmap có phải bố cục top-down hay không
Version 3.103.1
Đã sửa (Fixed)
- Metadata tài liệu đưa vào XMP giữ nguyên ký tự non-ASCII trên Free Pascal: title, author, subject, keyword và tên creator đi tới
SaveAsPdfA,SaveAsPdfUa,SaveAsPdfE,SaveAsPdfX,SaveAsPdfRvàSaveAsPdfVTgiờ được chuyển qua codepage của string thay vì copy nguyên byte, nên packet metadata vẫn là UTF-8 hợp lệ như ISO 19005-1 6.7.2 yêu cầu, kể cả khi host không chạy trên codepage UTF-8 - Export XFDF, round-trip production metadata và parse XML trusted-list dùng cùng cơ chế chuyển đúng codepage đó, nên text di chuyển giữa
TBytesvàstringkhông còn phụ thuộc codepage của host
Version 3.103.0
Đã thêm (Added)
TPdfEuropeanTrustedListparse European trusted list đã xác thực, nạp lại cache có checksum qua đúng authenticator đó, nhận update source do caller cung cấp, cho biết các trust anchor hiện hành, và đánh giá qualified signature service tại thời điểm validation được yêu cầuTPadesTrustValidationOptions.QualifiedTrustEvaluatoráp chính sách qualified-trust offline lên từng signer được validate mà không thêm khả năng truy cập mạng nào cho PAdES validator
Version 3.102.0
Đã thêm (Added)
BeginIncrementalSavevàCommitIncrementalSavegiờ nối thêm revision đã xác thực vào tài liệu mã hóa AES-256 mà vẫn giữ nguyên tham chiếu/Encryptgốc, các security parameter, generation của object chính xác từng chút một, và toàn bộ byte có sẵn trước đó
Đã thay đổi (Changed)
- Overload commit file giờ flush bền vững rồi mở lại nghiêm ngặt một side file cùng thư mục, kiểm tra biên revision của nó, và thay thế target một cách atomic, đồng thời rollback session sau bất kỳ lỗi nào
Version 3.101.0
Đã thay đổi (Changed)
SaveAsRedactedgiờ giữ lại phần an toàn của text chỉ giao nhau một phần, các path hình chữ nhật và ảnh thẳng theo trục, rồi dọn các tên resource không còn được tham chiếu bởi page, Form XObject, pattern, appearance và các phạm vi resource lồng nhau
Version 3.100.0
Đã thay đổi (Changed)
OptimizeImagesgiờ chọn resampling box, bilinear, bicubic, Lanczos hay bilevel dựa trên tỉ lệ thu phóng, loại nội dung, mức chi tiết đo được và quality do caller chỉ định, với filtering có tính đến alpha và ngân sách working memory chặt chẽ
Version 3.99.0
Đã thêm (Added)
GraftPdfAcroFormimport field AcroForm phân cấp, widget, appearance, calculation order, default resource, action và value thông qua page mapping tường minh và chính sách xử lý trùng tênTPdfCrossDocumentGraftMaptái sử dụng indirect object đã import theo định danh nguồn, đồng thời giữ nguyên cycle, tham chiếu chia sẻ, generation nguồn chính xác và ngữ nghĩa thất bại kiểu transactional
Version 3.98.0
Đã thêm (Added)
TPdfOutlineEditortạo, di chuyển, xóa, định dạng, mở rộng và trỏ lại đích cho outline item, map lại explicit destination theo kết quả page-plan, và nối thêm một revision incremental được verify độc lập
Version 3.97.0
Đã thêm (Added)
TPdfTreeEditorđọc, validate, cập nhật, cân bằng, tách, gộp, serialize và lưu tăng dần mọi cấu trúc NameTree và NumberTree PDF tùy ý, đồng thời giữ lại indirect reference dùng được và giá trị entry thô
Version 3.96.0
Đã thêm (Added)
TPdfParserResourceBudgetcung cấp một chính sách thread-safe cấp process cho recursion, token, object, byte đã giải mã, expansion ratio, allocation và deadline dùng chung cho các PDF parser tùy biến, kèm snapshot bất biến theo từng thao tác và default cấu hình được
Version 3.95.0
Đã thay đổi (Changed)
ValidatePdfXgiờ validate các dictionary PDF/X đang hoạt động, metadata, output intent, font, tính năng bị cấm, transparency, color space và page box thông qua phép đọc sparse có giới hạn trên các tài liệu không mã hóa có xref hợp lệ
Version 3.94.0
Đã thay đổi (Changed)
ValidatePdfRgiờ validate các dictionary PDF/R đang hoạt động, page, image filter, metadata và footer marker thông qua phép đọc sparse và theo cửa sổ có giới hạn trên các tài liệu không mã hóa có xref hợp lệ
Version 3.93.0
Đã thay đổi (Changed)
ValidatePdfEgiờ validate các dictionary PDF/E đang hoạt động, metadata, output intent, form và tính năng bị cấm thông qua phép đọc sparse có giới hạn trên các tài liệu có xref hợp lệ
Version 3.92.0
Đã thay đổi (Changed)
ValidatePdfVTgiờ thực hiện phân tích nâng cao về phạm vi, khả năng hiển thị, cách bao bọc và cách dùng Form lồng nhau của recurring-XObject thông qua phép đọc sparse có giới hạn trên các tài liệu có xref hợp lệ
Version 3.91.0
Đã thêm (Added)
TPdfSparseDictionaryReadercó thể resolve generation đang hoạt động của một object và giải mã một direct stream dưới giới hạn byte do caller đưa ra
Đã thay đổi (Changed)
ValidatePdfVTgiờ dùng phép đọc sparse có giới hạn cho các bước kiểm tra metadata PDF/VT, DPart, OutputIntent, Info, page và dictionary thường trên đường xref hợp lệ thông thường
Version 3.90.0
Đã thêm (Added)
TPdfSparseDictionaryReadergiữ mở một chỉ mục sparse cho xref và object-stream để đọc đi đọc lại dictionary của indirect object trong giới hạn
Đã thay đổi (Changed)
InjectPdfVTMarkersgiờ validate và giữ nguyên hierarchy DPart PDF/VT sẵn có với phép đọc nguồn có giới hạn, còn hierarchy lỗi cấu trúc vẫn đi qua fallback dựng lại như cũ
Version 3.89.0
Đã thêm (Added)
ReadPdfSparsePageDictionariestrả về định danh page object và các byte dictionary trong giới hạn theo thứ tự page tree thông qua chỉ mục object sparse
Đã thay đổi (Changed)
InjectPdfVTMarkersgiờ tự dựng hierarchy DPart PDF/VT và nối thêm marker object với phép đọc nguồn có giới hạn khi PDF đã lưu chưa chứa hierarchy DPart nào
Version 3.88.0
Đã thêm (Added)
ReadPdfSparseCatalogSubDictđọc sub-dictionary của catalog ở dạng direct lẫn indirect thông qua chỉ mục object sparse, được dùng bởi cơ chế chèn marker PDF/UA choMarkInfovàViewerPreferences
Đã thay đổi (Changed)
InjectPdfUaMarkersgiờ resolveMarkInfovàViewerPreferencescủa catalog qua sparse lookup và nối revision PDF/UA với phép đọc nguồn có giới hạn trên đường xref thông thường
Version 3.87.0
Đã thêm (Added)
AppendPdfSparseUpdateghi một revision sparse lên PDF đã lưu theo kiểu stream: byte nguồn nguyên vẹn, thân object do caller cung cấp tại các offset đã ghi nhận, và một khối xref/trailer incremental duy nhất nối qua/PrevNormalizePageViewRectchuẩn hóa hai góc bất kỳ trong không gian page đã map thành hình chữ nhật hiển thị được kẹp trong page, hoặc báo rằng không có gì của page đang hiển thị- Cơ chế chèn marker PDF/E tự dựng một Info object mới với
/ISO_PDFEVersionkhi tài liệu nguồn không có dictionary Info
Đã thay đổi (Changed)
- Chèn marker PDF/E, PDF/X và PDF/R giờ resolve catalog, Info và trailer qua sparse lookup, nối revision qua
AppendPdfSparseUpdatevới phép đọc nguồn có giới hạn trên đường xref thông thường - Callback form-fill
FFI_GetPageViewRectgiờ báo phần page thực sự hiển thị trongTPdfViewđược gắn vào thay vì luôn là toàn bộ page box, và quay về kích thước page cho các tài liệu headless TPdf.AboutInfo, metadata của Lazarus package và metadata của installer giờ cùng báo Version 3.87.0 một cách nhất quán
Đã sửa (Fixed)
- Các control point của path segment được expose từ khi có binding
FPDFPath_GetBezierControlPointschưa bao giờ được điền giá trị: export native chỉ trả lời cho index endpoint của mỗi cubic ba phần tử, nên phép truy vấn giờ thực hiện một lần mỗi đường cong và cả ba phần tử đều mang control point của đường cong đó
Version 3.86.0
Đã thêm (Added)
ReadPdfSparseRevisionInfocung cấp các thông tin trong giới hạn về revision mới nhất, catalog, mã hóa, document ID và cấu trúc tagged cho các stream postprocessorComposePdfSparseUpdateIdgiữ lại hoặc suy ra định danh tài liệu cho incremental update mà không cần dựng toàn bộ PDF nguồn
Đã thay đổi (Changed)
InjectPdfAMarkersgiờ resolve catalog và trailer qua sparse lookup, copy đầu vào lớn theo từng chunk có giới hạn, và nối revision PDF/A mà không cấp phát mảng byte cỡ tài liệu nguồn trên đường xref thông thường- Chèn marker PDF/A giữ nguyên kiểu output classic hay xref-stream, generation của catalog và Info, định danh trailer, hành vi từ chối khi gặp mã hóa, và các rule hạ cấp Level A
Version 3.85.0
Đã thêm (Added)
SanitiseActiveContentPdfStreamnhận vào một prune workspace do caller sở hữu cho kiểu lưu trữ tùy biến có giới hạn hoặc lưu trên đĩa
Đã thay đổi (Changed)
- Sanitise active content giờ cập nhật catalog và trailer thông qua sparse lookup, cửa sổ parser có giới hạn và copy theo range cỡ cố định, thay vì đọc toàn bộ PDF vào một mảng byte trên đường xref thông thường
TPdf.SaveAsSanitisedáp dụngSaveMemoryLimitvàSaveTemporaryDirectorylên prune workspace của nó và báo các diagnostic khi tràn ra đĩa
Đã sửa (Fixed)
StripMetadata=Truegiờ xóa cả tham chiếu/Infotrong trailer kể cả khi catalog không có entry/Metadata
Version 3.84.0
Đã thay đổi (Changed)
TPdf.PdfVersiongiờ tái sử dụng trạng thái parser của PDFium quaFPDF_GetFileVersionthay vì parse lại toàn bộ PDF nguồn- Truy vấn phiên bản đọc nhiều nhất tám byte header của PDF để tránh việc khai báo catalog lỗi cấu trúc làm tụt phiên bản hiệu dụng
Version 3.83.0
Đã thay đổi (Changed)
PageLabelledPdfStreamgiờ đây phân giải và cập nhật catalog thông qua các cửa sổ stream có giới hạn cùng chỉ mục object dạng sparse lazy- Đầu ra page-label sao chép các PDF nguồn lớn theo từng dải cố định kích thước thay vì cấp phát trọn một mảng byte của tài liệu trên đường xref thông thường
Version 3.82.0
Đã thay đổi (Changed)
ApplyDefaultOpenActiongiờ đây đọc các revision kiểu classic, xref-stream, hybrid và object-stream thông qua chỉ mục object dạng sparse lazy, bao gồm cả những tài liệu có số hiệu object rất cao- Xử lý open-action mặc định dùng cửa sổ cố định kích thước và sao chép theo dải có giới hạn, thay vì nạp trọn PDF vào một mảng byte duy nhất
Version 3.81.0
Đã thêm (Added)
PostProcessSavedPdfchấp nhận ba workspace seekable do caller sở hữu để phục vụ trần bộ nhớ tùy chỉnh và xử lý có hỗ trợ đĩa
Đã thay đổi (Changed)
TPdf.SaveAsáp dụngSaveMemoryLimitvàSaveTemporaryDirectorycho mọi workspace hậu xử lý PDF đã lưu, đồng thời đưa cả phần tràn của chúng vào phần chẩn đoán- Việc sửa xref-stream gia tăng phía native dùng cửa sổ đuôi và từ điển cố định kích thước kèm sao chép theo dải có giới hạn, thay vì mảng byte toàn file và việc cấp phát lại toàn file lặp đi lặp lại
Version 3.80.0
Đã thêm (Added)
ReadAttachmentMetadatanắm bắt tên attachment, mô tả, MIME subtype, kích thước đã giải mã và khả năng đọc được trong một lần duyệt native có giới hạnExtractAttachmentsToStreamsghi một lô vào các stream do caller sở hữu, với giới hạn byte theo từng file lẫn toàn lô, kích thước chunk ghi cấu hình được, hỗ trợ hủy và kết quả cho từng mục
Đã thay đổi (Changed)
- Trích xuất theo lô chỉ giữ tối đa một attachment đã giải mã trong bộ nhớ của PDFiumPas thay vì hiện thực hóa mọi payload trong lô
Version 3.79.0
Đã thêm (Added)
TPdfCacheGovernor,TPdf.CacheBudgetBytes, các truy vấn sử dụng theo từng loại và telemetry phối hợp bộ nhớ cache được giữ lại thông qua một ngân sách byte LRU toàn cục an toàn luồngTPdfTileCachevà cache font hệ thống toàn tiến trình có thể tham gia một governor do caller chọn, với việc hạch toán chính xác bitmap và byte font
Đã thay đổi (Changed)
- Page scene đã phân tích, thumbnail, dữ liệu structure, snapshot văn bản và snapshot page-object giờ đây cùng cạnh tranh trong một ngân sách
TPdfmặc định 256 MiB, đồng thời vẫn giữ nguyên các giới hạn số mục hiện có - Page scene đang hoạt động tiếp tục bị ghim cho đến khi rendering hoàn tất, còn page scene native mờ đục dùng khoản phí ước tính tường minh vì PDFium không cung cấp API nào cấu hình được tổng byte cache
Version 3.78.0
Đã thêm (Added)
TPdfLayoutPagedPlan,TPdfLayoutDocument.BuildPagedPlanvàTPdf.GeneratePagedLayoutstream các lệnh layout vào bộ lưu trữ seekable do caller chọn và hiện thực hóa từng trang một
Đã thay đổi (Changed)
- Layout sinh ra cỡ lớn có thể tràn lệnh sang bộ lưu trữ tạm, giữ một page cache LRU cấu hình được, khôi phục các đoạn header và footer không liền kề, và giải phóng văn bản đã wrap sau mỗi flow item
Version 3.77.0
Đã thêm (Added)
TPdfLayoutTable, hàng, ô và các tùy chọn bảng bổ sung bảng xuyên trang với grid track đã phân giải, caption, hàng header lặp lại, hàng thân có thể tách, link và viền cấu hình được
Đã thay đổi (Changed)
- Bảng tagged được sinh ra giữ một cấu trúc Table / TR / TH / TD liên tục xuyên qua các trang, giữ các nhóm row-spanning nguyên khối, và tự động liên kết ô dữ liệu với header ID
Version 3.76.0
Đã thêm (Added)
TPdfLayoutConstraintsvàSetLastItemConstraintsbổ sung keep-together, keep-with-next, ngắt trang vật lý before / after và điều khiển dòng widow / orphan cấu hình được vào các layout sinh ra
Đã thay đổi (Changed)
BuildPlantái sử dụng từng kết quả văn bản đã wrap cho cả dự đoán phân trang lẫn phát sinh lệnh, nhờ keep-with-next không phải đo lường văn bản lặp lại
Version 3.75.0
Đã thêm (Added)
TPdf.InspectPdfUaUnicodeCoveragebáo cáo bằng chứng cấp object có giới hạn cho ánh xạ Unicode trực tiếp, phần thay thếActualText, lỗi ánh xạ, giá trị Unicode bị thiếu và các object nguồn chưa phân giải được
Đã thay đổi (Changed)
TPdf.ValidatePdfUagiờ đây tái sử dụng một lần quét ký tự phạm vi object duy nhất, loại bỏ ký tự Artifact và ký tự được sinh ra, đồng thời ngănActualTextcủa một text object che khuất nội dung kề bên
Version 3.74.0
Đã thay đổi (Changed)
ValidatePdfUaPageContentTaggingvàTPdf.ValidatePdfUagiờ đây báo cáopvuaiArtifactInStructureTreekhi một page object Artifact bị một MCID của structure tree nhận làm của mình, bao gồm cả pagination artifact dựa trên path- Quét nội dung trang PDF/UA giờ đây chỉ short-circuit sau khi đã phát hiện cả nội dung thực chưa được tag lẫn việc chứa Artifact không hợp lệ, giữ nguyên độ phủ xuyên trang mà không lặp lại các kiểm tra đã hoàn thành
Version 3.73.0
Đã thêm (Added)
TPdf.InspectPdfUaLanguageCoveragebáo cáo bằng chứng page-object và structure-string có giới hạn cho các đoạn natural-language, bao gồm ngôn ngữ hiệu lực, nguồn khai báo, MCID, chỉ số structure và trích đoạn văn bảnResolvePdfUaEffectiveLanguagephân giải các khai báo ngôn ngữ từ marked-content, structure ancestor gần nhất và catalog, cùng bằng chứng hiệu lực tường minh
Đã thay đổi (Changed)
TPdf.ValidatePdfUagiờ đây báo cáopvuaiNaturalLanguageUncoveredkhi văn bản phi-artifact hoặc chuỗi accessibility không có khai báo/Langhiệu lực hợp lệ
Version 3.72.0
Đã thêm (Added)
TPdf.InspectPdfAMetadatabáo cáo bằng chứng tương đương có kiểu theo từng trường cho cả tám ánh xạ Info-to-XMP của ISO 19005-1, bao gồm giá trị rỗng tường minh và lỗi parse ngàyTPdf.NormalizePdfAMetadatachỉ sửa các thuộc tính XMP được ánh xạ bị lệch, đồng thời giữ nguyên các namespace không liên quan và các phương án ngôn ngữ không mặc định
Đã thay đổi (Changed)
TPdf.ValidatePdfAgiờ đây báo cáopvaiInfoXmpValueMismatchkhi giá trị Info do PDFium giải mã khác với giá trị XMP đúng kiểu sau khi so sánh Unicode hoặc so sánh ngày có tính múi giờ
Version 3.71.0
Đã thêm (Added)
InspectPdfVT2sStreamtrả về bằng chứng điều kiện in cho mọi MIME part PDF/VT, bao gồm định danh OutputIntent, nguồn gốc profile nhúng hoặc qua MIME, hash ICC cùng thông tin header, và số trang cùng số record của DPartFPdfIccProfilecung cấp khả năng kiểm tra header và tag table ICC có giới hạn, hỗ trợ MD5, SHA-256, color space, phiên bản, device class, profile-ID và mô tả profile đa ngôn ngữ
Đã thay đổi (Changed)
- Xác thực PDF/VT-2s giờ đây phân giải các ICC MIME attachment từ trước thông qua file specification dạng URL
DestOutputProfileRef, đồng thời xác thựcCheckSum,ICCVersion,ProfileCS,ProfileName, device class và các process color space được phép - Mọi phần PDF/VT giờ đây đều yêu cầu một OutputIntent
GTS_PDFXcó thẩm quyền, cách đóng gói profile nhúng hoặc bên ngoài phù hợp với PDF/X base, và cùng một điều kiện in đã đặc tả, trong khi các attachment chỉ-PDF/X vẫn nằm ngoài các phép so sánh PDF/VT - Xác thực PDF/VT-2 trên file đơn giờ đây nhận
DestOutputProfileReflà destination profile bên ngoài thay vì báo nó bị thiếu
Version 3.70.0
Đã thay đổi (Changed)
- Xác thực PDF/VT giờ đây kiểm tra
GTS_Scope,GTS_XID,GTS_EnvvàGTS_Encapsulatedtrực tiếp trên từng XObject thay vì để các dictionary lân cận hoặc lồng nhau đáp ứng yêu cầu hint - Phạm vi
Recordgiờ đây phân giảiRecordLeveltừ dictionary gián tiếpDPartRoot, còn phạm viStreambị từ chối trong các file PDF/VT-1 - Content stream của page và Form XObject sau giải mã giờ đây xác thực khả năng hiển thị resource
Do, số lần xuất hiệnSingleUsevà quyền sở hữu recipient-record thông qua resource kế thừa hiệu lực và hệ phân cấp DPart - Encapsulated XObject giờ đây được xác thực về dạng boolean, phạm vi khuyến nghị,
Intentcủa Image, transparency group isolated, blending color space và các phụ thuộc optional-content trực tiếp hoặc lồng nhau
Version 3.69.0
Đã thay đổi (Changed)
- Xác thực PAdES giờ đây từ chối các mục
Contents,ByteRange,SubFilter,FiltervàTypebị trùng lặp thay vì chấp nhận giá trị do parser chọn - Việc dò tìm chữ ký giờ đây dùng quét dictionary tuyến tính có ý thức về stream, nhận diện các PDF name token đã escape, và không thể bị dẫn lệch bởi một dictionary lồng nhau đã đóng nằm trước
ByteRangethật - Xác thực
ByteRangecủa chữ ký giờ đây yêu cầu khoảng bị loại trừ khớp chính xác với token thập lục phânContentstrực tiếp, trong khi vẫn cho phép các revision gia tăng về sau - Dictionary chữ ký giờ đây yêu cầu đúng một
Filternhận giá trị name và ép các tổ hợp kiểu cùng subfilterSighoặcDocTimeStampphải nhất quán
Version 3.68.0
Đã thêm (Added)
TPdf.BuildPadesEvidenceReportđối chiếu các dữ kiện chữ ký từ PDFium, chính sách CMS, trạng thái trust và timestamp, hash của certificate path, độ phủ DSS/VRI, cùng các quyết định revision về sau cho từng chữ kýTPadesEvidenceReportxuất bằng chứng đa chữ ký có giới hạn dưới dạng JSON hoặc CSV, đồng thời báo cáo telemetry nguồn, chữ ký, DSS, revision và cắt cụt
Đã thay đổi (Changed)
- Xác thực trust PAdES giờ đây ghi lại định danh SHA-256 cho certificate người ký và certificate path Windows có thứ tự, trong khi mặc định vẫn giữ xác thực offline
- Việc sinh bằng chứng tái sử dụng một bản captured source-byte được giữ lại xuyên suốt phân tích compliance, trust, DSS và revision, thay vì copy PDF gốc vào một stream mới cho từng giai đoạn
Version 3.67.0
Đã thêm (Added)
TPadesSignatureFieldOptionstạo ra tên trường chữ ký cấu hình được, seed value bắt buộc, danh sách reason và legal-attestation, các certificate người ký được chấp nhận, cùng field lock- Ký cục bộ và ký từ xa có thể soạn chữ ký approval hoặc certification với các transform
FieldMDPvàDocMDPtheo ISO 32000-1
Đã thay đổi (Changed)
- Chữ ký certification giữ nguyên các quyền hiện có trong catalog trong khi đăng ký chữ ký mới thông qua
/Perms /DocMDP
Version 3.66.0
Đã thêm (Added)
RenderPageBandedToStreamghi đầu ra PNG hoặc TIFF trực tiếp vào stream của caller, với chiều cao band, độ nén PNG và giới hạn byte đầu ra cấu hình đượcRenderPageBandedToEncodernạp lần lượt từng band trang cho codec do caller định nghĩa và trả về telemetry band, hàng, bộ nhớ, hoàn tất và đầu ra
Đã sửa (Fixed)
RenderPageBandedgiờ đây giữ nguyên hình học render toàn trang và clip từng band được yêu cầu, thay vì scale lại trọn trang vào mỗi band
Version 3.65.0
Đã thêm (Added)
TPdfParallelRenderReportgiờ đây báo cáo kích thước nguồn, đỉnh bộ nhớ đã captured, storage backend và loại backing dùng chung
Đã thay đổi (Changed)
RenderPagesParallelchia sẻ nguồn đã captured qua bộ nhớ bất biến, file mapping chỉ đọc hoặc random access kiểuFPDF_LoadCustomDocument, thay vì cấp phát thêm một mảng byte toàn tài liệu thứ hai- Nguồn render song song đã tràn ra vẫn nằm trong giới hạn
SaveMemoryLimitvà không còn phải nạp lại toàn bộ PDF vào bộ nhớ tiến trình định địa chỉ được
Version 3.64.0
Đã thêm (Added)
ImportImposedgiờ đây có một overload trả vềTPdfImpositionExecutionReportvới số đếm import native, nguồn duy nhất, slot trống, XObject template, form object, lần sinh content và trang đầu ra
Đã thay đổi (Changed)
- Imposition zero-geometry đưa mọi trang nguồn theo thứ tự qua đúng một lời gọi
FPDF_ImportPagesByIndextrước khi chèn trang trống và ghép N-up native - Imposition custom-geometry tái sử dụng một XObject template native cho mỗi trang nguồn duy nhất, đọc page metrics từ cache mà không làm thay đổi trang nguồn, và cấp phát trước đúng dung lượng lưu trữ kế hoạch
Version 3.63.0
Đã thêm (Added)
BeginPageObjectEditTransaction,CommitPageObjectEditTransactionvàRollbackPageObjectEditTransactiongom các mutation page-object native thành một lô atomic theo phạm vi trang với rollback snapshot đã được xác thựcPageObjectEditTransactionStatusbáo cáo trang đang gắn, trạng thái dirty, số mutation thành công và số lần sinh content
Đã thay đổi (Changed)
- Lô object đã commit giờ đây gọi
FPDFPage_GenerateContentmột lần duy nhất, thay vì mỗi mutation insert, remove, transform, property, mark, annotation-object hay appearance lại gọi một lần - Thao tác lưu, đổi trang, xóa trang, transaction chỉnh sửa lồng nhau, cùng insert native thất bại hoặc cập nhật annotation, đều bị từ chối trước khi content bị hoãn kịp mất
Version 3.62.0
Đã thêm (Added)
ReadPageObjectsSnapshotcaptured các dữ kiện page-object thuộc sở hữu caller với các ngân sách object, path, clip, mark, text, string và deadlinePageObjectsSnapshotcung cấp tái sử dụng LRU có nhận biết revision với capacity cấu hình được cùng telemetry occupancy, hit và miss
Đã thay đổi (Changed)
PageComplexitygiờ đây tái sử dụng snapshot page-object bất biến thay vì lặp lại việc duyệt object native cùng các truy vấn transparency, path và image
Version 3.61.0
Đã thêm (Added)
TPdfgiờ đây cung cấp một thumbnail LRU thống nhất cho preview nhúng lẫn preview render, với trần số mục và trần byte cấu hình được, cùng telemetry hit, miss, eviction, occupancy và revisionRenderPageThumbnailchấp nhận rotation, render options, màu nền vàTPdfColorScheme, đồng thời giữ nguyên hợp đồng bitmap thuộc sở hữu caller
Đã thay đổi (Changed)
- Trích xuất và render thumbnail lặp lại tái sử dụng kết quả PDFium native qua các khóa revision, trang, nguồn, kích thước, rotation, flags, background và color scheme, kể cả việc cache trạng thái không có của thumbnail nhúng tùy chọn
TPdfThumbnailViewđồng bộ cache bitmap của các trang đang hiển thị với revision thumbnail của tài liệu, để việc chỉnh sửa không thể để lại preview cũ
Version 3.60.0
Đã thêm (Added)
ReadTextPageSnapshotcaptured Unicode, ánh xạ UTF-16, hình học và kiểu ký tự cùng metadata text-object đã chuẩn hóa trong một lượt, với các ngân sách tường minh cho ký tự, object, font-name và deadlineTextPageSnapshotcung cấp bản copy sâu thuộc sở hữu caller thông qua một LRU có nhận biết revision cấu hình được, kèm telemetry capacity, count, hit và miss
Đã thay đổi (Changed)
GetStructuredTextvàGetTextInReadingOrdertheo physical-layout giờ đây tái sử dụng chung một text snapshot và áp dụng sắp xếp hình học O(n log n)
Đã sửa (Fixed)
- Cache snapshot văn bản và structure cỡ nhỏ giờ đây evict trang cũ nhất trong khi vẫn lưu dữ liệu mới dưới chỉ số trang được yêu cầu, ngăn aliasing cache xuyên trang
Version 3.59.0
Đã thêm (Added)
LifecycleActionPolicychọn chế độ disabled, chỉ-thực-thi-tường-minh, hoặc tương thích cho việc tự động chạy các lifecycle action của tài liệu và trang PDFExecuteDocumentLifecycleActionđể lộ các action JavaScript, open, close, save và print của tài liệu, cònExecutePageLifecycleActionchạy các action open và close của trang mà không đổiPageNumber
Đã thay đổi (Changed)
- Việc nạp trang headless giờ đây nhận cùng các action open và close trang tự động như khi nạp qua viewer, với các trang tạm được tái sử dụng hoặc giải phóng dưới render lock
Version 3.58.0
Đã thêm (Added)
ReadStructureElementsvàVisitStructureElementscung cấp duyệt tagged-structure kiểu lặp với các ngân sách tường minh cho depth, element, attribute và thời gian, kèm trạng thái hoàn thành chi tiếtStructureElementsForPageđể lộ snapshot trang đánh số từ 1 mà không đổiPageNumber, được chống lưng bởi một LRU cache có nhận biết revision cấu hình được với telemetry hit, miss và count
Đã thay đổi (Changed)
- Các phía tiêu thụ accessibility, reflow, validation và viewer giờ đây tái sử dụng snapshot structure thuộc sở hữu caller cho đến khi một chỉnh sửa tài liệu hoặc trang liên quan làm chúng bất hợp lệ
Version 3.57.0
Đã thêm (Added)
- Bộ callback form-host native hoàn chỉnh giờ đây cung cấp lazy page handle an toàn vòng đời, định tuyến cursor cho interaction view, thông báo thay đổi giá trị, hình chữ nhật văn bản được chọn, sự kiện URI và sự kiện destination GoTo
FormHostCallbacksCompletebáo cáo mức sẵn sàng của callback, cònFormSelectionRectsvàClearFormSelectionRectsđể lộ hình học vùng chọn có giới hạn trong không gian trang
Đã sửa (Fixed)
- Callback trang hiện tại của XFA giờ đây quy đổi đúng giữa chỉ số trang bắt đầu từ 0 của PDFium và
PageNumberbắt đầu từ 1 của component - Callback URI của AcroForm và XFA giờ đây giữ nguyên byte URI thô và yêu cầu host phê duyệt tường minh trước khi mở bất kỳ thứ gì ra bên ngoài
Version 3.56.0
Đã thêm (Added)
- Snapshot
PageMetricstheo chỉ số để lộ kích thước, rotation, label, transparency và năm page box tiêu chuẩn của một trang mà không cần đổi trang active
Đã thay đổi (Changed)
- Các lần đọc metadata trang lặp lại tái sử dụng một snapshot cache native tự vô hiệu hóa, giảm số lần mở trang trong các workload thumbnail, preflight và phân tích tài liệu
Version 3.55.0
Đã thêm (Added)
- Kiểm tra path để lộ chính xác các control point cubic Bézier khi bản build PDFium được nạp có cung cấp
FPDFPath_GetBezierControlPoints, kèm một probe khả năng tùy chọn cho các DLL cũ hơn FormFieldTypeAtPoint,TPdfView.FormFieldTypeAtvà các propertyFontFlagstheo chỉ số để lộ dữ kiện form và font native mà không cần raw handleTPdf.Signaturestrả về toàn bộ content chữ ký native, ByteRange, subfilter, reason, thời gian và quyền trong một snapshot thuộc sở hữu caller
Đã thay đổi (Changed)
- Kiểm tra sự tồn tại của form field giờ đây dùng hit testing điểm native trực tiếp thay vì mở rồi đóng các annotation handle
Đã sửa (Fixed)
- Xác thực PDF/E-1 giờ đây cho phép các AcroForm field thông thường, file nhúng và annotation FileAttachment, đồng thời báo cáo chính xác
/XFAvà/NeedAppearances truecủa AcroForm cấp cao nhất, bao gồm cả giá trị gián tiếp và trong object stream
Version 3.54.0
Đã thêm (Added)
FPdfProductionthêm lựa chọn ảnh đa codec có đo lường, backend xử lý màu sắc và phông chữ, đường dẫn SVG, kế hoạch thay thế có kiểu dáng, cập nhật gói XFA giao dịch, vector mã vạch, mô hình Portfolio và trích xuất RichMedia an toànFPdfStandardsExecutionthêm đo lường và chuyển đổi GeoPDF, khắc phục PDF/A giao dịch, kế hoạch PDF/UA-2, profile đa màu ngoài, bằng chứng DSS và VRI lịch sử, truy vấn DPart, dữ kiện PDF/E chiều sâu và dải PDF/R với bộ nhớ cố địnhTPdf.ImportImposeddựng các kế hoạch N-up và booklet có giới hạn qua đường dẫn N-up native hoặc page-XObject với hình học gutter, bleed và creep chính xác, trong khiTPdf.CompareWithbáo cáo khác biệt ngữ nghĩa, hình học và điểm ảnh có dung sai- Việc ký PAdES hiện hỗ trợ trình kiểm tra đường dẫn và nhà cung cấp HSM có thể cắm thêm, PDF MAC gắn chữ ký,
cms-algorithm-protectionvà tài liệu chính sách chữ ký offline
Đã thay đổi (Changed)
- Engine bố cục chấp nhận HTML và Markdown có giới hạn, trôi qua nhiều cột và giải quyết các rãng lưới cố định, tự động và phân số
- Chu trình khứ hồi XFDF hiện giữ lại các trường đa giá trị và rich-text, popup, hành động, đích đến, lớp phủ appearance, namespace tùy chỉnh và trạng thái hiện diện tường minh
Version 3.53.0
Đã thêm (Added)
ConfigurePdfLibrarycung cấp cấu hình bất biến cho renderer native, phông chữ, V8, Brotli, đường dẫn phông chữ người dùng và sandbox trước lần tải PDFium đầu tiên- Các thuộc tính cấu trúc native, quan hệ chú thích, tệp đính kèm chú thích, giá trị từ điển có kiểu, chính sách tiêu điểm, truy vấn z-order của liên kết và biểu mẫu, cùng chẩn đoán ánh xạ TTF mặc định được cung cấp qua các API cấp cao có giới hạn
TPdfView.ReplaceFormTextAndKeepSelectiongiữ nguyên vùng chọn đang hoạt động qua các lần chỉnh sửa lặp lại, và các sự kiện nhả nút chuột phải hiện đã đến được engine biểu mẫu native
Đã thay đổi (Changed)
- Thời gian tài liệu tất định hiện dùng thêm chuyển đổi lịch UTC ổn định bên cạnh epoch cố định, tạo ra cùng một metadata trong mọi múi giờ của máy chủ
- Ghi chuỗi đính kèm hiện kiểm tra kết quả native và mã hóa khóa từ điển dưới dạng UTF-8
Version 3.52.0
Đã thêm (Added)
TPdf.GetImageObjectRenderedBitmaptrả về kết quả kết xuất của một object ảnh với ma trận hiện tại, không gian màu, mặt nạ và trạng thái kết xuất được áp dụngTPdf.TextObjectGlyphWidth,TPdf.TextObjectFontSizevàTPdf.SetTextObjectFontSizephơi bày phép đo glyph native và việc chỉnh sửa cỡ phông của object văn bản một cách chính xácTPdf.TransformPageObjectClipPath,TPdf.DetachFormObjectChild,TPdf.SharePageObjectMarkvàTPdf.IsAnnotationObjectSubtypeSupportedbổ sung chỉnh sửa object nội dung chính xác và kiểm tra năng lực
Version 3.51.0
Đã sửa (Fixed)
- Tám thành viên của
TPdfmà các ghi chú phát hành trước đó đã công bố vẫn được khai báo trong phần private và không thể được gọi từ bên ngoài unitPDFium; chúng hiện là public đúng như tài liệu:LinkAtPoint,GetTextRenderMode,GetTextObjectRenderedBitmap,IsAnnotationSubtypeSupported,ChooseRenderFlags,AttachmentHasKey,GetAttachmentStringValuevàSetAttachmentStringValue
Đã thay đổi (Changed)
- Tài liệu tham khảo tiếng Anh hiện bao gồm mọi thành viên public của
TPdfvàTPdfView: 88 thành viên trước đó không có trang tham chiếu nay đã có trang riêng, và các trang lớp, chỉ mục điều hướng cùng tham chiếu API liệt kê tất cả chúng - Các trang tham chiếu trước đây trỏ đến một trang dùng chung hiện liên kết đến trang của chính thành viên đó, nên một kết quả tìm kiếm sẽ mở phần mô tả của API được tìm kiếm
- Tham chiếu API ghi lại các kiểu liệt kê và bản ghi có thể tiếp cận từ chữ ký public, bao gồm báo cáo tải và stream, các kiểu văn bản, phông chữ và OCR, kiểu trình dựng bố cục, kiểu xác thực PAdES, kiểu xử lý hàng loạt và xác thực, và kiểu kết xuất song song
Version 3.50.0
Đã thêm (Added)
- Mọi demo GUI hiện mở với nội dung sẵn sàng sử dụng thay vì một biểu mẫu trống: các demo trình xem và phòng thí nghiệm tải một tài liệu mẫu được tạo sẵn, các demo báo cáo tạo một báo cáo hoàn chỉnh khi khởi động, và các demo bộ xử lý tạo trước dữ liệu vào mẫu để thao tác chính chạy chỉ với một cú nhấp
MultiPageViewer,SplitViewvàFontPropertiestạo các tài liệu mẫu trong bộ nhớ khi khởi động (một tài liệu trình diễn sáu trang, hai tài liệu so sánh đặt cạnh nhau và một trang đa phông chữ để nhấp xem chi tiết)- Các demo bộ xử lý như
MergePDF,BatchExport,SplitPDF,ExtractText,PDFtoJpg,PrintPDFvàPrintPreferencestạo trước các tệp PDF mẫu cạnh tệp thực thi và điền sẵn các điều khiển nhập, với việc tạo lại idempotent không bao giờ ghi đè tệp hiện có FormFillvàExtractImagestự động tải các tệp mẫu đi kèm trong thư mục demo của chúng,ImageToPDFtạo hai bitmap mẫu,WatermarkStampdựng sẵn các mẫu con dấu của nó, vàXfdfLabmở trên một tài liệu được tạo sẵn mang chú thích văn bản và tô sáng
Đã thay đổi (Changed)
CreatePDFhiện tạoSample.pdfcạnh tệp thực thi khi khởi động mà không hiện hộp thoại, nên tài liệu tồn tại ngay khi demo mở raTPdf.AboutInfovà siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.50.0
Version 3.49.0
Đã thêm (Added)
FORM_GetTextDirectionvàFORM_SetTextDirectiontừ các bản nhị phân PDFium đã cập nhật hiện được liên kết, giữ cho lớp liên kết động bao phủ đầy đủ toàn bộ 472 xuất bản của PDFiumTPdf.FocusedFormFieldTextDirectionvàTPdf.SetFocusedFormFieldTextDirectionphơi bày hướng văn bản trong bộ nhớ của widget đang tiêu điểm qua kiểu liệt kê mớiTPdfFormTextDirection(ftdUnknown,ftdAuto,ftdLTR,ftdRTL), kèm các bản tương ứng củaTPdfViewvẽ lại page scene sau khi hướng thay đổi
Đã thay đổi (Changed)
FPDF_LIBRARY_CONFIGhiện phản ánh bố cục phiên bản 6 phía thượng nguồn với trường thử nghiệmm_BrotliEnabledcho các bản nhị phân dựng bằngPDF_ENABLE_BROTLITPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.49.0
Version 3.48.0
Đã thêm (Added)
- Demo
PDFViewerhiện tạo tài liệu trình diễn sáu trang trong bộ nhớ khi khởi động bằng API tạo tài liệu, nên trình xem mở ra với nội dung đã kết xuất và không cần tệp mẫu trên đĩa - Một bảng hình thu nhỏ xây dựng trên
TPdfThumbnailViewcung cấp bản xem trước trang điều hướng bằng một cú nhấp chuột, đặt bên cạnh cây dấu trang trong cả ba bản port của demo - Tìm kiếm trong trình xem hiện tô sáng mọi kết quả khớp trên trang hiện tại thông qua
HighlightSearchTextthay vì một hình chữ nhật kết quả duy nhất, với số lượng kết quả khớp được hiển thị trên thanh trạng thái - Các nút
Nightvà2-Upmột cú nhấp trên thanh công cụ chuyển đổi giữa chế độ kết xuất duotone ban đêm và chế độ hiển thị trải hai trang
Đã thay đổi (Changed)
- Chọn văn bản trong trình xem hiện dùng bộ máy chọn tích hợp sẵn của
TPdfViewvới chọn từ bằng nhấp đúp, kéo để chọn và phím tắt bảng tạm, thay thế cho mã chọn tự viết tay - Các trang được kết xuất với bóng đổ và cuộn mượt để mang lại trải nghiệm đọc hiện đại
TPdf.AboutInfovà siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.48.0
Version 3.47.0
Đã thêm (Added)
FPdfBenchmarkchạy các bộ tài liệu PDF có giới hạn với số lượt làm nóng và đo lường có thể cấu hình, giới hạn trang và pixel, hủy hợp tác, và trạng thái đạt, lỗi hoặc bị bỏ qua cho từng trường hợpTPdfBenchmarkReportghi lại kích thước byte đầu vào và đã lưu, độ trễ tải và trang đầu tiên, thông lượng kết xuất, thời gian lưu và mở lại, bộ làm việc đỉnh lấy mẫu, băm SHA-256 ngữ nghĩa và pixel, độ ổn định qua các lần chạy lặp lại, cổng băm kỳ vọng, và tính tương đương khi mở lại độc lập- Báo cáo benchmark xuất CSV an toàn cho công thức và JSON có cấu trúc dành cho CI, thẩm định bản phát hành, và theo dõi hiệu năng theo thời gian
GetSkiaRenderCapabilities,RenderPageSkiavàRenderPageSkiaByIndexphơi bày kết xuất trang và biểu mẫu Skia gốc tùy chọn với tái sử dụng bộ đệm trang đã phân tích và không yêu cầu xuất DLL cứng- Một ABI đầu ra in có phiên bản và được cổng theo khả năng phơi bày liệt kê tấm in spot chính xác, kết xuất tấm in, phát hiện overprint, và xem trước overprint khi được cung cấp bởi mô-đun PDFium đã tải
Đã sửa (Fixed)
- Các bản dựng PDFium không có
PDF_USE_SKIAhiện tải bình thường thay vì thất bại vì thiếu các xuất Skia thử nghiệm
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.47.0
Version 3.46.0
Đã thêm (Added)
ValidatePdfRhiện kiểm tra nội dung trang chỉ raster, hình học dải, mô hình màu, độ phân giải hiệu dụng, tham số nén, siêu dữ liệu bắt buộc, và các hồ sơ PDF 2.0 mã hóa thông qua các tùy chọn xác thực có thể cấu hìnhBuildPdfARepairPlanbiến bằng chứng xác thực thành các bước khắc phục theo thứ tự phụ thuộc với các lớp an toàn, cơ chế bảo vệ tác động chữ ký, và đầu ra JSONBuildPdfXProductionPreflightbáo cáo các hộp trang, phông nhúng, output intent, màu mực, độ trong, overprint, tách màu, độ phân giải hình ảnh, và mức sẵn sàng sản xuất mà không giải mã tải trọng hình ảnh- Xác thực cấu trúc PDF/UA-2 hiện kiểm tra quyền sở hữu tệp liên kết, thứ tự đọc, mô tả, quan hệ, và khả năng khám phá
Đã thay đổi (Changed)
TAssociateFile.Description,TPdf.ImageInfovàTPdf.PageComplexityphơi bày siêu dữ liệu cần thiết cho các quy trình tiền kiểm tệp liên kết và sản xuấtTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.46.0
Version 3.45.0
Đã thêm (Added)
TPdfXmpPacketphân tích, chỉnh sửa, nhân bản và tuần tự hóa XMP nhận thức không gian tên với các không gian tên không rõ, bộ chứa RDF có kiểu, giá trị URI và tài nguyên, bộ định tính, lựa chọn ngôn ngữ, bao gói packet, và phần đệm được bảo toànTPdf.ReadXmpPacketvàSaveAsWithXmpPacketphơi bày đọc siêu dữ liệu cấp cao và đầu ra nguyên tử, với các thay đổi tài liệu đã ký yêu cầu ủy quyền rõ ràng
Bảo mật (Security)
- Trình đọc XML có giới hạn từ chối DTD và thực thể ngoài đồng thời giới hạn byte packet, mức lồng nhau, nút, thuộc tính, và tham chiếu ký tự số
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.45.0
Version 3.44.0
Đã thêm (Added)
TPdfValidationRuleRegistryđăng ký các điều khoản hồ sơ với mức nghiêm trọng, phụ thuộc, hướng dẫn sửa chữa, bằng chứng, và vị từ dựng sẵn hoặc tùy chỉnhTPdfValidationBudgetvàTPdfValidationExecutionContextgiới hạn quy tắc, thất bại, đối tượng, đệ quy, bằng chứng UTF-8, bộ nhớ dự trữ, thời gian đã trôi, thất bại nhanh, và hủy hợp tácValidatePdfFilesParallelxác thực các tệp thông qua tài liệu worker cách ly trong khi bảo toàn thứ tự đầu vào và tổng hợp phân bố vấn đề, thời gian, thất bại, việc hủy, và lỗi tải
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.44.0
Version 3.43.0
Đã thêm (Added)
TPdfStructureElementhiện mang các dữ kiện không gian tên, ánh xạ vai trò không gian tên, tham chiếu, tệp liên kết, chú thích, widget, nhãn, và hình thức cho xác thực ngữ nghĩa PDF/UA-2ValidatePdfUa2StructureElementsvà các trình xác thực tập trung của nó kiểm tra không gian tên và vùng chứa ISO/TS 32005, lưới bảng có giới hạn, chú thích, biểu mẫu, liên kết Formula/MathML, tệp liên kết, gốc tài liệu, FENote, danh sách, tham chiếu TOC, tiêu đề, và chú giải mà không tảipdfium.dllClassifyPdfUaNamespacenhận diện các không gian tên cấu trúc PDF 1.7, PDF 2.0, MathML, ARIA, DPUB, tùy chỉnh, và bị thiếuPdfUa2StructureHasIssuecung cấp truy vấn vấn đề đơn lẻ an toàn cho C++Builder mà không trả về tập Pascal theo giá trị
Đã thay đổi (Changed)
ValidatePdfUaStructureElementstự động áp dụng bộ quy tắc ngữ nghĩa mới chopuc2trong khi bảo toàn đường dẫn quy tắc PDF/UA-1TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.43.0
Version 3.42.0
Đã thêm (Added)
TPdfUaSaveOptions.PdfUa2tạo đầu ra PDF/UA-2 vớipdfuaid:part2,pdfuaid:rev2024, và phiên bản catalog PDF 2.0 hiệu dụngValidatePdfUaphát hiệnpuc2và báo cáo siêu dữ liệu phiên bản bị thiếu, tệp không phải PDF 2.0, cấu hình nội dung tùy chọn không tên, chú thích không còn dùng, và tiêu đề H chung chung
Đã thay đổi (Changed)
- Xác thực PDF/UA hiện chọn các quy tắc thứ tự tab, XFA, và tiêu đề theo từng hồ sơ cho PDF/UA-1 và PDF/UA-2
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.42.0
Version 3.41.0
Đã thêm (Added)
SetPageObjectMarkParamthêm hoặc thay thế một tham số nguyên, thực, chuỗi, hoặc blob trên một mục nội dung được đánh dấu hiện có mà không thay thế dấuRemovePageObjectMarkParamgỡ bỏ một thuộc tính được chọn trong khi bảo toàn tên dấu và mọi thuộc tính không liên quan
Đã thay đổi (Changed)
- Các số của nội dung được đánh dấu không nguyên hiện qua lại dưới dạng
pmpFloatthay vì bị cắt cụt thành ảnh chụp nguyên - Xác thực tham số thất bại trong
AddPageObjectMarkgỡ bỏ dấu gốc đã tạo một phần TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.41.0
Version 3.40.0
Đã thêm (Added)
ConfigureSystemFontProvidercài đặt một bộ ánh xạ phông ứng dụng trước khi PDFium khởi động và cung cấp byte TrueType hoặc OpenType đã xác thực cho các phông tài liệu bị thiếu hoặc bị thay thếTPdfSystemFontPolicyđiều khiển thay thế mặt phông, cơ chế dự phòng gốc, giới hạn byte cho từng phông, và bộ đệm yêu cầu có giới hạnGetSystemFontProviderStatisticsbáo cáo hoạt động ánh xạ, bộ đệm, dự phòng, từ chối, bảng dữ liệu, và handle đang tồn tại
Đã thay đổi (Changed)
- Các callback của trình cung cấp phơi bày mặt phông, độ đậm, kiểu dáng, bảng mã, và pitch mà PDFium yêu cầu trong khi giữ các thất bại của callback bên trong ranh giới gốc
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.40.0
Version 3.39.0
Đã thêm (Added)
AddCidType2Textnhúng dữ liệu TrueType do người gọi cung cấp với hình học CID-to-GID rõ ràng cho từng glyph và các ánh xạ CID-to-UnicodeTPdfCidFontOptionschọn nhúng đầy đủ, tạo tập con ưa thích kèm cơ chế dự phòng, hoặc tạo tập con bắt buộc đồng thời cấu hình các ngân sách phông, glyph, và Unicode có giới hạnTPdfCidFontReportbáo cáo các quyết định tập con, kích thước byte, số glyph duy nhất, trạng thái nhúng, văn bản kỳ vọng, văn bản trích xuất, và tính toàn vẹn trích xuất
Đã thay đổi (Changed)
- Việc tạo tập con TrueType bảo toàn các định danh glyph được yêu cầu, từ chối đầu ra không an toàn, và hoàn tác mọi đối tượng trang đã chèn nếu xác thực ánh xạ hoặc trích xuất thất bại
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.39.0
Version 3.38.0
Đã thêm (Added)
BuildReflowDocumenttạo một cây nút ngữ nghĩa có giới hạn và tái sử dụng được từ cấu trúc Tagged PDF hoặc suy luận bố cục vật lý trên một phạm vi trang được chọnTPdfReflowDocument.ToHtmlphát hành các tiêu đề, đoạn văn, danh sách, hình minh họa, chú giải, phần trang, và bảng có khả năng phản hồi đã được thoát ký tự với ngữ nghĩa tiêu đề và spanTPdfReflowOptionsđiều khiển phát hiện bảng, phần trang, hình học, CSS, ngắt dòng, phạm vi trang, việc hủy, và ngân sách tài nguyên
Đã thay đổi (Changed)
- Nội dung bảng thay thế các khối đoạn văn chồng lấp trong quá trình reflow, và trạng thái trang hiện hoạt được khôi phục sau thành công, thất bại, hoặc hủy
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.38.0
Version 3.37.0
Đã thêm (Added)
ApplyOcrSearchLayerkết xuất các trang được chọn thông qua PDFium và gửi pixel BGRA từ-trên-xuống có giới hạn đếnIPdfOcrProviderdo người gọi cung cấpTPdfOcrWordmang văn bản Unicode, độ tin cậy, và các tứ giác trong không gian pixel được ánh xạ qua hình học trang gốc thành văn bản tìm kiếm được vô hìnhTPdfOcrReportghi lại mức hoàn thành theo từng trang, việc bỏ qua do đã có văn bản, thất bại, việc hủy, pixel đã kết xuất, và các từ được chấp nhận hoặc bị từ chối
Đã thay đổi (Changed)
- Việc chèn OCR bảo toàn các luồng hình ảnh quét gốc, lọc kết quả malformed hoặc độ tin cậy thấp, cam kết một lần mỗi trang, và khôi phục trang hiện hoạt
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.37.0
Version 3.36.0
Đã thêm (Added)
ExtractTablesphát hiện các bảng có đường kẻ và căn theo khoảng trắng từ hình học từ gốc và các đường kẻ của path đã biến đổiTPdfTablebáo cáo hàng, cột, span hợp nhất, biên trang, ô tiêu đề, chế độ phát hiện, độ tin cậy, và đầu ra CSV hoặc JSON trực tiếpExtractDocumentTablesquét mọi trang dưới các ngân sách dùng chung và đánh dấu các bảng khớp tiếp nối qua ranh giới trang
Đã thay đổi (Changed)
- Trích xuất bảng thực thi các giới hạn từ, đường kẻ, ô, và bảng có thể cấu hình và khôi phục trang hiện hoạt sau các lần quét cấp tài liệu
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.36.0
Version 3.35.0
Đã thêm (Added)
GenerateTaggedLayouttạo một tài liệu bố cục ngữ nghĩa mới với nội dung được đánh dấu gốc, cây cấu trúc Document, các ánh xạ ParentTree và IDTree, và siêu dữ liệu ngôn ngữ tài liệuTPdfLayoutSemanticsmô hình hóa tiêu đề, phần, danh sách, hình minh họa, chú giải, bảng, liên kết tiêu đề, span, văn bản thay thế, actual text, ngôn ngữ, và ID phần tửTPdfLayoutDocument.AddLinkphát hành chú thích URI Link và liên kết mỗi chú thích với phần tử cấu trúc Link của nó qua các ánh xạ OBJR và StructParent
Đã thay đổi (Changed)
- Văn bản bố cục mặc định theo ngữ nghĩa đoạn văn trong khi đầu trang, chân trang, thước kẻ, hình ảnh, và biểu mẫu tái sử dụng mặc định là artifact trừ khi được gắn thẻ rõ ràng
- Xác thực kế hoạch ngữ nghĩa từ chối ID trùng lặp, cha bị thiếu, chu trình, vùng chứa danh sách hoặc bảng không hợp lệ, hình minh họa thiếu văn bản thay thế, và ID tiêu đề bảng chưa được giải quyết trước khi phát hành tài liệu
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.35.0
Version 3.34.0
Đã thêm (Added)
TPdf.AddShapedTextghi các chuỗi glyph RTL, bidi, ngữ cảnh, và ligature thông qua định hình hệ thống gốc và các API phông CID Type 2 của PDFiumShapePdfTextvàTPdfUniscribeTextShaperphơi bày ID glyph đã định vị, advance, offset, cụm nguồn, vị trí chuỗi trực quan, và cấp bidi mà không sửa đổi tài liệu
Đã thay đổi (Changed)
- Các ánh xạ ToUnicode được tạo bao phủ mọi glyph đã định hình trong khi
ActualTextlưu chuỗi Unicode logic gốc cho các trình tiêu thụ trích xuất và trợ năng tuân thủ - Các chuỗi nội dung được đánh dấu mang dấu thứ tự byte UTF-16 hiện giải mã đúng qua
PageObjectMarks TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.34.0
Version 3.33.0
Đã thêm (Added)
TPdfLayoutCachedNodedựng nội dung bố cục phân lớp lần đầu sử dụng và hỗ trợ các vị trí đặt có tỉ lệ lặp lại quaAddCachedNodeTPdfLayoutPlanbáo cáo các lần trúng và trượt bộ đệm đo lường, vị trí đặt nút đã đệm, và XObject gốc tái sử dụng
Đã thay đổi (Changed)
BuildPlantái sử dụng các kế hoạch khớp theo ràng buộc trang hoàn chỉnh, nội dung, phông, kiểu dáng, nguồn, và định danh bộ đo mà không lặp lại đo lường văn bảnGenerateLayoutchuyển mỗi nút đã đệm duy nhất thành một XObject gắn với đích và tạo các đối tượng Form nhẹ nhàng cho mọi vị trí đặtTPdf.AboutInfo, siêu dữ liệu gói và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.33.0
Version 3.32.0
Đã thêm (Added)
TPdfLayoutDocumentdựng văn bản ngắt dòng, khoảng cách, thước kẻ, hình ảnh, XObject trang tái sử dụng, ngắt trang tường minh, đầu trang, và chân trang thành một kế hoạch trang đã đo lườngGenerateLayoutphân trang bố cục hoàn chỉnh trước khi nối thêm các trang và đối tượng trang gốc một cách nguyên tử, với các tham chiếu{page}và{pages}ổn định
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.32.0
Version 3.31.0
Đã thêm (Added)
- Các trình dựng
TPdfPagePlanmô tả các thao tác trang xóa, di chuyển, chèn, tách, và hợp nhất mà không áp dụng chúng ValidatePagePlantrả về ánh xạ trang cũ-sang-mới chính xác và kiểm kê các dấu trang, đích đến được đặt tên, nhãn trang, trường biểu mẫu, trang được gắn thẻ, tính năng nhập, và chữ ký bị ảnh hưởng
Bảo mật (Security)
- Các kế hoạch có thể để lại đích điều hướng lơ lửng hoặc thay đổi nội dung đã ký mà không có ủy quyền rõ ràng sẽ bị từ chối trước khi bất kỳ thao tác trang gốc nào chạy
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.31.0
Version 3.30.0
Đã thêm (Added)
SaveRecoverySnapshotghi một gói khôi phục có checksum và giới hạn kích thước chứa dấu vân tay nguồn và nhật ký chỉnh sửa tài liệu đã xác thựcRestoreRecoverySnapshotphát lại một gói khôi phục chỉ khi checksum, chuỗi nhật ký, dấu vân tay nguồn, và dấu vân tay đã khôi phục đều khớp nhauEnableRecoveryAutosavelàm mới nguyên tử một tệp khôi phục tường minh sau mỗi lần commit, undo, hoặc redo có thay đổi mà không ghi lại PDF nguồn
Đã thay đổi (Changed)
InspectRecoverySnapshotbáo cáo nguồn khôi phục, dấu vân tay, số mục, vị trí, và bộ nhớ có giới hạn mà không áp dụng góiImportEditJournalvà khôi phục phục hồi hiện yêu cầu ủy quyềnAllowSignedDocumentrõ ràng trước khi áp dụng chỉnh sửa lên một PDF đã ký- Bộ lưu trữ gói khôi phục dùng kho truy cập ngẫu nhiên có giới hạn đã cấu hình và thay thế ghi xuyên cùng thư mục cho các nhật ký lớn và cập nhật tự lưu an toàn khi sự cố
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.30.0
Version 3.29.0
Đã thêm (Added)
BeginEditTransaction,CommitEditTransaction, vàRollbackEditTransactionnhóm các chỉnh sửa tài liệu gốc tùy ý thành các giao dịch nguyên tửUndoEditvàRedoEditáp dụng các delta nghịch và thuận đã xác thực SHA-256 trên các thay đổi trang, đối tượng, chú thích, tệp đính kèm, và siêu dữ liệuExportEditJournalvàImportEditJournallưu trữ các delta di động có giới hạn với xác thực dấu vân tay nguồn và chuỗi digest để phát lại sau này
Đã thay đổi (Changed)
- Ảnh chụp giao dịch dùng đầu ra gốc tái lập được nên các commit không thay đổi vẫn trống ngay cả khi các lần lưu PDFium thông thường chứa định danh hoặc dấu thời gian không tất định
- Các commit thất bại và phát lại nhật ký không hợp lệ khôi phục nguyên tử tài liệu tải được trước đó, trong khi số mục, byte đã lưu, và kích thước ảnh chụp duy trì dưới các giới hạn do người gọi cấu hình
- Các PDF đã ký yêu cầu ủy quyền
AllowSignedDocumentrõ ràng trước khi một giao dịch chỉnh sửa tài liệu bắt đầu TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.29.0
Version 3.28.0
Đã thêm (Added)
TPdf.InspectOptionalContentliệt kê các lớp OCG, cấu hình mặc định và thay thế, trạng thái sử dụng View/Print/Export, siêu dữ liệu thu phóng và ngôn ngữ, lớp bị khóa, mảng thứ tự, nhóm radio, chính sách OCMD, biểu thức hiển thị, và trạng thái kết xuất hiệu dụngTPdf.SaveAsOptionalContentConfiguredghi một bản sao đã xác thực nghiêm ngặt với trạng thái lớp do người gọi chọn cho một mục đích sử dụng và cấu hình được chọn
Đã thay đổi (Changed)
- Đầu ra trạng thái lớp hiện cập nhật cả hai mảng
/ONvà/OFFcủa cấu hình và các từ điển trạng thái OCG Usage để PDFium áp dụng khả năng hiển thị được yêu cầu qua ngữ cảnh kết xuất gốc của nó - Ghi cấu hình từ chối nhóm không rõ, thay đổi lớp bị khóa, xung đột nhóm radio, tệp đã dàn bị mã hóa, và tệp đã ký không có ủy quyền rõ ràng, đồng thời gỡ bỏ các quy tắc trạng thái tự động theo mặc định để giữ kết quả được chọn tất định
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.28.0
Version 3.27.0
Đã thêm (Added)
TPdf.RenderPageByIndexkết xuất bất kỳ trang nào dựa trên một tại kích thước pixel chính xác mà không thay đổi trang chỉnh sửa hiện hoạt hoặc kích hoạt sự kiện đổi trangPageSceneCacheCapacity,PageSceneCacheCount, vàClearPageSceneCachephơi bày điều khiển và chẩn đoán bộ đệm cảnh có giới hạn
Đã thay đổi (Changed)
- Kết xuất trang theo chỉ mục, hình thu nhỏ đã kết xuất, và trích xuất hình thu nhỏ nhúng hiện tái sử dụng trạng thái trang PDFium đã phân tích qua bộ đệm LRU tám mục theo mặc định
- Các mục cảnh bị làm mất hiệu lực khi kích hoạt trang, chỉnh sửa, thay đổi cây trang, callback trạng thái biểu mẫu, xóa tường minh, và tháo dỡ tài liệu, với các kết xuất đang chạy được giữ an toàn đến khi giải phóng
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.27.0
Version 3.26.0
Đã thêm (Added)
TPadesSignatureAlgorithmInfobáo cáo digest, chữ ký, khóa công khai, và OID đường cong được đặt tên của mỗi người ký CMS cùng với trạng thái chính sách thuật toán được đánh giá độc lập của nóInspectPadesSignatureAlgorithmvàEvaluatePadesSignatureAlgorithmnhận diện các hồ sơ P-256, P-384, P-521, brainpoolP256r1, brainpoolP384r1, brainpoolP512r1, Ed25519, và Ed448
Bảo mật (Security)
- Xác thực PAdES hiện từ chối sai khớp đường cong elliptic và digest, OID chữ ký ECDSA không đồng nhất với digest CMS, tham số EC không tên, tham số Ed25519, và độ dài đầu ra SHAKE256 của Ed448 khác 512 bit
- Xác thực CMS gốc vẫn là nguồn của tính hợp lệ mật mã, trong khi các thuật toán không khả dụng và đường cong không được nhận diện được báo cáo là
pcsUnsupportedthay vì bị coi là chữ ký không hợp lệ TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.26.0
Version 3.25.0
Đã thêm (Added)
TPdf.ExportObjectGraphxuất các đối tượng classic, xref-stream, và object-stream hiện hoạt dưới dạng JSON có kiểu và giới hạn với từ điển, mảng, chuỗi, tên, giá trị vô hướng, tham chiếu gián tiếp, số byte luồng, và digest luồng SHA-256 tùy chọn tường minhTPdf.SaveAsObjectGraphPatchedđặt hoặc gỡ bỏ các giá trị từ điển cấp cao đã kiểm tra lược đồ thông qua các giá trị vá null, Boolean, nguyên, thực, tên, chuỗi văn bản, và tham chiếu gián tiếp có kiểu
Bảo mật (Security)
- Xuất đồ thị đối tượng thực thi các ngân sách đối tượng, đệ quy, chuỗi, và byte đầu ra, trong khi việc vá xác thực mọi thao tác trước khi giao, từ chối tham chiếu lơ lửng, thao tác trùng lặp, đầu vào mã hóa, thay đổi bộ lọc hoặc độ dài luồng được bảo vệ, và tài liệu đã ký trừ khi được ủy quyền rõ ràng
- Các vá đồ thị đối tượng được dàn thành một phiên bản gia tăng, vật chất hóa lại để xác thực xref, tải nghiêm ngặt qua PDFium, và chỉ được sao chép hoặc đổi tên nguyên tử sau khi mọi kiểm tra thành công
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.25.0
Version 3.24.0
Đã thêm (Added)
TPdf.ValidatePadesTrustxác minh mọi chữ ký tách rời có thể khám phá đối vớiByteRangegốc chính xác, đánh giá liên kết signing-certificate-v2 và tin cậy hệ thống Windows hiện tại, và báo cáo các trạng thái chữ ký, chuỗi, thu hồi, và dấu thời gian độc lậpTPdf.ValidatePadesTrustAsyncchụp nguồn gốc đã tải trước khi phân phối, báo cáo tiến trình theo giai đoạn cho công việc phân tích, mật mã, dựng chuỗi, AIA, OCSP, CRL, và dấu thời gian RFC 3161, và hỗ trợ hủy hợp tácTPadesTrustValidationOptionschọn tin cậy ngoại tuyến hoặc trực tuyến, xác thực thu hồi và dấu thời gian tùy chọn, thời gian chờ truy xuất URL có giới hạn, token hủy, và callback tiến trình
Bảo mật (Security)
- Dấu thời gian chữ ký và các token Document Time-stamp hiện xác thực ảnh thông điệp SHA-256, chữ ký CMS đính kèm, chuỗi TSA, và trạng thái thu hồi tùy chọn độc lập với chữ ký tài liệu thông thường
- Xác thực tin cậy không bao giờ băm bản sao PDFium đã lưu lại, mặc định truy xuất chứng chỉ chỉ từ bộ đệm ngoại tuyến, và báo cáo trạng thái không hỗ trợ hoặc không xác định thay vì coi bằng chứng tin cậy hoặc thu hồi gốc không khả dụng là hợp lệ
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.24.0
Version 3.23.0
Đã thêm (Added)
TPdf.RenewPadesArchiveTimestampvàRenewPadesArchiveTimestampToStreamnối thêm một Document Time-stamp RFC 3161 mới vào chuỗi chữ ký PAdES hiện có mà không thay đổi bất kỳ byte lịch sử nàoTPadesArchiveTimestampOptionsđiều khiển truy cập TSA, nonce, dung lượng token dự trữ, và làm mới DSS hoàn chỉnh tùy chọn trong khiTPadesArchiveTimestampReportghi lại mức nguồn và kết quả, độ dài chuỗi, độ dài byte, và định danh dấu thời gian trả về
Đã sửa (Fixed)
- Đầu ra PAdES B-LTA mới và làm mới khai báo ESIC ExtensionLevel 2, trong khi xác thực B-LT không còn yêu cầu Level 2 trừ khi có Document Time-stamp
Bảo mật (Security)
- Việc làm mới băm các byte gốc đã tải chính xác cộng với mọi cập nhật DSS được yêu cầu, từ chối nguồn mã hóa hoặc không đầy đủ, xác thực kết quả B-LTA có thể khám phá trước khi ghi đầu ra, và dàn đầu ra tệp trước khi thay thế
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.23.0
Version 3.22.0
Đã thêm (Added)
TPdf.AnalyzeSignatureRevisionstái dựng chuỗi phiên bản gia tăng gốc và trả về các thay đổi đối tượng theo từng chữ ký được phân loại theo quyền DocMDP và FieldMDPTPadesRevisionAnalysisReportphân biệt các cập nhật biểu mẫu, chú thích, chữ ký, và vật liệu xác thực được phép khỏi các thay đổi trang hoặc tài liệu không được phép, trường hợp chưa giải quyết, và định nghĩa bóng đáng ngờ
Bảo mật (Security)
- Phân tích phiên bản phát hiện định nghĩa đối tượng không được tham chiếu, định nghĩa lại đối tượng chữ ký, nội dung hiện hoạt, chuỗi phiên bản malformed, và đối tượng nén chưa giải quyết trong khi thực thi các ngân sách phiên bản, đối tượng, và thay đổi có giới hạn
- Phân tích luôn dùng tệp gốc đã tải, bộ đệm bộ nhớ, luồng tùy chỉnh, hoặc nguồn progressive hoàn tất thay vì byte PDFium ghi lại
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.22.0
Version 3.21.0
Đã thêm (Added)
TPdf.PreparePadesRemoteSignaturetạo một chỗ giữ chỗ chữ ký tách rời độ rộng cố định và trả về một yêu cầu bền vững chứa digest tài liệu SHA-256,ByteRangechính xác, tọa độ đặt chỗ, và dấu vân tay PDF đã chuẩn bịTPdf.CompletePadesRemoteSignaturehoàn tất các phiên ký HSM, đám mây, hoặc bị gián đoạn sau khi xác thực yêu cầu đã lưu và CMS trả vềTPdf.SavePadesRemoteSigningRequestvàTPdf.LoadPadesRemoteSigningRequestcung cấp định dạng phiên nhị phân có phiên bản và ổn định cho ranh giới tiến trình và máy
Bảo mật (Security)
- Việc hoàn tất từ chối PDF đã chuẩn bị bị sửa đổi, tọa độ
ByteRangebị thay đổi, chỗ giữ chỗ không trống bị tái sử dụng, giá trị CMS quá lớn, dạng SignedData không hỗ trợ, thuộc tính signing-certificate-v2 bị thiếu, và digest thông điệp CMS không khớp với tài liệu đã chuẩn bị TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.21.0
Version 3.20.0
Đã thêm (Added)
TPadesDssOptions.Vrisghi một từ điển/Type /VRIgián tiếp cho mỗi chữ ký, khóa bằng SHA-1 chữ hoa của giá trị/Contentsđã giải mã hoàn chỉnh bao gồm cả phần đệmTPadesDssVrichọn vật liệu chứng chỉ, OCSP, và CRL thông qua các chỉ mục đã xác thực trong khi ký PAdES B-LT và B-LTA hiện tự động tạo VRI của chữ ký mới
Đã thay đổi (Changed)
- Chứng chỉ DSS, phản hồi OCSP, và CRL được khử trùng lặp theo băm nội dung với thứ tự xuất hiện đầu ổn định, kiểm tra va chạm byte chính xác, và ánh xạ lại tham chiếu VRI trước khi bất kỳ byte đích nào được ghi
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.20.0
Version 3.19.0
Đã thêm (Added)
TPdf.GetStructuredTextchuyển trang hiện tại thành các bản ghi khối, dòng, và span có kiểu tái sử dụng trong khi bảo toàn chỉ mục ký tự nguồn, scalar Unicode, hình học, tên phông, kích thước, độ đậm, và góc văn bảnTPdfStructuredTextOptionschọn thứ tự content-stream hoặc bố cục vật lý, làm giàu phông và ngữ nghĩa tùy chọn, và ngân sách ký tự tối đa đóng khi lỗi- Các mảnh Tagged PDF và nội dung đọc được theo heuristic làm giàu khối với loại cấu trúc, cấp tiêu đề, ngôn ngữ, nguồn, và định danh phần tử cấu trúc trong khi văn bản thay thế của Figure không khớp vẫn được đại diện
Đã thay đổi (Changed)
- Trích xuất bố cục vật lý hiện dùng sắp xếp ký tự O(n log n), bộ đệm dòng và span tăng theo cấp số hình học, phân cụm dòng và cột, dựng Unicode có đệm, và bộ đệm phông của các đối tượng văn bản không rỗng kề nhau cho hiệu năng trang lớn khả dự
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.19.0
Version 3.18.0
Bảo mật (Security)
TPdf.SaveAsRedactedáp dụng mọi hình chữ nhật/Redactlên một ảnh chụp tài liệu cách ly, gỡ bỏ mỗi đối tượng trang cấp cao giao nhau, và sơn một hình chữ nhật thay thế đục mà không thay đổi tài liệu đã tải- Đầu ra đã redact gỡ bỏ chú thích redaction, tùy chọn gỡ bỏ các chú thích giao nhau khác, xóa các tệp đính kèm nhúng gốc, và loại bỏ
/AFcatalog, nội dung hiện hoạt, biểu mẫu, siêu dữ liệu, và các đối tượng phiên bản trước không thể tiếp cận TPdfRedactionOptionsđiều khiển màu thay thế, việc gỡ bỏ chú thích chồng lấp, và ngân sách quét đối tượng trang đóng khi lỗi trong khiTPdfRedactionReportghi lại mọi lần gỡ bỏ và chỉ số đầu raTPdfSanitiseOptions.StripAssociatedFileshiện gỡ bỏ các tham chiếu tệp liên kết cấp catalog theo mặc định
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.18.0
Version 3.17.0
Đã thêm (Added)
TPdf.RenderPagesParallelkết xuất đồng thời các yêu cầu trang dựa trên một trong khi mỗi worker sở hữu mô-đun PDFium, tài liệu, và trạng thái trang được tải độc lập bắt nguồn từ một ảnh chụp tài liệuTPdfParallelRenderOptionsđiều khiển DPI, số worker, độ xoay, cờ kết xuất gốc, màu nền, giới hạn pixel mỗi trang, và giới hạn đầu ra được giữ tổng hợpTPdfParallelRenderReportbảo toàn thứ tự yêu cầu và trả về các bộ đệm BGRA hoặc RGBA từ-trên-xuống do người gọi sở hữu với thành công, hủy, thất bại, kích thước, thời gian, và chi tiết chẩn đoán theo từng trang- Kết xuất worker progressive thăm dò
IPdfCancellationTokengiữa các khối gốc trong khi yêu cầu không hợp lệ và thất bại ngân sách vẫn cách ly vào kết quả tương ứng của chúng TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.17.0
Version 3.16.0
Đã thêm (Added)
TPdfEncryptionRevision.erR7thêm đầu ra ISO/TS 32003 AES-256-GCM với/V 6,/R 7,/CFM /AESV4, và phần mở rộng nhà phát triển PDF 2.0 bắt buộc- Mỗi chuỗi và luồng mã hóa nhận một IV 96-bit duy nhất, bản mã độ dài không đổi, và thẻ xác thực 128-bit, trong khi
EncryptMetadata = Falsebảo toàn byte luồng siêu dữ liệu DecryptAesGcmDocumentBytesxác thực mật khẩu người dùng hoặc chủ sở hữu, quyền đã mã hóa, dữ liệu PDF MAC độc lập tùy chọn, và mọi thẻ GCM trước khi trả về byte bản rõ tương thích PDFium- Đầu ra AESV4 có thể kết hợp với
TPdfEncryptOptions.EnableIntegrityProtectionđể xác thực GCM theo đối tượng và bảo vệ PDF MAC ISO/TS 32004 toàn tài liệu cùng tồn tại - Mã hóa hiện dùng các mục tham chiếu chéo classic hợp lệ thay vì diễn giải văn bản dạng đối tượng bên trong dữ liệu luồng thành đối tượng gián tiếp
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.16.0
Version 3.15.0
Đã thêm (Added)
TPdfEncryptOptions.EnableIntegrityProtectionghi mã xác thực PDF MAC độc lập ISO/TS 32004 cho tài liệu AES-256 Standard Security Handler phiên bản 5 và 6TPdf.ValidatePdfMacxác minh byte nguồn gốc chính xác,/ByteRangebao EOF nghiêm ngặt,AuthenticatedDataCMS, khóa tệp dẫn xuất từ mật khẩu, thuộc tính đã xác thực, khóa MAC được bọc, và giá trị HMACFPdfHmacthêm HMAC-SHA256 và HKDF-SHA256 trong khiFPdfAesthêm các nguyên thuỷ Key Wrap và unwrap có xác thực RFC 3394 AES-256TPdfMacValidationResultphân biệt mã xác thực hợp lệ, vắng mặt, không hợp lệ, và không hỗ trợ kèm văn bản chẩn đoánTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.15.0
Version 3.14.0
Đã thêm (Added)
TPdf.ValidatePadeshiện xác minh chữ ký CMS tách rời đối với chính xác các đoạn/ByteRangegốc trên Windows, bao gồm cả thuộc tính đã ký và giá trị chữ kýTPadesValidationResulthiển thị trạng thái toàn vẹn tổng thể cùng các trạng thái ByteRange, CMS,signing-certificate-v2, tin cậy hệ thống, thu hồi và dấu thời gian theo từng chữ ký, mà không lẫn lộn bằng chứng không được hỗ trợ hoặc chưa được kiểm tra với một chữ ký không hợp lệ- Liên kết chứng chỉ người ký được kiểm tra bằng SHA-256, chuỗi chứng chỉ dùng đánh giá tin cậy hệ thống Windows chỉ từ bộ đệm, và các mã lỗi gốc vẫn sẵn có để chẩn đoán
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.14.0
Version 3.13.1
Đã sửa (Fixed)
TPdf.ValidatePadeshiện kiểm tra tệp gốc, bộ nhớ có đệm, hoặc byte luồng tùy chỉnh thay vì bản sao PDFium đã lưu lại vốn có thể làm mất hiệu lực offset hoặc loại bỏ từ điển chữ ký- Kiểm tra
/ByteRangePAdES hiện chấp nhận chữ ký bao một phiên bản PDF hoàn chỉnh trước đó theo sau bởi các cập nhật gia tăng hợp lệ, đồng thời xác thực cả các phạm vi Document Time-stamp TPadesValidationResult.SourceStatusphân biệt xác thực nguồn gốc khỏi đầu vào progressive không khả dụng hoặc không đầy đủ, và các vị từ tuân thủ từ chối kết quả không có byte gốcTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.13.1
Version 3.13.0
Đã thêm (Added)
FPdfSha3cung cấp các nguyên thuỷ SHA3-256, SHA3-384, SHA3-512, và SHAKE256 không phụ thuộc cho ISO/TS 32001 và công việc mật mã PDF 2.x liên quan- Bối cảnh gia tăng hấp thụ đầu vào được chia tùy ý trong khi SHAKE256 hỗ trợ các lệnh gọi squeeze lặp lại và đầu ra vượt qua ranh giới tốc độ sponge
- Các trình hỗ trợ mảng byte một lần và thập lục phân chữ thường bổ sung cho API streaming, với vòng đời tường minh và xác thực kích thước trên Delphi, C++Builder, và Lazarus
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.13.0
Version 3.12.0
Đã thêm (Added)
TPdf.ImportFDFnhập dữ liệu biểu mẫu FDF từ tệp hoặc luồng và áp dụng các giá trị đã phân tích qua đường dẫn trường widget hiện cóFdfImportFromStreamvàFdfImportFromFilephân tích các trường phân cấp trực tiếp hoặc gián tiếp, chuỗi literal và thập lục phân PDF, PDFDocEncoding, văn bản Unicode, giá trị tên, và giá trị rỗng tường minh dưới các ngân sách tài nguyên có giới hạn- Xuất FDF hiện ghi tên trường và giá trị không phải ASCII dưới dạng chuỗi văn bản UTF-16BE tuân thủ tiêu chuẩn và thoát an toàn tên tệp nguồn
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.12.0
Version 3.11.0
Đã thêm (Added)
TPdf.DetectPageSkewkết xuất trang hiện tại ở DPI thấp và phát hiện góc nghiêng bằng cách chiếu pixel tối lên các góc xoay ứng viên, trả về góc tối đa hóa phương sai tổng hàng (căn dòng văn bản) với độ chính xác ~0.1 độTPdfSkewReportphơi bày góc đã phát hiện, độ tin cậy, và kích thước mẫuTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.11.0
Version 3.10.0
Đã thêm (Added)
TPdf.GetTextInReadingOrdertrích xuất văn bản trang hiện tại theo thứ tự content-stream thô hoặc bố cục vật lý (từ-trên-xuống, trái-sang-phải) quaFPDFText_GetCharBox+ trích xuất ký tự sắp theo vị trí, để văn bản nhiều cột và sắp xếp lại trực quan đọc tự nhiên- Enum
TPdfReadingOrderchọn giữaroContentOrdervàroPhysicalLayout TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.10.0
Version 3.09.0
Đã thêm (Added)
TPdfImageOptimizeOptions.PreserveBilevelbỏ qua hình ảnh bilevel 1-bit (ImageMask / quét line-art) trongOptimizeImagesđể việc giảm mẫu láng giềng-gần-nhất không phá hủy cạnh sắc nét của chúngTPdfImageOptimizeOptions.MinDimensionbỏ qua hình ảnh nhỏ hơn ngưỡng (thường là biểu tượng hoặc phần tử trang trí không hưởng lợi từ việc giảm thêm)TPdfImageOptimizeOptions.Defaultcung cấp điểm khởi đầu được khuyến nghị (mục tiêu 150 DPI, tỉ lệ 1.5, bảo toàn bilevel, kích thước tối thiểu 8)TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.09.0
Version 3.08.0
Đã thêm (Added)
TPdfTileCachecung cấp bộ đệm LRU có giới hạn của các ô trang đã kết xuất, khóa theo phiên bản tài liệu, trang, thu phóng, độ xoay, cờ kết xuất, và hình chữ nhật thiết bị, nên các ô không đổi không bị kết xuất lại khi sơn lại và các ô cũ từ lần lưu trước bị loại tự độngTTileKeyphơi bày khóa bộ đệm hợp thành với factory tĩnhCreatevà bộ so sánhEqualsTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.08.0
Version 3.07.0
Đã thêm (Added)
TPdf.GetAnnotationFontColorvàTPdf.SetAnnotationFontColorbọcFPDFAnnot_GetFontColorvàFPDFAnnot_SetFontColortrước đây đã liên kết nhưng chưa sử dụng, phơi bày đọc và ghi màu văn bản widget cho chỉnh sửa trường biểu mẫu mà không chạm trực tiếp vào từ điển chú thíchTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.07.0
Version 3.06.0
Đã thêm (Added)
TPdf.RenderPageBandedkết xuất trang hiện tại theo các dải ngang qua callback, nên áp phích và trang kỹ thuật có thể được xuất mà không bao giờ cấp phát bitmap đích đầy đủ — mỗi dải kết xuất vào mộtTBitmapmới tạo với chiều cao dải được yêu cầu và được giải phóng sau khi callback trả vềTPdfBandCallbackphơi bày hợp đồng mỗi dải (chỉ mục dải, offset top-y, bitmap) với giá trị trả về Boolean cho phép người gọi hủy sớm kết xuất theo dảiTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.06.0
Version 3.05.0
Đã thêm (Added)
TPdf.RenderPageProgressiveWithColorSchemeđiều khiển vòng kết xuất progressive gốc với bảng màu thị lực thấp quaFPDF_RenderPageBitmapWithColorScheme_Start, cho phép người gọi ghi đè màu tô / viền path và màu tô / viền văn bản cho trợ năng trong khi giữ vòng lặp Continue nhận thức việc hủyTPdfColorSchemephơi bày bốn trường ghi đèTColorvớiDefaultủy quyền cho màu dựng sẵn của PDFium khi mọi trường làclDefaultTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.05.0
Version 3.04.0
Đã thêm (Added)
TPdf.ExportFDFtuần tự hóa giá trị trường biểu mẫu thành tài liệu FDF (ISO 32000-1 §12.7.11) bên cạnh đường dẫn XFDF hiện có, tái sử dụng cùng mô hình dữ liệuTXfdfFieldđể người gọi thu thập trường một lần và phát hành định dạng nào tùy ýFdfExportToStreamvàFdfExportToFiletrongFPdfXfdfphơi bày trình tuần tự hóa FDF cấp thấp cho người gọi dựng bộ sưu tập trường độc lập vớiTPdfđã tảiTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.04.0
Version 3.03.0
Đã thêm (Added)
TPdf.SaveAsSanitisedghi một bản sao đơn phiên bản sạch loại bỏ nội dung hiện hoạt khỏi catalog (/OpenAction,/AAcatalog,/Names,/AcroForm,/Metadata) rồi tỉa các đối tượng không thể tiếp cận để phần thân JavaScript, action, và tệp đính kèm mồ côi biến mất khỏi phần thân tệpTPdfSanitiseOptionsphơi bày điều khiển loại bỏ độc lập theo từng vector cộng thêm bước tỉa khả năng tiếp cận tùy chọn;TPdfSanitiseReportghi lại số mục đã loại, số đối tượng đã tỉa, số byte, và mọi lỗiTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.03.0
Version 3.02.0
Đã thêm (Added)
TPdf.SaveAsPageLabelledghi một bản sao PDF đầy đủ mà cây số/PageLabelscủa catalog được thay bằng các phạm vi cung cấp, áp dụng kiểu đánh số thập phân, La Mã hoa/thường, và chữ hoa/thường với chuỗi văn bản tiền tố tùy chọn và số bắt đầu theo ISO 32000-1 §12.4.2TPdfPageLabelRange,TPdfPageLabelRanges,TPdfPageLabelStyle, vàTPdfPageLabelReportphơi bày mô hình phạm vi, enum kiểu, và số byte/phạm vi cho mỗi lần lưu- Các mục
/PageLabelscatalog hiện có được phát hiện và từ chối trừ khi truyềnReplaceExisting=True, khi đó mục cũ bị loại trước khi các phạm vi mới được chèn TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.02.0
Version 3.01.0
Đã thêm (Added)
TPdf.FlattenPageRotationnén/Rotatehiện tại của mọi trang vào luồng nội dung, hộp trang, và hình chữ nhật chú thích, rồi đặt lại/Rotatevề 0 — bọcFPDFPageObj_TransformF+FPDFAnnot_GetRect/SetRect+FPDFPage_SetMediaBox/SetCropBox+FPDFPage_SetRotationđể bố cục trực quan được bảo toàn mà không dựa vào gợi ý hiển thị độ xoayTPdfFlattenRotationOptionsphơi bày biến đổi chú thích mỗi trang, hoán đổi hộp trang, và điều khiển tự cập nhật;TPdfFlattenRotationReportghi lại các trang đã xử lý, bỏ qua, và thất bại cộng tổng đối tượng và chú thích đã biến đổiTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.01.0
Version 3.00.0
Đã thêm (Added)
TPdf.StampPagesFromPdfđóng dấu một trang nguồn dưới dạng lớp phủ hoặc lớp dưới Form XObject được định vị, tỉ lệ, tùy chọn xoay trên một hoặc nhiều trang đích, bọcCreateXObjectFromPage+FPDFPageObj_SetMatrix+FPDFPageObj_SetBlendMode+FPDFPage_InsertObjectAtIndexvới chính sách hộp trang, neo, lề, tỉ lệ, độ xoay, trộn, và thứ tự z tường minhTPdfOverlayOptionsvàTPdfOverlayReportphơi bày điều khiển vị trí, biến đổi, trộn, và thứ tự z cộng số lượng đóng dấu, thất bại, và bỏ qua mỗi trangTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 3.00.0
Version 2.99.0
Đã thêm (Added)
TPdf.RefreshAppearancechọn lọc tái tạo luồng appearance của một widget duy nhất thông quaFPDFAnnot_SetAP, tránh phải dựng lại appearance toàn trang quaNeedAppearancesTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.99.0
Version 2.98.0
Đã thêm (Added)
TPdfView.MouseDownhiện định tuyến các sự kiện nút chuột phải đến engine điền biểu mẫu gốc quaFORM_OnRButtonDown, cho phép menu ngữ cảnh và tương tác widget khi nhấp chuột phải- Các mục bản đồ lộ trình 78 (ánh xạ chú thích liên kết), 82 (trình bày widget), và 83 (mô hình thuộc tính cấu trúc) được xác nhận đã hoàn thành qua hạ tầng hiện có
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.98.0
Version 2.97.0
Đã thêm (Added)
TPdf.SetDeterministicTimevàTPdf.RestoreActualTimecho phép kiểm thử và bản dựng tái lập chèn thời gian tạo, sửa đổi, và hiện tại cố định qua các callback gốc được hỗ trợTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.97.0
Version 2.96.0
Đã thêm (Added)
TPdf.GetWidgetAdditionalActionJavaScriptđọc JavaScript hành động bổ sung của widget cho một kích hoạt sự kiện cho trước quaFPDFAnnot_GetFormAdditionalActionJavaScriptmà không thực thi bất kỳ script nàoTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.96.0
Version 2.95.0
Đã thêm (Added)
TPdf.GetObjectTexttrích xuất văn bản Unicode của một đối tượng trang văn bản quaFPDFTextObj_GetTextđể chỉnh sửa nội dung chính xác và chẩn đoán bảng mãTPdf.GetObjectsByTypetrả về chỉ mục của mọi đối tượng trang khớp một danh mục (văn bản, path, hình ảnh, biểu mẫu, đổ bóng) để xuất danh mục chọn lọcTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.95.0
Version 2.94.0
Đã thêm (Added)
TPdf.AttachmentHasKey,GetAttachmentStringValue, vàSetAttachmentStringValueđọc, ghi, và thăm dò các giá trị phần mở rộng file-spec tùy chỉnh trên tệp đính kèm nhúngTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.94.0
Version 2.93.0
Đã thêm (Added)
TPdf.InsertObjectAtIndexchèn một đối tượng trang tại vị trí chồng được yêu cầu quaFPDFPage_InsertObjectAtIndexthay vì luôn nối thêm vào cuốiTPdf.UpdateAnnotationObjectcam kết một đối tượng hình thức chú thích đã chỉnh sửa quaFPDFAnnot_UpdateObjectđể các thay đổi trên đối tượng trang thuộc chú thích được bền vững đáng tin cậyTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.93.0
Version 2.92.0
Đã thêm (Added)
TPdf.InsertClipPathtạo một path cắt hình chữ nhật và chèn nó vào trang hiện tại qua các đường dẫnFPDF_CreateClipPathvàFPDFPage_InsertClipPathgốc, bổ trợ cho trình kiểm traPageObjectClipPathhiện cóTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.92.0
Version 2.91.0
Đã thêm (Added)
TPdf.GetPageComplexityquét trang hiện tại và báo cáo số đối tượng hình ảnh, path, và văn bản cộng tổng đoạn path, tổng pixel hình ảnh, và sự hiện diện độ trong để lập kế hoạch kết xuấtTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.91.0
Version 2.90.0
Đã thêm (Added)
TPdf.IsAnnotationSubtypeSupportedhỏi DLL PDFium đã tải hỗ trợ những kiểu con chú thích nào trước khi chỉnh sửaTPdf.ChooseRenderFlagschọn cờ kết xuất gốc (halftone, bộ đệm hình ảnh giới hạn) từ tỉ lệ cuối và kích thước đích để giảm mẫu hình ảnh thích ứngTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.90.0
Version 2.89.0
Đã thêm (Added)
TPdf.GetTextRenderModephơi bày chế độ kết xuất văn bản gốc (tô, viền, cắt) của một đối tượng trang văn bản để chẩn đoán sáng tácTPdf.GetTextObjectRenderedBitmapkết xuất một đối tượng văn bản duy nhất thành bitmap cách ly qua đường dẫnFPDFTextObj_GetRenderedBitmapgốcTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.89.0
Version 2.88.0
Đã thêm (Added)
TPdf.GetThumbnailhiện chuyển sang kết xuất thay thế khi trang không có hình thu nhỏ nhúng, hiện thực ưu tiên hình-thu-nhỏ-nhúng-trướcTPdf.LinkAtPointtrả về liệu một liên kết gốc có tồn tại tại tọa độ không gian trang bằngFPDFLink_GetLinkAtPointthay vì chỉ quét hình chữ nhậtTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.88.0
Version 2.87.0
Đã thêm (Added)
TPdf.AuditActiveContenttrả về ảnh chụpTPdfActiveContentAuditvề số hành động JavaScript, số tệp nhúng, số chữ ký, kiểu biểu mẫu XFA, và quyền tài liệu mà không thực thi bất kỳ script hoặc hành động nàoTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.87.0
Version 2.86.0
Đã thêm (Added)
TPdf.GetFeatureInventoryquét mọi trang một lần và trả về bản ghi hợp nhất về số đối tượng văn bản, path, hình ảnh, form XObject, và đổ bóng bên cạnh các dữ kiện tệp đính kèm, chữ ký, kiểu biểu mẫu, quyền, và phiên bản PDFTPdfFeatureInventorytổng hợp các dữ kiện toàn tài liệu trước đây yêu cầu các lệnh gọi thuộc tính riêng lẻ thành một ảnh chụp duy nhấtTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.86.0
Version 2.85.0
Đã thêm (Added)
TPdf.SaveAsReproducibleghi lại tài liệu sao cho hai lần lưu của cùng trạng thái trong bộ nhớ tạo đầu ra giống hệt nhau về byte- Dấu thời gian
/Infokhông tất định (/CreationDate,/ModDate) bị loại và/IDnguồn (dẫn xuất từ byte phụ thuộc đồng hồ) bị bỏ qua, trong khi thứ tự và thế hệ đối tượng giữ ổn định TPdfReproducibleReportbáo cáo số đối tượng giữ lại và đã tỉa cộng số mục dấu thời gian đã loạiTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.85.0
Version 2.84.0
Đã thêm (Added)
TPdf.SaveAsInlineImagesExternalisedghi lại tài liệu trích xuất mọi hình ảnh nội tuyếnBI/ID/EIthành image XObject tái sử dụng và thay khối nội tuyến bằng toán tử/ImN Do- Các viết tắt trong từ điển hình ảnh nội tuyến (
/W,/H,/BPC,/CS,/F, giá trị không gian màu, và giá trị bộ lọc) được mở rộng thành tên image-XObject đầy đủ để đối tượng trích xuất tuân thủ tiêu chuẩn - Từ điển
/Resources /XObjectcủa trang được cập nhật với các tham chiếu XObject mới, và luồng nội dung ghi lại được nén Flate TPdfInlineImageExternaliseReportbáo cáo số đã ngoại hóa, bỏ qua, và thất bại cộng số XObject đã tạoTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.84.0
Version 2.83.0
Đã thêm (Added)
TPdf.SaveAsFlateRecompressedghi lại tài liệu và mã hóa lại các luồngFlateDecodeđủ điều kiện ở mức nén tối đa, chỉ thay một luồng khi số byte tiết kiệm đo được vượt ngưỡng do người gọi đặtTPdfFlateRecompressOptionschọn mức tiết kiệm tối thiểu theo byte và tỉ lệ tiết kiệm tối thiểu để các luồng đã tối ưu giữ nguyênTPdfFlateRecompressReportbáo cáo số luồng đã nén lại, bỏ qua, và thất bại cùng tổng số byte luồng gốc và đã nén lại- Số đối tượng và thế hệ giữ ổn định; chỉ tải trọng luồng đã nén lại và giá trị
/Lengthtrực tiếp của chúng thay đổi, nên mọi tham chiếu chéo còn tồn tại vẫn hợp lệ TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.83.0
Version 2.82.0
Đã thêm (Added)
TPdf.OptimizeImagesduyệt mọi đối tượng hình ảnh trang và giảm mẫu những hình có DPI vị trí hiệu dụng vượt mục tiêu do người gọi chọn, rồi cam kết mỗi trang đã chạm qua trình dựng nội dung gốcTPdfImageOptimizeOptionschọn DPI mục tiêu và tỉ lệ tối thiểu để chỉ những hình thực sự lấy mẫu quá mới được mã hóa lạiTPdfImageOptimizeReportbáo cáo số hình ảnh đã tối ưu, bỏ qua, và thất bại cùng thông điệp thất bại có cấu trúc- Việc giảm mẫu dùng một lượt láng giềng-gần-nhất trên bộ đệm bitmap PDFium gốc, bảo toàn định dạng nguồn, stride, và kênh alpha, và
FPDFImageObj_SetBitmapmã hóa lại hình còn lại TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.82.0
Version 2.81.0
Đã thêm (Added)
TPdf.SaveAsDeduplicatedghi lại tài liệu thành một phiên bản sạch duy nhất gộp các phông, hình ảnh, và form XObject tương thích vào một đại diện dùng chung- Một dấu vân tay nội dung đệ quy kết hợp mỗi từ điển tài nguyên, đồ thị con đầy đủ tiếp cận được, và tải trọng luồng thô của nó, nên các bản trùng lặp chỉ hợp nhất khi toàn bộ nội dung giống hệt nhau
- Mọi tham chiếu chéo đến bản trùng đã bị gộp được ghi lại thành đại diện còn tồn tại trong khi bảng tham chiếu chéo classic dựng lại giữ số đối tượng ổn định
TPdfDedupReportbáo cáo số đối tượng giữ lại và đã tỉa cộng số phông, hình ảnh, và form XObject đã gộp theo từng danh mụcTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.81.0
Version 2.80.0
Đã thêm (Added)
TPdf.SaveAsReachableghi lại tài liệu thành một phiên bản sạch duy nhất chỉ giữ các đối tượng gián tiếp tiếp cận được từ catalog và từ điển /Info của trailerTPdfPruneReportbáo cáo số đối tượng gián tiếp giữ lại và đã tỉa cùng kích thước byte nguồn và đầu ra, và lý do thất bại có cấu trúc cho đầu vào mã hóa hoặc malformed- Các đối tượng mồ côi không thể tiếp cận để lại bởi cập nhật gia tăng, hợp nhất trang, hoặc lưu đã sửa được quét sạch, trong khi tham chiếu chéo và trailer classic dựng lại bảo toàn
/Root,/Info, và/IDmà không đánh số lại TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.80.0
Version 2.79.0
Đã thêm (Added)
TPdf.CreateDocumentSearchtạo tìm kiếm toàn tài liệu tiến hoặc lùi trả về một kết quả khớp mỗi lần mà không dựng chỉ mục văn bản toàn tài liệuTPdfDocumentSearchResultbáo cáo trang dựa trên một, phạm vi ký tự, văn bản khớp, và hình chữ nhật không gian trang cho mọi kết quả- Phiên tìm kiếm chấp nhận
IPdfCancellationToken, chỉ giữ handle trang và văn bản PDFium hiện tại, và kết thúc an toàn khi tài liệu đóng TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.79.0
Version 2.78.0
Đã thay đổi (Changed)
TPdfRangeRequestSchedulerhiện chiếm quyền các chuyển giao ưu tiên thấp hơn chồng lấp để các gợi ý PDFium trọng yếu trang không phải chờ sau các tải nền- Các byte thưa khả dụng từ bên ngoài hủy các chuyển giao hiện hoạt dư thừa, trong khi callback vận chuyển bị vượt qua hoặc trùng lặp trả về False mà không công bố vùng phủ cũ
- Việc thăng cấp ưu tiên bảo toàn lịch sử thử lại độc lập, và chiếm quyền vận chuyển không còn tiêu ngân sách thử lại của các đuôi phạm vi không bị ảnh hưởng
TPdfRangeRequestStatistics.SupersededRequestCountbáo cáo công việc vận chuyển bị thay thế bởi gợi ý ưu tiên cao hơn hoặc vùng phủ cung cấp từ bên ngoàiTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.78.0
Version 2.77.0
Đã thêm (Added)
TPdf.SaveAsNormalizedContentghi nội dung trang chuẩn hóa cú pháp vào luồng hoặc tệp thay thế nguyên tử và báo cáo số trang chuẩn hóa, bỏ qua, và hợp nhấtNormalizePdfContentSequencecung cấp chuẩn hóa token độc lập có giới hạn cho các chuỗi content-stream đã giải mã
Đã thay đổi (Changed)
- Mảng
/Contentscủa trang hiện có thể hợp nhất thành một luồng trong khi bảo toàn chuỗi, tên, tải trọng hình ảnh nội tuyến, toán tử không rõ, và trạng thái đồ họa chéo luồng - Token malformed, phạm vi trạng thái không cân bằng, bộ lọc không hỗ trợ, đầu vào mã hóa, và ghi lại tài liệu đã ký có chính sách tường minh và báo cáo trạng thái có cấu trúc
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.77.0
Version 2.76.0
Đã thêm (Added)
TPdfStreamInspectorkiểm kê các đối tượng luồng PDF vật lý tùy ý và báo cáo offset đối tượng, độ dài thô, chuỗi bộ lọc, DecodeParms, điểm đánh dấu tệp ngoài, trạng thái mã hóa, và đường dẫn hình ảnh hoặc tệp đính kèm gốcCopyRawDatasao chép tải trọng mã hóa hoàn chỉnh hoặc cửa sổ byte đã xác thực, trong khiDecodeDataáp dụng ASCIIHex, ASCII85, LZW, Flate, RunLength, TIFF 8-bit, và bộ dự đoán PNG theo thứ tự khai báoTPdfStreamInspectOptionsgiới hạn tài nguyên nguồn, thô, giải mã, từ điển, số luồng, và tỉ lệ mở rộng, với báo cáo có cấu trúc cho giới hạn, dữ liệu malformed, codec không hỗ trợ, mã hóa, và lỗi ghi
Đã thay đổi (Changed)
- Việc giải quyết độ dài luồng hiện phơi bày khoảng chính xác cho giá trị
/Lengthtrực tiếp và gián tiếp, bao gồm luồng độ dài không và tải trọng chứa chuỗi literalendstream TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.76.0
Version 2.75.0
Đã thêm (Added)
TPdfLoadOptionsthêm chính sách tương thích, nghiêm ngặt, và khôi phục cho việc tải tệp, bộ nhớ, khoảng byte, và luồng tùy chỉnhTPdfLoadReportbáo cáo lộ trình khôi phục gốc, tính hợp lệ xref, offset hư hại, xung đột mục, số phiên bản, ngân sách kiểm toán, và vấn đề có cấu trúc cho tài liệu classic, hybrid, và xref-streamTPdf.SaveAsRepairedtạo bản sao đơn phiên bản đầy đủ và tải nghiêm ngặt độc lập nó trước khi giao luồng đã xác thực hoặc thay thế nguyên tử tệp đích
Đã thay đổi (Changed)
- Các nạp chồng tải hiện có giữ hành vi tương thích và hiện công bố tính hợp lệ xref gốc và trạng thái khôi phục qua
LastLoadReport - Tải nghiêm ngặt từ chối tài liệu đã yêu cầu dựng lại xref gốc hoặc thất bại kiểm toán cấu trúc, trong khi đầu ra sửa chữa đã ký yêu cầu ủy quyền người gọi rõ ràng
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.75.0
Version 2.74.0
Đã thêm (Added)
TPdf.MergeFileshợp nhất các danh sách nguồn dựa tệp với phạm vi trang và mật khẩu theo từng nguồn trong khi giữ tối đa một tài liệu nguồn mởTPdfBatchMergeOptionsthêm xử lý lỗi dừng hoặc bỏ qua, nhập theo phạm vi nguồn hoặc theo khối, chính sách biểu mẫu và dàn ý, điều khiển chèn, callback tiến trình, việc hủy, sao chép ưu tiên trình xem, và điều khiển hoàn tácTPdfBatchMergeReportbáo cáo các trang đã cam kết và hoàn tác, kết quả nguồn, lệnh gọi nhập gốc, lô lớn nhất, nguồn mở đỉnh, phát hiện chính sách, vấn đề, và trạng thái cuối
Đã thay đổi (Changed)
- Đường dẫn lô mặc định thực hiện một lần nhập trang gốc mỗi nguồn để PDFium tái sử dụng các đối tượng nhân bản xuyên suốt nguồn đó, rồi đóng nguồn trước khi mở tệp tiếp theo
- Chế độ khối cung cấp điểm hủy mịn hơn và lô gốc nhỏ hơn, trong khi nguồn một phần thất bại và kết quả dừng hoặc hủy có thể gỡ bỏ mọi trang do thao tác chèn
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.74.0
Version 2.73.0
Đã thêm (Added)
TPdfRandomAccessStorecung cấp I/O tuần tự và định vị an toàn luồng, giữ nội dung nhỏ trong bộ nhớ có giới hạn, và chỉ tràn một lần sang bộ nhớ tạm riêng tư tại ngưỡng do người gọi chọnTPdf.SaveMemoryLimitvàSaveTemporaryDirectorycấu hình dàn lưu, trong khiLastSaveSpillCountvàLastSaveLargestMemoryBufferphơi bày chẩn đoán đo được cho mỗi lần lưu
Đã thay đổi (Changed)
- Các bộ đệm dàn lưu, chuyển đổi tiêu chuẩn, xác thực, mã hóa, DSS, và PAdES hiện chia sẻ bộ nhớ làm việc có giới hạn với tệp tràn độc quyền xóa-khi-đóng và xóa sạch bộ nhớ
- Callback khối PDFium tùy chỉnh tuần tự hóa các truy tìm luồng thông thường và dùng các lệnh đọc định vị độc lập con trỏ khi được hỗ trợ bởi
TPdfRandomAccessStore - Quét khả năng XFA dựa tệp hiện đọc các khối chồng lấp kích thước cố định thay vì sao chép PDF hoàn chỉnh vào bộ nhớ
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.73.0
Version 2.72.0
Đã thêm (Added)
TPdf.BeginIncrementalSave,CommitIncrementalSave, vàEndIncrementalSavecung cấp phiên phiên bản chỉ nối thêm các đối tượng gián tiếp đã thay đổi hoặc mới tạoTPdfIncrementalCommitInfobáo cáo số đối tượng đã thay đổi, byte nối thêm, tổng byte đầu ra, và số phiên bản thành công cho mỗi lần commit
Đã thay đổi (Changed)
- Mọi commit bẩn bảo toàn đầu ra trước đó hoàn chỉnh dưới dạng tiền tố byte chính xác, không phát hành phiên bản khi không có gì thay đổi, và tiếp tục định dạng classic hoặc xref-stream của nguồn
- Đầu ra gia tăng xref-stream gốc được sửa với kiểu, mục tự, độ dài, chỉ mục, và dấu kết thúc đối tượng bắt buộc của nó trước khi xử lý tiếp
- Tài liệu mã hóa bị từ chối trước khi phiên bắt đầu, trong khi tài liệu đã ký yêu cầu quyền người gọi rõ ràng để chính sách chữ ký không thể bị vô tình vượt qua
- Nạp chồng tệp hoàn tất tệp tạm anh em trước khi thay thế nguyên tử đích và hoàn tác trạng thái phiên sau mọi lỗi ghi hoặc thay thế
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.72.0
Version 2.71.0
Đã thêm (Added)
TPdf.SaveAsObjectStreamghi tệp PDF 1.5+ với các nhóm đối tượng nén có giới hạn và luồng xref thuần chứa các mục type-2 hoàn chỉnhPackPdfObjectStreamscó thể hiện đại hóa đầu vào classic, hybrid, xref-stream, và object-stream hiện có sau khi giải quyết phiên bản hiện hoạt
Đã thay đổi (Changed)
- Sắp xếp đối tượng cục bộ trang, độ rộng trường xref thích ứng, truy cập catalog trực tiếp, và trần thành viên và byte giải mã có thể cấu hình cân bằng kích thước tệp với hiệu năng truy cập ngẫu nhiên
- Nạp chồng tệp hoàn tất tệp tạm anh em trước khi thay thế nguyên tử đích, trong khi các tùy chọn gia tăng, phiên bản, và nhóm không hợp lệ bị từ chối trước khi đầu ra bắt đầu
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.71.0
Version 2.70.0
Đã thêm (Added)
TPdf.SaveAsLinearizedghi một PDF Fast Web View thực sự vào luồng hoặc tệp dùng nhóm đối tượng trang-đầu, hai phần tham chiếu chéo, và bảng gợi ý offset-trang và đối-tượng-dùng-chung của Phụ lục F- Các thành viên object-stream hiện hoạt được vật chất hóa tự động, cho phép đầu vào xref-stream và object-stream thành đầu ra thân thiện phạm vi mà không thay đổi nội dung trang hiển thị
Đã thay đổi (Changed)
- Nạp chồng tệp hoàn tất tệp tạm anh em trước khi thay thế nguyên tử đích, trong khi nạp chồng luồng giữ các tùy chọn lưu PDFium thông thường và kiểm tra phiên bản tường minh
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.70.0
Version 2.69.0
Đã thêm (Added)
TPdfRangeRequestSchedulerchuyển các gợi ý khoảng byte PDFium thành công việc vận chuyển ưu tiên, hợp nhất, giới hạn kích thước mà không ép tải liên tục- Hoàn tất đầy đủ và một phần, thử lại có giới hạn, khử trùng lặp tính khả dụng thưa, thống kê yêu cầu, và hủy an toàn thế hệ hỗ trợ HTTP Range và các đường ống vận chuyển tùy chỉnh
TPdfProgressiveDocument.RangeRequeststự động nhận các gợi ý tài liệu, biểu mẫu, và trang, chỉ thăng cấp byte chính xác chặn một trang tương tác
Đã thay đổi (Changed)
CancelProgressiveLoadhiện hủy công việc phạm vi hiện hoạt trước khi tháo dỡ tính khả dụng và luồng gốc, và các hoàn tất vận chuyển cũ được bỏ qua an toànTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.69.0
Version 2.68.0
Đã thêm (Added)
TPdfProgressiveDocumentgiữ phiên tính khả dụng của PDFium tồn tại trong khi luồng truy cập ngẫu nhiên từ xa hoặc đang lớn nhận các khoảng byte PDFium yêu cầuCheckDocumentAvailability,CheckFormAvailability, vàLoadAvailablePagetrả về gợi ýTPdfDownloadRangehợp nhất để máy chủ chỉ lấy dữ liệu cần thiết để mở và hiển thị một trang tuyến tính hóaAvailableByteCounthỗ trợ tải liên tục đơn điệu, trong khiOnDataAvailablehỗ trợ bộ đệm phạm vi thưa và ngoài thứ tự
Đã thay đổi (Changed)
- Tệp tuyến tính hóa dùng cổng tài liệu, biểu mẫu, và trang progressive gốc của PDFium; tệp không tuyến tính hóa tự động chuyển sang trình tải luồng tùy chỉnh gốc sau khi tệp hoàn chỉnh có mặt
TPdfStreamAdaptercó thể phơi bày kích thước cuối logic khác với byte hiện lưu, trong khi bảo toàn giới hạnFPDF_FILEACCESS4 GiB tường minhTPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.68.0
Version 2.67.0
Đã thêm (Added)
TPdfView.AllowFormEventstắt các sự kiện chuột, bàn phím và tiêu điểm mà trình xem chuyển tiếp đến lớp điền biểu mẫu, cho trình xem chỉ đọc hoặc tự điều khiển tương tác biểu mẫu- Trường biểu mẫu vẫn kết xuất bình thường khi tắt: tải và đóng trang được cố ý để không bị cổng, vì những thao tác đó khởi tạo lớp biểu mẫu thay vì phản ứng với đầu vào
- Công tắc này tham gia các công tắc
AllowUserPageChangevàAllowUserTextSelectionhiện có và mặc định True, nên hành vi hiện có không đổi
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.67.0
Version 2.66.0
Đã thêm (Added)
- Các hành động được đặt tên mà tài liệu phát sinh (ISO 32000-1 §12.6.4.11) hiện đến máy chủ qua sự kiện
OnNamedActionmới; trước đây mọi hành động trong số đó đều bị loại bỏ - Khi không được xử lý, bốn tên điều hướng chuẩn —
NextPage,PrevPage,FirstPage,LastPage— di chuyển trang, kẹp tại trang đầu và cuối thay vì vòng qua TPdf.PerformNamedActioncho phép ứng dụng kích hoạt cùng hành vi trực tiếp, trả về False cho tên không có ý nghĩa do thư viện cung cấp
Đã sửa (Fixed)
- Một kiểm tra mã hóa đo thân luồng bằng cách quét ngược từ
endstream, thỉnh thoảng nhầm byte bản mã thành dấu kết thúc dòng và báo một lỗi gián đoạn; thư viện vẫn đúng xuyên suốt
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.66.0
Version 2.65.0
Đã thêm (Added)
BuildToUnicodeCMaptạo ToUnicode CMap (ISO 32000-1 §9.10.3) mà phông CID cần để văn bản của nó có thể được sao chép, tìm kiếm và đọc bởi công nghệ trợ giúp — thiếu nó văn bản kết xuất đúng nhưng trích xuất ra không có gì- Các mục được chia khối tại giới hạn 100-mỗi-khối mà đặc tả đặt, glyph trùng lặp được ghi một lần, và
.notdefbị bỏ qua - CMap tuân theo quy ước CID = GID, nên không cần luồng
CIDToGIDMapbên cạnh nó
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.65.0
Version 2.64.0
Đã thêm (Added)
- Chú thích ink và stamp tự vẽ từ các đối tượng trang riêng của chúng thay vì từ luồng nội dung trang, và những đối tượng đó hiện tiếp cận được:
AnnotationObjectCountvàAnnotationObjectInfođọc chúng,AddPathToAnnotationđưa cho chú thích một path dựng bằngCreatePath, vàRemoveAnnotationObjectxóa một đối tượng - Dựng hình thức của stamp không còn yêu cầu công cụ ngoài: tạo path như thường lệ, rồi đưa nó cho chú thích thay vì cho trang
- PDFium chỉ chấp nhận đối tượng trang trên các kiểu con ink và stamp, nên mọi kiểu con khác bị từ chối với thông điệp nêu tên hạn chế thay vì thất bại mơ hồ
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.64.0
Version 2.63.0
Đã thêm (Added)
TPdf.AddStandardFontTextvẽ văn bản với một trong 14 phông mà mọi trình đọc PDF bắt buộc phải cung cấp, không nhúng chương trình phông nào — tệp kết quả nhỏ hơn rõ rệt so với cùng văn bản vẽ bằngAddText, vốn nhúng mặt phông hệ thống mà nó tìm thấy- Enum
TPdfStandardFontmới đặt tên cả 14 mặt phông, nên người gọi không thể gõ sai tên phông cơ sở; PDFium khớp những tên đó chính xác và một lỗi chính tả sẽ lặng lẽ không cho phông - PDF/A và PDF/X đều yêu cầu mọi phông được nhúng, nên đầu ra nhắm đến những hồ sơ đó nên tiếp tục dùng
AddText
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.63.0
Version 2.62.0
Đã thêm (Added)
TPdf.TextObjectGlyphOutlinetrả về đường viền của một glyph thuộc phông của đối tượng văn bản dưới dạng các đoạn path, để chuyển văn bản thành nghệ thuật vector hoặc kiểm tra glyph mà việc thay phông có thể đã làm thay đổi- Kết quả tái sử dụng kiểu
TPdfPathSegmentshiện có, nên nó đọc y hệt như đường viền của một đối tượng path đã vẽ - Tọa độ nằm trong không gian thiết kế riêng của phông, được chuẩn hóa để một em là 1.0; kích thước phông yêu cầu không tỉ lệ chúng, nên người gọi muốn đơn vị thiết bị phải tự nhân với kích thước điểm
- Kết quả rỗng nghĩa là phông không phơi bày đường viền cho glyph đó, điều này không phải lỗi; yêu cầu glyph của đối tượng không phải văn bản sẽ nâng ngoại lệ
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.62.0
Version 2.61.0
Đã thêm (Added)
TPdf.InspectAvailabilitybáo cáo những gì PDFium có thể nói về một PDF mà không tải nó thành tài liệu: tệp có tuyến tính hóa không (“tối ưu web”), phân tích đầy đủ có thành công không, nó có mang dữ liệu biểu mẫu không, và trình xem sẽ hiển thị trang nào trước- Các kiểu
TPdfAvailability,TPdfLinearizationvàTPdfFormAvailabilitymới mang các câu trả lời; luồng được đọc nhưng không giữ lại, và vị trí của nó được khôi phục khi trả về - Điều này khép khoảng trống cuối cùng trong họ
FPDFAvail_*, vốn đã được liên kết và tải nhưng không có người gọi nào trong thư viện - Delphi, Lazarus và C++Builder mỗi nền tảng bao phủ các dữ kiện được báo cáo, bảo đảm vị trí luồng, và việc từ chối luồng nil
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.61.0
Version 2.60.0
Đã thêm (Added)
- Nội dung được đánh dấu (ISO 32000-1 §14.6) hiện tiếp cận được từ API cấp cao:
PageObjectMarksđọc mọi thẻ BDC và danh sách thuộc tính của nó khỏi một đối tượng trang,AddPageObjectMarkghi một thẻ,RemovePageObjectMarkxóa một thẻ, vàPageObjectMarkedContentIDbáo cáo MCID - Các kiểu
TPdfContentMark,TPdfContentMarkParamvàTPdfMarkParamKindmới mang tên thẻ và tham số có kiểu của nó (nguyên, float, chuỗi, blob), với loại giá trị được giải quyết từ PDFium thay vì đoán từ getter nào thành công - Thêm dấu dựng lại luồng nội dung trang, nên thẻ sống sót qua lần lưu; điều này phải tường minh vì
SaveAskhông tự tái tạo nội dung - Delphi, Lazarus và C++Builder mỗi nền tảng mang sáu trường hợp, gồm một trường hợp giải nén luồng nội dung đã lưu để xác nhận toán tử BDC và danh sách thuộc tính của nó thực sự có mặt
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.60.0
Version 2.59.0
Đã thêm (Added)
TPdfAnnotationcó thêmHasLinkUrivàLinkUri, nênCreateAnnotationhiện có thể tạo một liên kết web hoạt động: chú thích được lưu với hành động/URItrỏ đến địa chỉ cho trước- Đặt URI liên kết trên kiểu con nào khác
anLinksẽ nâng ngoại lệ, vì chỉ chú thích Link mang từ điển hành động - Trường này hiện chỉ ghi; đọc lại đích liên kết đi qua họ
FPDFLink_*, vốn cần handle tài liệu - Delphi, Lazarus và C++Builder đều xác minh byte đã lưu mang hành động
/URIvà địa chỉ đích
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.59.0
Version 2.58.12
Đã thêm (Added)
- Xác thực PDF/X báo cáo
pvxiTrimBoxWithArtBoxkhi một trang mang cả/TrimBoxvà/ArtBox; cả hai đều khai báo trang thành phẩm, nên RIP không có cách nào biết cái nào có thẩm quyền (ISO 15930) - Xác thực PDF/X báo cáo
pvxiPageBoxOutsideMediaBoxkhi/TrimBoxhoặc/BleedBoxvươn ra ngoài/MediaBox, gồm cả hộp có gốc âm; hộp vượt khỏi vùng trung gian không thể được ghi hình - Hình chữ nhật được chuẩn hóa trước khi so sánh, nên thứ tự góc nào cũng được chấp nhận, và hộp chạm mép media chính xác vẫn xác thực hợp lệ
- Báo cáo tiền kiểm phân loại cả hai vấn đề dưới cấu trúc và nêu biện pháp khắc phục cụ thể
- Delphi, Lazarus và C++Builder đều bao phủ hai trường hợp bị từ chối và trường hợp tuân thủ
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.58.12
Version 2.58.11
Đã thêm (Added)
- Xác thực PDF/UA báo cáo
pvuaiTociWithoutTockhi tài liệu gắn thẻ các mục TOCI nhưng không bao giờ gắn thẻ chứa TOC mà chúng thuộc về, khiến công nghệ trợ giúp đọc các mục mục lục mà không có mục lục (ISO 14289-1 §7.7) - Báo cáo tiền kiểm phân loại vấn đề dưới cấu trúc và khuyến nghị bọc các mục trong một phần tử TOC
- C++Builder có lớp phủ kiểm thử PDF/UA đầu tiên bên cạnh các trường hợp Delphi và Lazarus
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.58.11
Version 2.58.10
Đã thêm (Added)
- Xác thực PDF/A báo cáo
pvaiSymbolicTrueTypeEncodingkhi phông TrueType ký hiệu mang một mục/Encoding; ISO 19005-1 §6.3.7 chỉ thừa nhận cmap dựng sẵn của phông, nên/Encodingsẽ mâu thuẫn với nó - Cờ ký hiệu được đọc từ
/FontDescriptor, dù nó được viết nội tuyến trong từ điển phông hay tham chiếu gián tiếp; phông không ký hiệu giữ/WinAnsiEncodinghoặc/MacRomanEncodingbắt buộc mà không bị gắn cờ - Báo cáo tiền kiểm phân loại vấn đề dưới nội dung và khuyến nghị gỡ bỏ mục đó
- Delphi và Lazarus bao phủ trường hợp bị gắn cờ cộng cả hai trường hợp được chấp nhận; C++Builder bao phủ trường hợp bị gắn cờ và trường hợp không ký hiệu
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.58.10
Version 2.58.9
Đã thêm (Added)
- Xác thực PDF/A báo cáo các giới hạn hiện thực vùng chứa của ISO 19005-1 Phụ lục C:
pvaiNameOverLimitcho tên dài hơn 127 byte,pvaiArrayOverLimitvượt 8191 phần tử,pvaiDictOverLimitvượt 4095 mục, vàpvaiNestingOverLimitvượt 28 mức lồng nhau - Các giới hạn mang tính bao trùm, nên vùng chứa nằm đúng trên một giới hạn vẫn xác thực hợp lệ; kiểm thử ghim cả phía bị từ chối và phía được chấp nhận của mỗi ranh giới
- Báo cáo tiền kiểm phân loại bốn vấn đề dưới cấu trúc và nêu giới hạn cụ thể trong mỗi khuyến nghị
- Delphi và Lazarus bao phủ cả bốn giới hạn cộng các trường hợp ranh giới; C++Builder bao phủ giới hạn mảng và ranh giới
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.58.9
Version 2.58.8
Đã thêm (Added)
- Xác thực PDF/R báo cáo
pvriPageImageMismatchkhi số hình ảnh không khớp số trang; ISO 23504-1 §6.5.1 quy định mỗi trang đúng một hình dải, nên trang không có hình hoặc có nhiều hình là không tuân thủ - Kiểm thử Delphi, Lazarus và C++Builder bao phủ trang không có hình, trang có hai hình, và trường hợp một hình tuân thủ
Đã thay đổi (Changed)
- Kiểm thử chèn dấu PDF/R hiện bắt đầu từ một trang nguồn đã mang một hình dải, vì chèn dấu chỉ thêm siêu dữ liệu và không thể cung cấp nội dung trang
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.58.8
Version 2.58.7
Đã thêm (Added)
- Xác thực PDF/R báo cáo
pvriFontForbiddenkhi một trang nêu tên tài nguyên phông; trang PDF/raster mang hình quét và không gì khác (ISO 23504-1 §6.5.2) - Xác thực PDF/R báo cáo
pvriForbiddenImageFiltercho mã hóa dải nằm ngoài danh sách trắng, nên/LZWDecode,/RunLengthDecode,/ASCII85Decode,/ASCIIHexDecode,/JBIG2Decodevà/Cryptbị từ chối trong khi/CCITTFaxDecode,/DCTDecode,/JPXDecodevà/FlateDecodeđi qua (ISO 23504-1 §6.6) - Báo cáo tiền kiểm phân loại cả hai vấn đề dưới nội dung và khuyến nghị biện pháp khắc phục cụ thể
- Kiểm thử Delphi, Lazarus và C++Builder bao phủ tài nguyên phông, bộ lọc bị từ chối, và trang chỉ dùng mã hóa trong danh sách trắng
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.58.7
Version 2.58.6
Đã thêm (Added)
- Xác thực PDF/E báo cáo
pveiFontNotEmbeddedkhi tài liệu cho thấy có sử dụng phông nhưng không mang chương trình phông nhúng, nên yêu cầu được kiểm tra trên đường dẫn không DLL cũng như qua PDFium - Bản vẽ kỹ thuật phải kết xuất giống hệt nhau hàng chục năm sau, nên ISO 24517-1 không miễn bất kỳ phông nào trong 14 phông chuẩn; kiểm tra áp dụng như nhau cho
/Type1,/TrueType,/Type0và/MMType1 - Báo cáo tiền kiểm phân loại vấn đề mới dưới nội dung và khuyến nghị nhúng mọi chương trình phông
- Kiểm thử Delphi, Lazarus và C++Builder bao phủ bộ mô tả không có chương trình,
/FontFile2nhúng, và tài liệu không dùng phông nào
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.58.6
Version 2.58.5
Đã thêm (Added)
InjectPdfEMarkershiện ghi output intent mà ISO 24517-1 §6.2 yêu cầu: một hồ sơ đích ICC sRGB nhúng, một output intent/GTS_PDFE1nêu tên nó, và mảng/OutputIntentscủa catalog, tất cả trong cùng một cập nhật gia tăng- Luồng hồ sơ dẫn xuất
/Ncủa nó từ tiêu đề ICC thay vì giả định ba thành phần, nên hồ sơ CMYK sẽ được mô tả đúng - Xác thực PDF/E báo cáo
pveiMissingOutputIntentvàpveiMissingIccProfile, nên ứng viên không nêu điều kiện màu không còn được chấp nhận - Kiểm thử Delphi, Lazarus và C++Builder bao phủ output intent được chấp nhận, intent không có hồ sơ đích, và catalog không có output intent nào
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.58.5
Version 2.58.4
Đã thêm (Added)
- Xác thực PDF/X hiện báo cáo
pvxiFontNotEmbeddedtừ quét byte, nên phông không nhúng bị phát hiện trên đường dẫn không DLL thay vì chỉ qua kiểm tra dựa PDFium - Khác với PDF/A, 14 phông chuẩn không được miễn trong PDF/X, nên mọi sử dụng phông không kèm chương trình phông nhúng đều được báo cáo
- Kiểm tra giữ tính thận trọng: nó chỉ kích hoạt khi tệp cho thấy có sử dụng phông nhưng hoàn toàn không mang
/FontFile,/FontFile2hoặc/FontFile3, vì đếm bộ mô tả đối chiếu chương trình tạo dương tính giả trên bộ mô tả dùng chung - Kiểm thử Delphi, Lazarus và C++Builder bao phủ bộ mô tả không có chương trình, chương trình nhúng, và tài liệu không dùng phông
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.58.4
Version 2.58.3
Đã thêm (Added)
- Xác thực PDF/X hiện báo cáo
pvxiColorSpaceForbiddenkhi ứng viên PDF/X-1a mang/DeviceRGB,/CalRGBhoặc/Lab, mà ISO 15930-1 §6.2 loại khỏi trao đổi CMYK của nó - Kiểm tra chỉ được cổng trên PDF/X-1a, nên PDF/X-3 và các phiên bản sau tiếp tục cho phép RGB và các không gian độc lập thiết bị mà chúng ghép với output intent
- Chỉ các token tên không gian màu không mơ hồ được kiểm tra; luồng
ICCBasedcần/Nđược giải quyết và thuộc về tầng mô hình đối tượng - Kiểm thử Delphi, Lazarus và C++Builder bao phủ không gian RGB bị gắn cờ, không gian Lab bị gắn cờ, cặp CMYK và thang xám được chấp nhận, và trường hợp được phép trên PDF/X-3
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.58.3
Version 2.58.2
Đã thêm (Added)
- Xác thực PDF/X hiện báo cáo
pvxiTransparencyForbiddencho một nhóm trong hoặc soft mask hiện hoạt, mà ISO 15930-1 §6.2 (PDF/X-1a) và ISO 15930-3 §6.3 (PDF/X-3) cấm - Kiểm tra được cổng trên mức tuân thủ phát hiện được, nên PDF/X-4 và PDF/X-6 tiếp tục cho phép độ trong và tệp không thể xác định cấp độ không bao giờ bị gắn cờ cho quy tắc có thể không áp dụng cho nó
- Soft mask bị tắt tường minh bằng
/SMask /Nonekhông được coi là độ trong PdfHasActiveSMaskchuyển từFPdfPdfasang giao diệnFPdfPdfCommonđể mọi trình xác thực dùng chung một quy tắc soft-mask- Kiểm thử Delphi, Lazarus và C++Builder bao phủ nhóm bị gắn cờ trên X-1a, soft mask bị gắn cờ trên X-3, soft mask bị tắt, và trường hợp được phép trên X-4
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.58.2
Version 2.58.1
Đã thêm (Added)
- Xác thực PDF/X hiện kiểm tra hình dạng output intent mà ISO 15930-7 §6.2.4 yêu cầu:
pvxiOutputIntentSchemebáo cáo kiểu con có mặt nhưng không phải/GTS_PDFX, vàpvxiOutputIntentMissingIdentifierbáo cáo thiếu/OutputConditionIdentifier - Kiểu con được khớp như một token tên trọn vẹn, nên tên dài hơn như
/GTS_PDFXVersionkhông còn đi qua, trong khi cách viết thoát#xxcủa cùng tên vẫn đi qua - Output intent hoàn toàn không mang kiểu con được bỏ qua, vì sự vắng mặt của nó đã được báo cáo bởi các vấn đề cấp dấu
- Báo cáo tiền kiểm xếp cả hai vấn đề dưới danh mục output intent và gợi ý cách sửa
- Kiểm thử Delphi, Lazarus và C++Builder bao phủ kiểu con được chấp nhận, kiểu con PDF/A, token tên dài hơn, kiểu con vắng mặt, và định danh điều kiện bị thiếu
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.58.1
Version 2.58.0
Đã thay đổi (Changed)
- Tất cả 35 callback PDFium gọi từ khung C++ riêng của nó (điền biểu mẫu, XFA, nền tảng JavaScript, tạm dừng kết xuất progressive, và đọc ghi luồng) hiện kìm giữ mọi ngoại lệ Pascal và trả về giá trị thất bại được ghi chép thay vì unwind qua ranh giới ngôn ngữ
- Một trình xử lý sự kiện nâng ngoại lệ, cấp phát thất bại, hoặc lỗi bất ngờ bên trong callback do đó không còn có thể làm sập tiến trình hoặc để PDFium trong trạng thái không xác định
Đã sửa (Fixed)
- Đăng ký bộ đếm thời gian biểu mẫu bị rò rỉ mục của nó khi bộ đếm thời gian nền không thể tạo
Đã thêm (Added)
- Kiểm thử Delphi, Lazarus và C++Builder hiện bao phủ việc lưu vào luồng đích từ chối ghi và khẳng định tài liệu vẫn khả dụng và lưu được sau đó
Version 2.57.8
Đã sửa (Fixed)
- Các bản phát hành Delphi cũ hơn (XE5 trở về trước) ngừng biên dịch thư viện dùng thử với
E2003 Undeclared identifier: 'GetTickCount64'trongFPdfPades.pas, vì đơn vị Windows đi kèm các trình biên dịch đó không xuất biểu tượng này - Cùng các trình biên dịch đó cũng thất bại trên
GetUserDefaultLocaleNametrongPDFium.pasvà trên phép gánTBytessangarray of BytetrongGetXfaFormPackets, nên callback locale XFA và ảnh chụp packet hiện cũng dựng được trên những trình biên dịch đó
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.57.8
Version 2.57.7
Đã thay đổi (Changed)
- Mọi ghi lại phía lưu hiện cắt cụt luồng đích trước khi ghi thay vì chỉ tua lại, nên bộ đệm do người gọi cung cấp vốn đã chứa tài liệu dài hơn không thể giữ một đuôi cũ qua
%%EOFmới - Kiểm thử Delphi, Lazarus và C++Builder hiện bao phủ việc lưu vào luồng đã điền sẵn
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.57.7
Version 2.57.6
Đã sửa (Fixed)
- Quét đối tượng diễn ra trước mã hóa chấp nhận chuỗi chữ số độ dài bất kỳ, nên một số dài ở bất kỳ đâu trong tệp có thể tràn thành số đối tượng âm hoặc giả và thêm một mục ma vào bảng tham chiếu chéo dựng lại
- Số đối tượng vượt giới hạn ISO 32000-1 Phụ lục C và thế hệ vượt 65535 hiện bị từ chối làm tiêu đề đối tượng thay vì bị cắt cụt
Đã thêm (Added)
- Kiểm thử Delphi, Lazarus và C++Builder hiện khẳng định số mục đang dùng chính xác của bảng dựng lại
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.57.6
Version 2.57.5
Đã sửa (Fixed)
- Mã hóa với
EncryptMetadata = Falseghi/EncryptMetadata falsevào từ điển Encrypt nhưng vẫn mã hóa luồng siêu dữ liệu tài liệu, nên trình đọc theo khai báo đó thấy XMP không đọc được - Luồng
/Type /Metadatahiện được sao chép không đổi khi tắt mã hóa siêu dữ liệu, trong khi mọi luồng khác vẫn được mã hóa
Đã thêm (Added)
AnsiNameTokenMatchesKeyhiện là một phần giao diệnFPdfPdfCommoncho so sánh tên nhận thức dấu phân cách- Kiểm thử Delphi, Lazarus và C++Builder hiện bao phủ cả hai chế độ mã hóa siêu dữ liệu
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.57.5
Version 2.57.4
Đã sửa (Fixed)
- Bảng tham chiếu chéo dựng lại trong lúc mã hóa bỏ sót đầu danh sách tự do đối tượng 0 bắt buộc theo ISO 32000-1 §7.5.4, nên tiểu mục đầu của nó khởi đầu trễ một đối tượng
- Mọi mục dựng lại đều khai báo thế hệ 0; đối tượng được ghi với thế hệ cao hơn hiện giữ nó, nên bảng khớp với các tiêu đề đối tượng mà nó trỏ đến
Đã thêm (Added)
- Kiểm thử Delphi, Lazarus và C++Builder hiện bao phủ mục đầu danh sách tự do và việc bảo toàn thế hệ trong bảng dựng lại
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.57.4
Version 2.57.3
Đã sửa (Fixed)
- Đầu ra mã hóa làm rơi từ khóa
streamcủa mọi đối tượng luồng, nên tệp đã lưu không còn là cú pháp PDF hợp lệ và trình đọc nghiêm ngặt báo cáo nội dung trang không phải luồng cũng không phải mảng luồng - Việc ghi lại
/Lengthkhớp/Lengthnhư một chuỗi con đơn giản, nên từ điển luồng mang/Length1(mọi phông nhúng) bị hỏng tên khóa trong khi độ dài thật giữ giá trị cũ - Luồng nêu độ dài gián tiếp như
/Length N 0 Rcó số đối tượng bị ghi đè bằng độ dài mới; mục này hiện được thay bằng độ dài mã hóa trực tiếp - Từ điển luồng hoàn toàn không có
/Lengthhiện nhận một mục thay vì để trình đọc không có độ dài
Đã thêm (Added)
AnsiFindDictKeyTokenhiện là một phần giao diệnFPdfPdfCommoncho tra khóa từ điển cấp cao nhận thức dấu phân cách- Kiểm thử Delphi, Lazarus và C++Builder hiện bao phủ bảo toàn
/Length1, thay thế độ dài gián tiếp, và sự khớp kích thước thân luồng
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.57.3
Version 2.57.2
Đã sửa (Fixed)
SaveAsEncryptedvàSaveAsEncryptedToStreamvớiRevision = erR6tạo ra tài liệu từ chối chính mật khẩu đúng của mình trong khoảng bốn tệp thì có một, vì bộ đếm vòng của thuật toán 2.B ISO 32000-2 §7.6.4.3 khởi đầu thấp hơn một vòng và vòng thừa đó thay đổi các giá trị/U,/O,/UEvà/OE- Tài liệu mã hóa R6 hiện mở lại với mật khẩu người dùng hoặc chủ sở hữu trong mọi trình đọc tuân thủ, và vẫn từ chối mật khẩu sai
Đã thêm (Added)
- Bộ kiểm thử Lazarus và C++Builder có thêm lớp phủ mã hóa trước đây chỉ có ở Delphi: độ dài khóa R6, các trường từ điển Encrypt, chuyến đi vòng mã hóa và mở lại lặp lại, và từ chối mật khẩu sai
Đã thay đổi (Changed)
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.57.2
Version 2.57.1
Đã thay đổi (Changed)
- Gõ vào trường biểu mẫu, di chuyển con trỏ soạn thảo, và bật tắt hộp kiểm hiện chỉ sơn lại vùng mà PDFium báo cáo là bị hư hại thay vì toàn bộ trình xem
- Hộp hư hại được chuẩn hóa cho trục Y trang hướng lên, nới rộng một pixel để viền widget khử răng cưa giữ sạch, và được cắt theo vùng khách hàng hiển thị được
- Hộp hư hại cuộn hoàn toàn ra khỏi khung nhìn không còn lên lịch sơn lại, trong khi khung nhìn không hoạt động hoặc trang chưa ánh xạ vẫn dự phòng sơn lại toàn bộ
- Kiểm thử Delphi, Lazarus và C++Builder hiện bao phủ làm mất hiệu lực biểu mẫu có giới hạn, hộp trang bị lật, hộp ngoài màn hình, và an toàn khung nhìn không hoạt động
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.57.1
Version 2.57.0
Đã thêm (Added)
TPdfThumbnailView.Orientationhỗ trợ bố cục hình thu nhỏ dọc và ngang đồng thời giữ nguyên mặc định dọc hiện cóFirstVisiblePageIndex,LastVisiblePageIndexvàEnsureCurrentPageVisiblephơi bày và điều khiển khung nhìn hình thu nhỏ với các chỉ mục trang dựa trên một
Đã thay đổi (Changed)
- Việc thay đổi
CurrentPageIndexhiện cuộn hình thu nhỏ đã chọn vào vùng hiển thị theo cả hai hướng - Các trình kiểm tra Delphi, Lazarus và C++Builder hiện bao phủ các mặc định hướng, chuyển hướng, phạm vi hiển thị và khả năng hiển thị của trang đã chọn
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.57.0
Version 2.56.2
Đã thay đổi (Changed)
HighlightSearchText,AddSearchTextHighlightvàClearHighlighthiện chỉ làm mất hiệu lực các hình chữ nhật thiết bị cho phạm vi tìm kiếm đã được thêm hoặc gỡ bỏ thay vì sơn lại toàn bộ trình xem- Việc thay thế các điểm tô sáng bằng các kết quả khớp giống nhau hoặc thêm các kết quả khớp trùng lặp không còn lên lịch sơn lại không cần thiết
- Các trình kiểm tra Delphi, Lazarus và C++Builder hiện bao phủ việc làm mất hiệu lực có giới hạn, các bản cập nhật lũy đẳng, việc xóa và an toàn cho trình xem không hoạt động
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.56.2
Version 2.56.1
Đã thay đổi (Changed)
TPdfThumbnailViewhiện tái sử dụng các bitmap đã kết xuất cho các trang vẫn hiển thị qua các lần sơn lại và các vị trí cuộn liền kề- Bộ đệm chỉ giữ phạm vi trang hiển thị hiện tại và giải phóng các mục chính xác khi các trang rời khỏi phạm vi đó, tài liệu được gán thay đổi, hoặc kích thước hình thu nhỏ thay đổi
- Các trình kiểm tra Delphi, Lazarus và C++Builder hiện bao phủ việc tái sử dụng bộ đệm, việc cắt tỉa khung nhìn, làm mất hiệu lực theo kích thước, thay thế tài liệu và phá hủy thành phần
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.56.1
Version 2.56.0
Đã thêm (Added)
TPdfView.CutSelectedFormTextToClipboardvàTPdfView.PasteFormTextFromClipboardcung cấp chỉnh sửa bảng tạm Unicode cho widget biểu mẫu có thể chỉnh sửa đang được tập trung
Đã thay đổi (Changed)
- Các trình chỉnh sửa biểu mẫu được tập trung hiện xử lý các phím tắt copy, cut, paste và select-all tiêu chuẩn trước khi chuyển đầu vào văn bản đến PDFium
- Cut và paste từ chối các trường chỉ đọc và các phiên không có quyền điền biểu mẫu hoặc sửa đổi, trong khi cut sao chép thành công trước khi gỡ bỏ văn bản đã chọn
- Các trình kiểm tra Delphi, Lazarus và C++Builder hiện bao phủ hành vi không tập trung, chuyến đi vòng phím tắt và việc từ chối chỉ đọc
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.56.0
Version 2.55.0
Đã thêm (Added)
TPdfView.AddSearchTextHighlightthêm các kết quả khớp duy nhất cho một thuật ngữ tìm kiếm khác vào lớp phủ trang hiện tại, cho phép một số truy vấn cùng được tô sáng
Đã thay đổi (Changed)
HighlightSearchTextvẫn là điểm vào thay thế và hiện chia sẻ máy quét cộng thêm, trong khi các phạm vi ký tự trùng lặp bị bỏ qua vàClearHighlightgỡ bỏ toàn bộ tập hợp tích lũy- Các trình kiểm tra Delphi, Lazarus và C++Builder hiện bao phủ việc tích lũy truy vấn riêng biệt và việc triệt tiêu phạm vi trùng lặp
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.55.0
Version 2.54.0
Đã thêm (Added)
TPdfhiện phơi bày các ảnh chụp nhanh đối tượng trang hoàn chỉnh, cập nhật phong cách theo lô, biến đổi đối tượng affine, các phân đoạn đường dẫn, đường dẫn clip và các con của Form XObject- Việc kiểm tra ký tự hiện bao gồm màu tô và màu nét, tên và cờ phông chữ, ranh giới glyph lỏng lẻo, các ma trận hiệu dụng, các tham chiếu đối tượng văn bản và chuyển đổi từ chỉ mục ký tự sang chỉ mục văn bản
- Các chú thích hiện đi về lại hình học đường viền và các luồng xuất hiện normal, rollover và down
- Các bộ truy cập hình thu nhỏ thô và đã giải mã mới, các biến đổi nội dung trang và chú thích, và
RenderPageWithMatrixcung cấp các đường dẫn kết xuất và chỉnh sửa nâng cao trực tiếp
Đã thay đổi (Changed)
- Các thay đổi phong cách đối tượng trang có thể được commit như một lô duy nhất để PDFium tái tạo nội dung trang chỉ một lần
- Việc kết xuất ma trận sử dụng đường dẫn bitmap zero-copy hiện có khi bố cục bitmap đích tương thích
Version 2.53.1
Đã sửa (Fixed)
- Chú thích menu Copy tiếng Trung tích hợp sẵn hiện sử dụng các điểm mã Unicode độc lập với bảng mã và hiển thị chính xác trong các bản dựng Lazarus
- Các chuỗi công cụ Delphi cũ hơn hiện có thể biên dịch
FPdfAsynckhi đơn vịWinapi.Windowscủa chúng bỏ qua khai báoGetTickCount64
Version 2.53.0
Đã thêm (Added)
- Bộ kiểm thử
Tests.ApiCoveragemới bao phủ các TPdf API công khai trước đây có mức độ bao phủ kiểm thử đầu-cuối bằng không:GetPageBox/SetPageBox(đọc/ghi MediaBox/CropBox, lỗi hộp thiếu và chuyến đi vòng lưu),FlattenPage/FlattenAllPages(giá trị trả về và bảo toàn số trang),GenerateFormAppearances(no-op trên tài liệu không phải biểu mẫu),SaveAsEncrypted/SaveAsEncryptedToStream(AES-256 với chuyến đi vòng mật khẩu — xác minh rằng tệp mã hóa từ chối mở mà không có mật khẩu và mở cùng với nó), xác thực biên củaDeletePage(trang 0 và ngoài phạm vi nângEPdfError), và các哨兵 chú thíchHasContents/HasAuthorđược giới thiệu trong v2.38.0 (xác minhDefault(TPdfAnnotation)để lại chúng làFalse)
Version 2.52.0
Đã thêm (Added)
TPdfView.CopySelectedFormTextToClipboardsao chép vùng chọn văn bản bên trong widget AcroForm đang được tập trung vào bảng tạm Windows dưới dạngCF_UNICODETEXT
Đã thay đổi (Changed)
- Các thao tác sao chép văn bản trang và biểu mẫu được tập trung hiện chia sẻ cùng bộ ghi bảng tạm Unicode phòng vệ và để bảng tạm không thay đổi khi vùng chọn của chúng trống
- Các trình kiểm tra Delphi, Lazarus và C++Builder hiện bao phủ các lệnh sao chép biểu mẫu không hoạt động hoặc không tập trung và một chuyến đi vòng vùng chọn biểu mẫu được tập trung qua bảng tạm Windows
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.52.0
Version 2.51.0
Đã thêm (Added)
TPdfView.SelectLineAtchọn dòng văn bản trực quan chứa một chỉ mục trang dựa trên một và chỉ mục ký tự dựa trên không mà không cần đầu vào chuột
Đã thay đổi (Changed)
- Lựa chọn dòng theo chương trình, lựa chọn nhấp-ba-lần và
Shift+HomehoặcShift+Endhiện chia sẻ một mô hình ranh giới dòng dạng hộp ký tự - Các trình kiểm tra Delphi, Lazarus và C++Builder hiện bao phủ lựa chọn dòng ổn định và các chỉ mục trang hoặc ký tự không hợp lệ
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.51.0
Version 2.50.0
Đã thêm (Added)
TPdf.LoadDocumenthiện chấp nhận một cửa sổIndexvàCountdựa trên không vào một bộ đệmTBytes, cho phép các PDF nhúng tải mà không cấp phát một lát cắt byte-array tạm thời
Đã thay đổi (Changed)
- Việc tải phạm vi byte từ chối các cửa sổ âm hoặc ngoài biên trước khi thay đổi trạng thái tài liệu và bảo toàn các tùy chọn thời gian sống bộ đệm đệm và mượn-bộ đệm hiện có
- Các trình kiểm tra Delphi, Lazarus và C++Builder hiện bao phủ các cửa sổ PDF nhúng và các đối số phạm vi byte không hợp lệ
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.50.0
Version 2.49.1
Đã thêm (Added)
TPdfView.FitModehiện hỗ trợpfmFitHeightđể vừa vặn trang hiện tại với chiều cao khung nhìn hiển thị đồng thời cho phép cuộn ngang khi cần
Đã sửa (Fixed)
- Các chế độ vừa khung hiện hội tụ sau khi khả năng hiển thị thanh cuộn thay đổi vùng khách, giữ cho kết quả fit-page, fit-width và fit-height nhất quán giữa VCL và LCL
- Các trình kiểm tra trình xem Delphi, Lazarus và C++Builder hiện bao phủ việc chọn
pfmFitHeightvà các chuyến đi vòng trở lại của phép liệt kê TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.49.1
Version 2.49.0
Đã thêm (Added)
- Bề mặt liên kết PDFium công khai hiện bao phủ toàn bộ 470 hàm đã xuất trong các tiêu đề đã xem xét, bao gồm truy cập mô tả tệp đính kèm thông qua
FPDFAttachment_SetDescriptionvàFPDFAttachment_GetDescription TPdfhiện công bố các mô tả tệp đính kèm, tính hợp lệ của tham chiếu chéo, các khoảng bù cuối trailer, bản sửa đổi security-handler, nạp bộ nhớ 64-bit, phạm vi byte chữ ký, phạm vi văn bản liên kết web và các ảnh chụp nhanh dữ liệu hình ảnh, bộ lọc, siêu dữ liệu và hồ sơ ICC mở rộng- Các trợ giúp biểu mẫu hiện hỗ trợ tiêu điểm trường bản địa, các truy vấn và cập nhật tùy chọn lựa chọn được tiêu điểm, chuyển tiếp bánh xe chuột, các nét mực có thể ghi và các lớp phủ biểu mẫu sau khi kết xuất tăng dần
Đã thay đổi (Changed)
FormFieldCount, các chỉ mục trường biểu mẫu và thứ tự tab hiện chỉ mô tả các chú thích widget thay vì bao gồm các chú thích trang không liên quan- Các trang
TPdfkhông giao diện hiện vào và rời khỏi vòng đời trang điền biểu mẫu sao cho tiêu điểm bản địa và API trường được tiêu điểm hoạt động mà không cầnTPdfView - Các xuất mô tả tệp đính kèm được giới hạn bởi khả năng sao cho các ứng dụng sử dụng bản dựng PDFium cũ hơn vẫn có thể nạp thư viện và phát hiện tính năng không khả dụng
Đã sửa (Fixed)
- Kết xuất trang tăng dần hiện vẽ các điều khiển biểu mẫu khi việc điền biểu mẫu được bật
- Các kiểm tra Delphi, Lazarus và C++Builder hiện bao phủ chẩn đoán tài liệu mới, mô tả tệp đính kèm, đường dẫn mực, hành vi biểu mẫu, phạm vi byte chữ ký, phạm vi liên kết web và siêu dữ liệu hình ảnh
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.49.0
Version 2.48.0
Đã thêm (Added)
TPdfMatrixhiện công bố các nhà máy, nhân bản và gán, chẩn đoán trạng thái hữu hạn và khả năng nghịch đảo, so sánh dựa trên dung sai, truy cập dịch chuyển, báo cáo định thức và phân tách afin- Soạn prep-s结尾, xoay nhận biết trụ, tỷ lệ, nghiêng và lật, cộng với ánh xạ hình chữ nhật stretch, contain và cover hỗ trợ các luồng công việc không gian cục bộ và bố cục vừa khung mà không cần số học hệ số thủ công
- Truy cập nghịch đảo không thay đổi, ánh xạ điểm nghịch đảo, biến đổi vector và tứ giác, lô điểm và hình chữ nhật động, biến thể tại-chỗ và ranh giới đã biến đổi trong một lần đi mở rộng bề mặt hình học có thể tái sử dụng
Đã thay đổi (Changed)
- Dịch chuyển, tỷ lệ và lật trục hiện chỉ cập nhật các hệ số bị ảnh hưởng thay vì định tuyến qua phép nhân afin chung
- Biến đổi hình chữ nhật chuẩn hóa đầu vào của nó một lần, sử dụng một đường dẫn chuyên biệt chính xác căn-chỉnh-trục khi có thể và tính toán ranh giới xoay chung mà không có bản ghi điểm tạm thời
- Các biến đổi lô điểm và hình chữ nhật phân bổ một mảng kết quả hoặc tái sử dụng lưu trữ của người gọi, trong khi các ranh giới điểm đã biến đổi được tích lũy trong một lần đi mà không có mảng trung gian
Đã sửa (Fixed)
- Ánh xạ hình chữ nhật từ chối các kết quả kích thước không, không hữu hạn và tràn
Singletrước khi xuất bản một ma trận không sử dụng được - Các kiểm tra Delphi, Lazarus và C++Builder hiện xác minh thứ tự soạn, các bất biến trụ, các chuyến đi vòng trở lại nghịch đảo, các hình chữ nhật vừa khung, phân tách và hành vi hình học hàng loạt
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.48.0
Version 2.47.0
Đã thêm (Added)
FPdfAsynchiện cung cấp các lý do và thông báo hủy có cấu trúc, các đăng ký gọi lại có thể gỡ bỏ, các nguồn dựa trên thời gian chờ, chờ hủy và các hoạt động try-cancel nguyên tử thông qua các giao diện mở rộng bảo toàn API gốcTPdfFuture<T>.RunExthêm điều phối phản hồi và ưu tiên worker có thể cấu hình trong khi các phong bì kết quả công bố ID hoạt động, tính hợp lệ giá trị, tên lớp ngoại lệ, thời gian hoàn thành và các trợ giúp hoàn thành có thể tái sử dụngTPdfAsyncExecutorthêm một pool worker cố định có thể tái sử dụng với bốn làn ưu tiên FIFO, áp lực ngược hàng đợi giới hạn tùy chọn, các tay cầm tác vụ có thể hủy, chờ nhận biết thời gian chờ, ảnh chụp nhanh tác vụ, thống kê tổng hợp và tắt duyên dáng
Đã thay đổi (Changed)
- Các công việc không đồng bộ lặp lại có thể tái sử dụng các luồng worker và các hoạt động hàng đợi O(1) thay vì tạo một luồng cho mỗi tác vụ, trong khi hoàn thành được đồng bộ hóa vẫn khả dụng cho các máy chủ UI
- Các thất bại của executor và future bảo toàn chẩn đoán lớp và thông báo ngoại lệ, việc hủy giữ lý do gốc của nó và các ngoại lệ gọi lại vẫn được cách ly khỏi vòng đời worker và việc tắt
- Các kiểm tra Delphi, Lazarus và C++Builder hiện bao phủ bề mặt hủy mở rộng, siêu dữ liệu future, kiểm soát tác vụ, áp lực ngược, sắp xếp ưu tiên, thống kê, thất bại và tắt
Đã sửa (Fixed)
- Các chủ sở hữu hủy đồng thời hiện nhận được một kết quả người-viết-đầu-tiên tất định thay vì dựa vào một chuỗi quan sát và hủy riêng biệt
- Việc chờ nhàn rỗi của luồng chính xử lý các phản hồi tác vụ được đồng bộ hóa, ngăn một worker đã hoàn thành để executor vĩnh viễn không nhàn rỗi trong khi tắt có phối hợp
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.47.0
Version 2.46.0
Đã thêm (Added)
FPdfAsn1hiện công bố các lớp định danh, mã hóa và giải mã số thẻ cao 64-bit, các bản ghi TLV đã phân tích, các cửa sổ trình đọc con sao chép không, các bộ giải mã nguyên thủy có kiểu và các lát nội dung hoặc giá trị đã mã hóa- Các trình ghi DER hiện hỗ trợ toàn bộ phạm vi INTEGER 64-bit không dấu, nội dung INTEGER tùy ý đã xác thực, ENUMERATED, lựa chọn UTCTime hoặc GeneralizedTime tự động, thẻ application và private, SEQUENCE đa giá trị và đầu ra SET OF được sắp xếp chính tắc
ValidateDertrả về các lỗi xác thực nhận biết khoảng bù trong khi thực thi các giới hạn lồng nhau, số nút, độ dài nội dung, số lỗi, gốc và sắp xếp SET tùy chọn có thể cấu hình
Đã thay đổi (Changed)
- Nối DER và soạn đa giá trị sử dụng một phân bổ đầu ra, các bộ đệm trình ghi công bố các hoạt động reserve, count, capacity và chuyển giao quyền sở hữu, và sắp xếp SET OF hiện sử dụng sắp xếp trộn
O(n log n) - Các giá trị BOOLEAN, INTEGER, BIT STRING, OBJECT IDENTIFIER, NULL, UTF8String, PrintableString, IA5String, UTCTime và GeneralizedTime nhận các kiểm tra hình thức chính tắc trong khi mã hóa, giải mã có kiểu hoặc xác thực
- Gói thời gian chạy Lazarus hiện xuất
FPdfAsn1và các bộ kiểm tra Delphi, Lazarus và C++Builder thực hành cùng bề mặt DER công khai
Đã sửa (Fixed)
- Các số thẻ đặc-thưng-ngữ-cảnh lớn hơn 30 không còn bị cắt ngắn thành năm bit định danh thấp
- Các định danh thẻ cao malformed, độ dài xác định không tối thiểu, UTF-8 không hợp lệ, đệm BIT STRING khác không, trường thời gian không hợp lệ, gốc đi cuối và vi phạm giới hạn tài nguyên bị từ chối tất định
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.46.0
Version 2.45.0
Đã thêm (Added)
FPdfPreflightReporthiện gán mức độ nghiêm trọng Info, Warning hoặc Error cho mỗi vấn đề và công bố các API mức độ nghiêm trọng, trạng thái, danh mục, mã vấn đề, tra cứu, tìm kiếm, làm phẳng và lọc ở cấp độ tiêu chuẩn và báo cáo- Các báo cáo preflight hiện xuất SARIF 2.1.0, JUnit XML, NDJSON và XML gốc thông qua các phương thức
To*vàSave*ToFilephù hợp cho các đường ống CI, tự động hóa và truyền phát - Các dấu vân tay báo cáo SHA-256 ổn định nhận diện các kết quả xác thực tương đương độc lập với các đường dẫn nguồn và dấu thời gian tạo
Đã thay đổi (Changed)
- Các báo cáo JSON, CSV, text, Markdown và HTML hiện bao gồm mức độ nghiêm trọng và các tóm tắt trạng thái mở rộng; HTML thêm chú thích bảng có thể truy cập và tóm tắt trạng thái
- Xây dựng bộ sưu tập vấn đề và tiêu chuẩn sử dụng tăng trưởng dung lượng hình học, kết quả truy vấn được kích thước trước, thoát JSON ghi vào một bộ đệm đầu ra bị giới hạn và tất cả các tệp báo cáo sử dụng một trình ghi UTF-8 trực tiếp
- Các tóm tắt danh mục vấn đề sử dụng sắp xếp tất định, dấu thời gian bao gồm mili giây, JSON mang
formatVersion: 2và các ô CSV trung hòa các công thức bảng tính
Đã sửa (Fixed)
- Xuất JSON hiện bảo tồn các cặp Unicode bổ sung hợp lệ và thay thế các đơn vị mã surrogate UTF-16 cô lập thay vì phát ra dữ liệu vô hướng malformed
- Xuất HTML hiện thoát các dấu nháy đơn và các chế độ xem báo cáo được lọc sở hữu các mảng vấn đề độc lập thay vì chia sẻ lưu trữ kết quả có thể thay đổi
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.45.0
Version 2.44.0
Đã thêm (Added)
- Bookmark và destination hiển thị trạng thái mở, số lượng phần tử con, đích của action, chế độ xem của destination, và tối đa bốn tham số xem
Metadata,GrantedPermissions,UserGrantedPermissions,HasPermissionvàUserHasPermissioncung cấp ảnh chụp kiểm tra tài liệu có kiểu và các truy vấn quyềnExtractThumbnail(PageNumber)kết xuất trang được yêu cầu mà không đổi trang đang hoạt động, và kết quả dấu thời gian RFC 3161 hiển thị chi tiết chính sách, thời gian tạo và nonce
Đã thay đổi (Changed)
- Các luồng xử lý bookmark, JavaScript, metadata, destination và thumbnail dùng buffer hai lượt đã được kiểm chứng, tăng trưởng bộ sưu tập theo cấp số nhân, và duyệt an toàn trước chu trình
- Hậu xử lý khi lưu phân giải catalog đang hoạt động, cây trang và open action thông qua bản sửa đổi xref hiện tại, cache các object stream đã giải mã, và quét từ điển PDF với ranh giới từ vựng
- Bộ phân tích PDF dùng chung hiện ràng buộc chính xác header object, generation, khóa từ điển, độ dài stream, hình học predictor, phạm vi số nguyên, và ranh giới của comment, chuỗi literal và chuỗi thập lục phân
- Xác thực phản hồi RFC 3161 hiện ràng buộc cả nonce lẫn
messageImprintSHA-256, đòi hỏi signer hợp lệ về cấu trúc, và áp dụng quy tắc nghiêm ngặt cho độ dài DER, OID, INTEGER và GeneralizedTime
Đã sửa (Fixed)
- Tài liệu gia tăng không còn chọn nhầm catalog trùng lặp không hoạt động hoặc đuôi tham chiếu dị dạng khi thêm open action mặc định
- Token dấu thời gian có độ dài DER dạng long được giữ nguyên toàn bộ phần đã mã hóa, trong khi thứ tự trường tùy chọn CMS dị dạng và tập signer rỗng bị từ chối
- Bản build Delphi sạch hiện ghi các trường nonce seed PAdES qua bản sao byte an toàn căn chỉnh, và truyền byte phản hồi XFA với kiểu con trỏ native chính xác
TPdf.AboutInfo, siêu dữ liệu gói Lazarus và siêu dữ liệu trình cài đặt hiện báo cáo nhất quán Version 2.44.0
Version 2.43.0
Thêm (Added)
- Bản ghi trường và chú thích XFDF hiện để lộ các cờ sự hiện diện, phân biệt một giá trị XML bị bỏ qua với một giá trị rỗng tường minh
Thay đổi (Changed)
- Nhập XFDF chấp nhận các phần tử và thuộc tính có tiền tố không gian tên, nội dung text và CDATA hỗn hợp, entity reference, và các giá trị có ý nghĩa về khoảng trắng, đồng thời từ chối các tham chiếu vô hướng Unicode không hợp lệ
- Nhập và xuất XFDF sử dụng đối sánh trường có chỉ mục và các bộ đệm hình học có giới hạn, cải thiện throughput và hành vi cấp phát đỉnh cho các biểu mẫu lồng sâu, các tập hợp chú thích lớn, ink list, vertices, và markup quadrilaterals
- Xác thực PDF/A và PDF/UA sử dụng tăng trưởng có giới hạn cho các tập hợp trang, luồng, structure-name, và RoleMap lớn; Việc phân giải RoleMap PDF/UA hiện tuân theo các mảng trực tiếp và các đối tượng mảng hoặc name gián tiếp có thế hệ chính xác
Sửa lỗi (Fixed)
- Vòng lặp XFDF hiện bảo toàn các đường dẫn trường lồng sâu, các giá trị trường rỗng tường minh, nội dung chú thích rỗng tường minh, và sự phân biệt giữa nội dung vắng mặt và rỗng
- Các thao tác tải bộ nhớ đệm không hợp lệ và gán trang ngoài phạm vi bị từ chối mà không để lại trạng thái trang hoặc tài liệu một phần, và một thao tác tải lại trang native thất bại bảo toàn trang đang hoạt động trước đó
- Các mã định danh marked-content lớn và các bộ đệm metadata chữ ký được giới hạn và xác thực trước khi cấp phát hoặc truy cập native
Version 2.42.0
Thêm (Added)
TPdfMatrixhiện cung cấpInvert,TryInvert,TransformPoint, vàTransformRectcho ánh xạ tọa độ, kiểm tra trúng, ranh giới chuẩn hóa, và xử lý ma trận suy biến tường minhTPdf.WrapTextbổ sung một quá tảiBreakLongWordstách CJK và các text khác không có khoảng trắng trong khi vẫn giữ liền các cặp surrogate UTF-16 hợp lệTPdfAnnotation.AttachmentPointSetsđể lộ mọi quadrilateral trong các chú thích markup nhiều dòng, trong khi trườngAttachmentPointshiện có vẫn là một alias cho tập hợp đầu tiên
Thay đổi (Changed)
- Trích xuất text, xây dựng nội dung readable, tra cứu từ, và ánh xạ offset spoken-text hiện sử dụng cấp phát có giới hạn và các đường dẫn tra cứu nhị phân, giảm các cấp phát lặp lại và quét tuyến tính trên các trang lớn
- Tuần tự hóa ASN.1 và tạo PDF mã hóa hiện sử dụng các bộ đệm đầu ra hình học; Thứ tự đối tượng mã hóa sử dụng sắp xếp
O(n log n)và các dòng xref được ghi trực tiếp vào bộ đệm cuối cùng WrapTextbảo toàn các ranh giới dòng CR, LF, và CRLF và tái sử dụng một đối tượng đo native duy nhất cho toàn bộ thao tác- Nhập và xuất XFDF bảo toàn mọi markup quadrilateral; Việc nhập cũng áp dụng các màu RGB/nội thất và phân tích tọa độ thập phân độc lập với locale của tiến trình
Sửa lỗi (Fixed)
- Các caller legacy lại có thể cập nhật nội dung và tác giả chú thích bằng cách gán các chuỗi không trống mà không cần đặt các lính canh
HasContentsvàHasAuthormới hơn - Các chuỗi chú thích rỗng tường minh hiện sử dụng một bộ đệm native hợp lệ kết thúc bằng zero, do đó việc xóa
/Contents,/T, và các khóa text tùy chọn khác không còn truyền một con trỏ nil cho PDFium
Version 2.41.0
Thay đổi (Changed)
- Báo cáo Preflight
SaveJsonToFile,SaveMarkdownToFilevàSaveTextToFilehiện ghi UTF-8 trên Delphi (khớp vớiSaveHtmlToFilehiện tại), thay vì trang mã ANSI hệ thống; Các ký tự non-ASCII trong đường dẫn tệp, khuyến nghị và ghi chú phạm vi đã bị lỗi hiển thị trên Delphi khi lưu qua các phương thức này SaveCsvToFilehiện ghi UTF-8 với tiền tố BOM, để Excel for Windows tự động phát hiện mã hóa; Nếu không có BOM, Excel coi một CSV UTF-8 là code-page 1252 và làm hỏng bất kỳ ký tự non-ASCII nào
Sửa lỗi (Fixed)
- Bản demo
ExtractImagesđã rò rỉ các đối tượngTBitmapđược lưu trong bộ nhớ đệm tạiFExtractedImageskhi biểu mẫu đóng mà không xóa chúng một cách rõ ràng trước; Biểu mẫu hiện ghi đèDestroyđể gọiClearExtractedImages, giải phóng mọi bitmap được lưu trong bộ nhớ đệm
Version 2.40.0
Thay đổi (Changed)
TPdf.RenderPage(HDC, ...)hiện che các ngoại lệ FPU/SSE xung quanh lệnh gọiFPDF_RenderPage, khớp vớiTPdfView.RenderPage(HDC)(đã được sửa trong v2.25.0) và mọi điểm đầu vào kết xuất trả về bitmap; Quá tải direct-to-DC ở cấp độTPdftrước đây đã để lại các ngoại lệ FPU không được che trên các trình biên dịch pre-D12
Sửa lỗi (Fixed)
ColorToARGBhiện trả về một pixel trong suốt hoàn toàn (alpha 0) choclNonevàclDefaultthay vì coi giá trị lính canh là màu RGB theo nghĩa đen; Hành vi trước đây tạo ra một vùng tô tối, gần như mờ đục khi người gọi truyềnclNonemong đợi “không có màu”
Version 2.39.1
Sửa lỗi (Fixed)
- Các thao tác lưu PDF 1.3 rõ ràng hiện loại bỏ các mục nhập
/SMask /None,/AIS false, và/TK truechỉ lặp lại trạng thái đồ họa ban đầu trong khi tiếp tục từ chối trạng thái độ trong suốt không mặc định
Version 2.39.0
Thay đổi (Changed)
CreatePDFvàImageToPDFhiện sử dụng các điểm đến lưu đã được xác nhận và chỉ báo cáo thành công khiSaveAshoàn tất thành côngBatchExport,PDFtoJpg, vàSplitPDFhiện cấp phát các thư mục đầu ra duy nhất để các lần chạy lặp lại và các đầu vào trùng tên bảo toàn kết quả trước đóSplitViewhiện bao bọc tìm kiếm một lần mà không để lại trạng thái trang ẩn sau khi hủy hoặc không có kết quả khớp, và hủy bỏ các tác vụ in chưa hoàn thành thay vì gửi đầu ra một phần
Sửa lỗi (Fixed)
MergePDFhiện từ chối các mã thông báo phạm vi trang bị định dạng sai và các đường dẫn đầu ra ghi đè nguồn, đếm số trang thực sự được nhập, và từ chối lưu kết quả trống- Các bản demo
Attachmentcủa Delphi và C++Builder hiện thực hiện các thao tác lưu cùng đường dẫn thông qua thay thế tệp an toàn khôi phục để việc đổi tên không thành công không thể xóa PDF gốc
Version 2.38.0
Thay đổi (Changed)
SetAnnotationDatahiện bảo vệ các thao tác ghi/Contentsvà/Authorđằng sau các lính canhHasContents/HasAuthortrênTPdfAnnotation, khớp với mẫuHasName/HasSubject/HasIconhiện tại; Trước đây hai trường này được ghi vô điều kiện, vì vậy việc gán một bản ghiDefault(TPdfAnnotation)để chỉ cập nhật màu sắc hoặc cờ đã âm thầm ghi đè nội dung và tác giả hiện có của chú thích bằng các chuỗi trống;GetPageAnnotationhiện đặt các lính canh để chu kỳ đọc-sửa-ghi bảo toàn các giá trị ban đầu
Sửa lỗi (Fixed)
GenerateFormAppearanceshiện đọc giá trị nút chọn (checkbox)/nút radio quaFPDFAnnot_GetFormFieldValue(di chuyển đến từ điển trường chính theo ISO 32000-1 §12.7.5) thay vìFPDFAnnot_GetStringValue(Annot, 'V', ...)(đọc từ điển widget); Widget thường không mang/V, vì vậy/ASkhông bao giờ được đồng bộ hóa với trạng thái đã chọn và một hộp kiểm/radio được làm phẳng sẽ hiển thị dưới dạng chưa được chọn
Version 2.37.0
Thay đổi (Changed)
ParseTsaUrlhiện giới hạn cổng ở mức1..65535sau khi phân tích cú pháp; nếu không, giá trị cổng quá lớn sẽ bị vòng lặp thông qua cắt bớtDWORDvà có thể rơi vào một cổng hợp lệParseFieldcủa XFDF hiện chấp nhận một tham số độ sâu (mặc định là 0, giới hạn ở 64) và trả về một trường trống ở giới hạn, do đó, một chuỗi<field>lồng nhau độc hại sâu 100 000 không còn có thể làm tràn ngăn xếp
Sửa lỗi (Fixed)
- Yêu cầu TSA HTTP hiện bảo vệ chống lại thân yêu cầu trống trước khi chuyển
@ReqDer[0]choWinHttpSendRequest; Việc giải tham chiếu mảng động có độ dài bằng không sẽ truy cập vào một con trỏ chưa được xác định;BuildTimeStampReqluôn trả về một SEQUENCE không trống, nhưng trang gọi hiện bảo vệ hợp đồng này
Ghi chú (Notes)
- Nhận xét tiêu đề
FPdfTsaWinvề kiểm tra thu hồi HTTPS đã được sửa: WinHttp mặc định xác thực chuỗi chứng chỉ máy chủ nhưng không thực hiện kiểm tra thu hồi CRL/OCSP trừ khi được bật rõ ràng quaWinHttpSetOption; Cách diễn đạt trước đây tuyên bố việc kiểm tra thu hồi “là miễn phí” là sai lệch
Version 2.36.0
Thay đổi (Changed)
- Các yêu cầu TSA HTTP hiện gửi tiêu đề
Content-Lengthrõ ràng bên cạnh các tiêu đềContent-TypevàAccept; WinHttp tổng hợp nó từ tổng độ dài, nhưng một số proxy RFC 3161 yêu cầu một tiêu đề rõ ràng và sẽ từ chối yêu cầu với lỗi411 Length Requirednếu không có nó - Xuất XFDF hiện loại bỏ các ký tự điều khiển C0 (ngoài TAB/LF/CR đã được thoát) thay vì phát ra một chuỗi backslash-hex không hợp lệ; Lối thoát
\-01Ftrước đây không phải là XML hợp lệ (dấu gạch chéo ngược không có ý nghĩa đặc biệt trong XML), vì vậy bất kỳ trình đọc tuân thủ nào cũng sẽ từ chối tài liệu vì bị định dạng sai InjectAssociatedFileshiện ghi/Subtypetrên từ điển luồng EmbeddedFile khi người gọi cung cấpTAssociateFile.MIMEType; Trường này đã được khai báo và ghi tài liệu nhưng bộ tiêm trước đây đã mã hóa cứng/Type /EmbeddedFilevà bỏ qua nó (ISO 32000-2 §7.11.4 cho phép/Subtypetrên luồng)
Sửa lỗi (Fixed)
- Nhập XFDF đã bỏ qua byte nội dung đầu tiên sau UTF-8 BOM và byte đầu tiên khi không có BOM:
BytesToAnsi(Bytes, 4, ...)(BOM) vàBytesToAnsi(Bytes, 1, ...)(không có BOM) đã sử dụng các độ lệch bắt đầu bị lệch một đơn vị vìBytesToAnsinhận chỉ mục mảng dựa trên 0; Các lệnh gọi hiện sử dụng3và0 ExtractSignatureValuecó hai lỗi thụt lềiflơ lửng trong đóR.Position:= CNchạy vô điều kiện cho các nhánhcertificates [0]vàsignedAttrs [0]tùy chọn; Các nhánh hiện được bọc trongbegin/endđể vị trí chỉ được tăng lên khi TLV tùy chọn thực sự được đọc (cùng loại lỗi đã được sửa trongAddSignatureTimestampToCmstrong v2.22.0)
Version 2.35.0
Thay đổi (Changed)
TFPDFAvail_IsDocAvail,TFPDFAvail_IsPageAvailvàTFPDFAvail_IsFormAvailhiện nhậnhints: PFX_DOWNLOADHINTSthay vìvar hints: FX_DOWNLOADHINTS, để chế độ chỉ truy vấnnullptrđược tài liệu hóa (kiểm tra tính khả dụng hiện tại mà không yêu cầu thêm dữ liệu) có thể truy cập được từ Delphi; Tiêu đề PDFium cho phép rõ rànghintslà null; liên kếtvartrước đây đã làm cho điều đó không thể thực hiện đượcTFPDF_SetSystemFontInfohiện nhậnpFontInfo: PFPDF_SYSFONTINFOthay vìvar pFontInfo: FPDF_SYSFONTINFO, vì vậy người gọi có thể truyềnnilđể yêu cầu PDFium ngừng sử dụng giao diện phông chữ hệ thống đã đăng ký trước đó (đường dẫn vô hiệu hóa được tài liệu hóa)TPdfThumbnailView.Painthiện tính toánVisibleRowsbằng cùng công thức vớiUpdateScrollBarRange(ClientHeight div RowHeight), do đó số lượng hàng được vẽ khớp với kích thước trang thanh cuộn; Công thức chỉ vẽ trước đây ((ClientHeight - FMarginY) div RowHeight + 1) có thể khác biệt một hàng ở độ cao biên, gây lãng phí kết xuất trên một hàng ngoài trang hoặc bỏ sót hàng hiển thị cuối cùng
Version 2.34.0
Thêm (Added)
TPdf.SaveAsEncrypted/SaveAsEncryptedToStream— API cấp cao lưu tài liệu sau đó mã hóa nó bằng PDF 2.0 AES-256-CBC (V=5/R=5/R=6); Nhận mộtTPdfEncryptOptionsvới mật khẩu người dùng/chủ sở hữu, quyền hạn và bản sửa đổi; ủy quyền choEncryptDocumentBytes- Mã hóa chuỗi ký tự StrF:
EncryptDocumentByteshiện mã hóa các chuỗi ký tự(...)trong các đối tượng không phải luồng (từ điển Info, v.v.) thành các chuỗi hex AES-256-CBC, khớp với định dạng mã hóa luồng (tiền tố IV 16-byte + bản mã PKCS7); Các chuỗi hex<...>được giữ nguyên không chạm vào
Version 2.33.0
Thêm (Added)
- Bộ chèn mã hóa AES-256-CBC toàn bộ tài liệu trong
FPdfEncrypt.pas;EncryptDocumentBytesnhận một PDF văn bản rõ và mật khẩu, mã hóa mọi đối tượng luồng gián tiếp (IV 16-byte + AES-256-CBC PKCS7 theo khóa tệp), vá/Length, thêm đối tượng từ điển/Encrypt, và xây dựng lại bảng tham chiếu chéo cổ điển hoàn chỉnh + trailer với/Encryptvà/ID; Hoàn thiện ngăn xếp mã hóa PDF 2.0 (khối AES + GCM + SHA-512/384 + dẫn xuất khóa R6 + từ điển + quét tài liệu) - Trình trợ giúp
EncryptStreamPayload— định dạng luồng PDF 2.0 AES-256 (IV được thêm vào trước bản mã AES-CBC-PKCS7), có thể tái sử dụng bởi những người gọi quản lý bố cục đối tượng của riêng họ
Version 2.32.0
Thêm (Added)
- Hàm băm SHA-512 / SHA-384 (FIPS 180-4) trong unit mới
FPdfSha512.pas; Pure-Pascal, được chuyển cổng từ HotPDF; Bắt buộc đối với vòng lặp băm mật khẩu PDF 2.0 R6, phân nhánh trên giá trị mod-3 128-bit để chọn SHA-256/384/512 sau mỗi vòng; Đã xác minh câu trả lời đã biết FIPS-180-4 B.1 - Dẫn xuất khóa mã hóa PDF 2.0 và trình xây dựng từ điển Encrypt trong unit mới
FPdfEncrypt.pas; Triển khai thuật toán ISO 32000-2 §7.6.4.3 2.B (R6 hash dance: AES-128-CBC + lựa chọn SHA-256/384/512 lặp đi lặp lại), lấy khóa mã hóa tệp 32-byte cùng các mục nhập/O,/U,/OE,/UE,/Perms, và xây dựng từ điển Encrypt V=5/R=5/R=6 với/CFM /AESV3; Được chuyển cổng từ PDFlibPas, điều chỉnh theo phong cách TBytes
Version 2.31.0
Thêm (Added)
- Các nguyên mẫu mật mã khối AES (FIPS 197) trong unit mới
FPdfAes.pas; Mật mã khối AES-128 và AES-256 Pure-Pascal cùng các trình trợ giúp chế độ CBC và chương trình phụ trợ CSPRNG, được chuyển từ HotPDF; Các kiểm tra câu trả lời đã biết FIPS-197 Phụ lục C.2 / C.3 xác minh tính đúng đắn; Đây là nền tảng mật mã cho ngăn xếp mã hóa PDF 2.0 - Mã hóa được xác thực AES-GCM (NIST SP 800-38D) trong unit mới
FPdfAesGcm.pas; Triển khai GHASH (phép nhân GF(2^128)), GCTR và cấu trúc GCM AEAD trên các nguyên mẫu khối AES; Các trường hợp kiểm thử NIST GCM 1 và 3 (AES-128) khớp chính xác với bản mã và thẻ có thẩm quyền; trường hợp kiểm thử 13 (AES-256) hoạt động khứ hồi; GCM là chế độ ISO/TS 32003 cho PDF 2.0 - Xác thực tính toàn vẹn của ParentTree và ClassMap trong PDF/A Level A (ISO 19005-1 §6.8.3);
pvaiParentTreeMissinggắn cờ một StructTreeRoot không có cây số /ParentTree;pvaiClassMapUnresolvedgắn cờ một tham chiếu lớp /C không có /ClassMap
Version 2.30.0
Thêm (Added)
- Tiêm tệp liên kết (
InjectAssociateFiles/TPdf.SaveAsWithAssociateFiles, ISO 32000-2 §7.11.4); Unit mớiFPdfAssocFilesđính kèm các mảng/AFcủa các tham chiếu đặc tả tệp vào danh mục hoặc bất kỳ từ điển trang nào, bao trùm tất cả tám giá trị/AFRelationshipcủa Bảng 45 ISO 32000-2; Sử dụng lại mẫu cập nhật tăng dần đã được chứng minh bởiInjectPadesDssMarkers - Hỗ trợ PDF/X-6 (ISO 15930-9:2020);
TPdfXConformancethêmpxc6; bộ tiêm và bộ xác thực luồn nó qua nhận dạngpdfxid:GTS_PDFXVersion; PDF/X-6 là phiên bản kế thừa dựa trên PDF 2.0 cho PDF/X-4 để trao đổi hoàn chỉnh - PDF/A cấm hành động
/Thread(khoảng trống danh sách trắng ISO 19005-1 §6.6.1); Danh sách các hành động bị cấm hiện bao gồm Thread cùng với Launch, ResetForm, ImportData, SetOCGState, SetState, GoTo3DView, Rendition và Hide
Sửa lỗi (Fixed)
- Đường dẫn xác thực PDF/A-4e hiện tuân theo các kiểm tra cấu trúc được gắn thẻ, MarkInfo và ngắt từ tương tự như Level A; Việc hạ cấp phía lưu v2.29.0 đã bao gồm
PdfAIsLevelE, nhưng ba cổngValidatePdfACompliancechỉ kiểm tra riêngPdfAIsLevelA, vì vậy tài liệu PDF/A-4e thiếu cấu trúc được gắn thẻ đã được chấp nhận một cách âm thầm - Độ lệch kiểm thử
/BaseStatecủa OCG: lượt PostProcess v2.28.0 đã mở rộng sự chấp nhận một cách chính xác thành/ONhoặc/OFF(Bảng 8.70 ISO 32000-1), nhưng các kiểm thử Delphi và C++ vẫn mong đợi/OFFbị từ chối; Các kiểm thử hiện sử dụng một giá trị thực sự không hợp lệ (/Undefined) và một kiểm thử tích cực mới khóa sự chấp nhận/OFF - Khớp quá mức
/Subtype /GEOđịa không gian:ContainsDictionarySubtype('GEO')khớp với bất kỳ từ điển nào mang mã thông báo này, bao gồm cả các từ điển không liên quan như/ViewerPreferences << /Subtype /GEO >>lạc hướng;ContainsMeasureDictionarySubtypemới bổ sung yêu cầu/Type /Measurehoặc khóa anh em dành riêng cho Measure, do đó các từ điển không phải Measure không còn kích hoạt yêu cầu ADBE ExtensionLevel 3
Version 2.29.0
Thêm (Added)
- Hỗ trợ PDF/A-4 (ISO 19005-4:2020) trên toàn bộ bộ xác thực, bộ tiêm XMP và lớp mô hình đối tượng Pdfium;
TPdfAConformancethêmpac4base,pac4fvàpac4e; cấp độ cơ sở là PDF 2.0 (ISO 32000-2) và thay thế các cấp độ A/B/U kế thừa bằng cấp độ cơ sở + F (biểu mẫu) + E (khả năng tiếp cận);ValidatePdfAđọc một gói XMPpdfaid:part=4(cơ sở bỏ qua phần tử tuân thủ),SaveAsPdfAphát ra nó, vàSignPadesWithPdfAchấp nhậnpac4baselàm vùng chứa lưu trữ dài hạn - Liên kết
FPDFBookmark_GetColor— xuất bản công khai PDFium chưa liên kết cuối cùng (469/469);TBookmarkcó thêm các trườngHasColorvàColorđược điền từ mảng/Ccủa dấu trang (ISO 32000-1 §12.3.3); Liên kết sử dụng tải khoan dung để các DLL cũ hơn trước khi xuất bản tiếp tục hoạt động - Kiểm tra phiên bản tiêu đề PDF/E-1 (ISO 24517-1 §5)
pveiBadPdfVersion— PDF/E-1 dựa trên PDF 1.6 và tiêu đề không phải 1.6 hiện bị gắn cờ - PDF/R-1 (ISO 23504-1)
pvriEncryptVersionMismatch— mã hóa chỉ được phép trên tiêu đề%PDF-2.0; thân 1.x mang/Encrypthiện bị gắn cờ (trước đây là một lệnh vô hiệu) - PDF/R-1
pvriBadMediaBox— mỗiMediaBoxtrang phải là[0 0 w h];PdfRHasNonZeroMediaBoxOriginlà một máy quét ASCII độc lập với ngôn ngữ bỏ qua các MediaBox tham chiếu gián tiếp - PDF/A Level A
pvaiRoleMapUnresolved(ISO 19005-1 §6.8.3.4) — một RoleMap hiện diện nhưng không đầy đủ mà bỏ qua việc ánh xạ các loại cấu trúc/Stùy chỉnh hiện bị gắn cờ, lấp đầy khoảng trống từ việc kiểm tra chỉ kiểm tra sự hiện diệnpvaiRoleMapMissingtrước đó
Sửa lỗi (Fixed)
PdfVersionToName(20)đã trả về"1.0"thay vì"2.0", làm hỏng mục nhập/Versiondanh mục và các thông báo của trình xác thực cho mỗi lần lưu PDF 2.0; Trình định dạng hiện chia major.minor một cách rõ ràng cho các mã phiên bản>= 20- Trình mã hóa
FPdfAsn1.pasâm-INTEGER đã không biên dịch được dưới Delphi 12 (lỗiE2015trênInteger(-(V<0))), chặn toàn bộ dự án thử nghiệm; Được sửa bằng cách sử dụngInt64(-Ord(V<0))cho mặt nạ mở rộng dấu - Danh sách chú thích bị cấm của PDF/A hiện bao gồm
/RichMediatrên tất cả các phần (trước đây bị bỏ sót; ISO 32000-1 §12.5.6.35 cấm nó trong PDF/A)
Version 2.28.0
Thêm (Added)
TPdfVersionhiện bao gồmpv20cho PDF 2.0 (ISO 32000-2);DecodePdfVersion(20)trả vềpv20thay vìpvUnknown, vàEncodePdfVersion(pv20)phát ra 20 để phiên bản của tài liệu PDF 2.0 không còn bị mất khi đọc lại và có thể ghi một cách rõ ràng
Thay đổi (Changed)
DecodeDatehiện phân tích cú pháp các chuỗi ngày PDF với các trường tùy chọn phía sau theo PDF Reference 3.8.3, thay vì yêu cầu dạng 23 ký tự đầy đủD:YYYYMMDDHHmmSSOHH'mm'; Các ngày bị cắt bớt tuân thủ nhưD:20260712,D:20260712153000, vàD:20260712153000Zhiện được chấp nhận; trước đây chúng bị từ chối bởi cổng cứngLength=23; Độ lệch giờ múi giờ hiện được xác thực dựa trên phạm vi UTC-12..UTC+14 thực tế thay vì> 23FPdfMeasure.MeasureTexthiện mã hóa tên phông chữ dưới dạng FPCAnsiString/ DelphiUTF8Encode, khớp với các trang gọi FPDF_BYTESTRING khác của thư viện, thay vì ép kiểuAnsiStringtrần làm hỏng các tên họ phông chữ non-ASCII qua trang mã hiện tại
Sửa lỗi (Fixed)
- Đường dẫn giá trị âm
TDerWriter.Integerbị sập hoặc tạo ra DER không hợp lệ: vòng lặpwhile V <> -1 do V := V shr 8để trốngInnerchoValue = -1(lỗi phạm vi trênInner[Length(Inner)-1]tiếp theo) và tạo ra quá nhiều byte cho các giá trị âm khác; Trình mã hóa hiện trích xuất các byte bù hai với các dịch chuyển mở rộng dấu và dừng lại một cách chính xác khi phần còn lại là mở rộng dấu thuần túy; Các trường INTEGER của CMS/PAdES là số dương, vì vậy điều này chỉ ảnh hưởng đến những người gọi truyền giá trị âm, nhưng đường dẫn này hiện đã đúng TPdf.GetCharacterOriginvàTPdfView.GetCharacterOriginđã bỏ qua giá trị trả về củaFPDFText_GetCharOriginvà trả về một điểm chưa được khởi tạo khi thất bại; Kết quả hiện được khởi tạo bằng 0 và một lần đọc thất bại sẽ trả về điểm gốc (khớp với hợp đồng củaGetCharacterRectangle)
Version 2.27.0
Đã thay đổi (Changed)
- Các demo
PDFViewervàMultiPageViewertrên Delphi, C++Builder và Lazarus hiện cho phép vòng tìm kiếm tài liệu quấn lại đúng một lần, chấp nhậnEntervàF3để chuyển tới kết quả tiếp theo, đặt lại ngữ cảnh tìm kiếm khi tùy chọn so khớp thay đổi, và dành riêngEscđể hủy phiên tìm kiếm hoặc tác vụ in đang chạy - In ấn trong viewer hiện tuân theo góc xoay hiện tại của viewer và chọn đầu ra khổ dọc hay khổ ngang tương ứng, để góc xoay trên thanh công cụ được phản ánh trong các trang đã in
- Cả ba demo
ViewerInteractionLabhiện hỗ trợ các phím tắtCtrl+A,Ctrl+C,Enter,F3vàEscmà không chặn các lệnh chọn và sao chép gốc của edit control
Đã sửa (Fixed)
- Việc hủy in trong viewer trên C++Builder và Lazarus hiện hủy tác vụ in thay vì gửi đi các trang đã kết xuất trước khi hủy, và Lazarus chủ động thoát khỏi mọi vòng lặp lồng nhau cho bản sao, trang và collation
- Nút Cancel của demo
MultiPageViewerDelphi hiện đã được nối với handler tương ứng, và các ô tìm kiếmMultiPageViewertrên C++Builder/Lazarus giữ nguyên tính năng chỉnh sửa bằng phím mũi tên, Home và End gốc
Version 2.26.0
Đã thay đổi (Changed)
TPdf.GetObjectBitmap,TPdf.GetBitmap,TPdf.GetThumbnailvà các đối tácTPdfViewcủa chúng hiện giữ render lock trong lúc gọiFPDFImageObj_GetBitmap/FPDFPage_GetThumbnailAsBitmap, đồng nhất vớiRenderPage/RenderTile. Đây là các lệnh phía kết xuất của PDFium vốn trước đây chạy không có lock và có thể xảy ra race với mộtUnloadPage/ReloadPageđồng thời trên cùng một tài liệuTPdf.RenderPageThumbnailhiện tôn trọng mục/Rotatecủa trang: tỷ lệ vừa khung được tính lại từ kích thước sau xoay với các trang/Rotate 90hoặc270để tỉ lệ khung hình của thumbnail khớp với những gì viewer hiển thị, thay vì dùng kích thước gốc (chưa xoay) doFPDF_GetPageSizeByIndextrả về
Đã sửa (Fixed)
TPdfView.GetCharacterRectangletừng bỏ qua giá trị trả về củaFPDFText_GetCharBoxvà truyền mộtTPdfRectanglechưa khởi tạo choPageToDevicekhi PDFium báo thất bại. Hình chữ nhật hiện được khởi tạo bằng 0 và một lệnhGetCharBoxthất bại trả vềRect(0,0,0,0)- Độ dài buffer cho URI path và đường dẫn tệp trong
GetLinkAnnotationsbị lệch một đơn vị: lệnhFPDFAction_GetURIPath/GetFilePaththứ hai truyềnsize(gồm cả NUL cuối) làm độ dài buffer cho một buffer được cấp phát chỉsize-1. Lệnh gọi hiện truyềnsize-1để không thể ghi vượt quá vùng cấp phát trên các bản build PDFium không tự clamp
Version 2.25.0
Đã thay đổi (Changed)
TPdf.AddText,SetText,AddPathvàInsertFormObjectFromXObjecthiện vô hiệu hóa text page và link annotation đã cache trước khi tái tạo nội dung trang, đồng nhất vớiSetTextPositionsvàRemoveObject. Trước đây, một lệnhGetText/GetWebLinks/FindFirstgọi sau khi chỉnh sửa trang trả về dữ liệu văn bản và liên kết cũ được ghi nhận trước chỉnh sửa, và handleFPDF_TEXTPAGEgiữ lại bị dùng tiếp sau khi nội dung được tái tạo với hành vi không xác địnhTPdfView.RenderPage(HDC, ...)hiện giữ render lock và che các ngoại lệ FPU/SSE trong lúc gọiFPDF_RenderPage, đồng nhất với mọi điểm vào kết xuất khác. Overload ghi thẳng ra DC trước đây có thể xảy ra race với mộtUnloadPage/ReloadPageđồng thời trên cùng một tài liệu và để các ngoại lệ FPU không được che trên các trình biên dịch trước D12- Demo
PrintPDFDelphi hiện gọiPrinter.Abortkhi hủy thay vì để khốifinallyđi tớiPrinter.EndDoc, vốn đã gửi các trang được kết xuất trước khi hủy. Demo Lazarus trước đó đã xử lý đúng phần này
Đã sửa (Fixed)
TPdf.GetCharacter,TPdf.GetCharcodevà các đối tácTPdfViewcủa chúng từng cắt cụt các code point astral-plane (emoji, CJK Extension B) doFPDFText_GetUnicodetrả về xuống 16 bit thấp quaWideChar(), tạo ra một lone surrogate làm hỏng xử lý văn bản phía sau. Ký tự trên U+FFFF hiện trả về U+FFFD (replacement character); dùngGetTextđể lấy mã hóa UTF-16 đầy đủ của các ký tự astralGetWebLinksgọiSetLength(Rectangles, FPDFLink_CountRects(...))mà không phòng trường hợp trả về-1, điều này gây raEOutOfMemorytrên một trang dị dạng. Giá trị đếm âm hiện được kẹp về 0TPdf.Destroyhiện xóa sạch chuỗiPasswordkhỏi bộ nhớ (quaUniqueString+FillChar) trước khi buffer đếm tham chiếu được giải phóng, để mật khẩu không còn nằm đọc được trên heap sau khi component bị hủy
Version 2.24.0
Đã thêm (Added)
TPdf.DeletePage,GetAttachment,GetAttachmentName,GetAttachmentType,SetAttachmentvàDeleteAttachmenthiện kiểm tra chỉ số trang/attachment và raiseEPdfErrorkhi giá trị ngoài phạm vi, đồng nhất với hành vi sẵn có của các accessor annotation. Trước đây, chỉ số ngoài phạm vi được truyền thẳng tới PDFium và cho ra một no-op im lặng hoặc hành vi không xác định
Đã sửa (Fixed)
- Rò rỉ handle page-object khi gặp lỗi trong
TPdf.AddText,AddBitmapvàAddJpegImage: khiFPDFText_SetText,FPDFImageObj_SetBitmap,FPDFImageObj_SetMatrixhoặcFPDFImageObj_LoadJpegFileInlineraise sau khi object đã được tạo nhưng trước khiFPDFPage_InsertObjecttrao nó cho trang, handle nativeFPDF_PAGEOBJECTbị rò rỉ. Mỗi đường xử lý hiện hủy object ngay khi ngoại lệ xảy ra trước khi raise lại TPdf.UnloadPagetừng vứt bỏ handleFPathđang dở (được đặt bởiCreatePathnhưng chưa đượcAddPathtiêu thụ) bằng cách gán nó thànhnilmà không gọiFPDFPageObj_Destroy. Handle hiện được hủy đúng cách nên một path vừa tạo đã bỏ dở (hoặc bị gián đoạn bởi việc chuyển trang) không còn rò rỉTPdf.InsertFormObjectFromXObjectthiếu lệnhUpdatePage(FPDFPage_GenerateContent) mà mọi lệnh chèn anh em (AddText/AddPath/AddBitmap/AddJpegImage/SetText/RemoveObject) đều thực hiện, nên một Form XObject chèn theo cách này biến mất ở lần reload hoặc save kế tiếp.UpdatePagehiện được gọi sau khi chèn
Version 2.23.0
Đã sửa (Fixed)
- Xác thực
/BaseStatecủa optional content hiện chấp nhận/OFFbên cạnh/ON(ISO 32000-1 Table 8.70 cho phép cả hai). Lần kiểm tra trước đây từng từ chối các cấu hình/OCProperties /D /BaseState /OFFhợp lệ với lỗi “malformed optional content” dù tệp thực ra tuân thủ - Xác thực
/Intentcủa optional content hiện chấp nhận/Designvà các mảng name như[/View /Design], chứ không chỉ literal/View. ISO 32000-1 Table 8.70 định nghĩa/Intentlà một name hoặc mảng name lấy từ/Viewvà/Design; lần kiểm tra đơn giá trị trước đây đã từ chối quá tay đầu ra từ các công cụ soạn thảo chuẩn - Phát hiện từ điển Measure địa lý cho cổng
/Extensions /ADBEExtensionLevel 3 của PDF 1.7 không còn đòi hỏi/Type /Measure, thứ mà ISO 32000-1 Table 254 đánh dấu là tùy chọn. Các công cụ tạo GeoPDF bỏ qua/Type(PDFBox, QGIS, FME) trước đây lọt qua cổng này và âm thầm tạo ra đầu ra PDF 1.7 không tuân thủ; bộ dò hiện chỉ cần khớp riêng/Subtype /GEO
Version 2.22.0
Đã thay đổi (Changed)
- Các phép tính fit-zoom của
TPdfView(GetPageZoom,GetPageWidthZoom,GetPageHeightZoom) hiện dùngClientWidth/ClientHeightthay choWidth/Heightcủa cửa sổ, đểpfmFitPage/pfmFitWidth/pfmFitHeightkhớp trang theo viewport nhìn thấy được thay vì khung ngoài gồm cả scrollbar và viền, qua đó loại bỏ scrollbar thừa từng xuất hiện khi trang vừa khớp nhỉnh hơn vùng client AddSignatureTimestampToCmshiện raise mộtExceptiontường minh chỉ ra trường CMS SignerInfo không đọc được (version / sid / digestAlgorithm / signedAttrs / signatureAlgorithm) thay vì lặng lẽExitvà để một bản parse dang dở trôi tiếp như thể đó là một CMS đã ký hoàn chỉnh; khốibegin/endbị thiếu quanh nhánh tùy chọnsignedAttrs [0]khiếnR.Positionkhông được tăng cũng đã được sửa
Đã sửa (Fixed)
- Rò rỉ handle khóa riêng CNG trong
ResolveWinSigner: khiCryptAcquireCertificatePrivateKeythành công nhưng bước trích xuất issuer/serial kế tiếp hoặcTWinCmsSigner.Createraise,NCryptKeyHandlekhông bao giờ được giải phóng vì quyền sở hữu chỉ chuyển sang signer khi constructor thành công. Phần thiết lập sau khi acquire hiện được bọc lại để handle được giải phóng quaNCryptFreeObjecttrước tiên ngay khi có bất kỳ thất bại nào EcDsaP1363ToDerhiện từ chối nửarhoặcstoàn số 0 thay vì phát raINTEGER 0; chữ ký ECDSA vớir = 0hoặcs = 0là không hợp lệ (RFC 4754 §6 / FIPS 186-4 §6 đòi hỏi1 ≤ r, s ≤ n-1) và nếu không sẽ bị một verifier dễ dãi chấp nhận như thể là chữ ký thật
Version 2.21.12
Đã sửa (Fixed)
- Việc lưu PDF 1.5 đến PDF 1.7 rõ ràng bây giờ từ chối các cấu trúc
/OCPropertiesdanh mục bị định dạng sai, bao gồm các mục nhập/OCGshoặc/Dbắt buộc bị thiếu, các giá trị cấu hình mặc định không hợp lệ và các mục nhập trạng thái không phải mảng
Version 2.21.11
Đã sửa (Fixed)
- Việc lưu phiên bản PDF rõ ràng bây giờ từ chối các mục nhập trang
/Annotstrực tiếp hoặc gián tiếp có từ điển chú thích bỏ qua mục nhập/Subtypehoặc/Rectbắt buộc
Version 2.21.10
Đã sửa (Fixed)
- Việc lưu PDF 1.7 rõ ràng bây giờ yêu cầu các từ điển địa không gian
/Type /Measure /Subtype /GEOvà chú thích Projection khai báo/Extensions /ADBEvới/BaseVersion /1.7và/ExtensionLevel 3hoặc mới hơn
Version 2.21.9
Đã sửa (Fixed)
- Việc lưu PDF 1.7 rõ ràng bây giờ yêu cầu các chú thích RichMedia và hành động
RichMediaExecutekhai báo/Extensions /ADBEvới/BaseVersion /1.7và/ExtensionLevel 3hoặc mới hơn
Version 2.21.8
Đã sửa (Fixed)
- Việc lưu PDF 1.7 rõ ràng bây giờ yêu cầu các luồng PRC 3D khai báo
/Extensions /ADBEvới/BaseVersion /1.7và/ExtensionLevel 1hoặc mới hơn, thay vì coi PRC là tính năng cốt lõi của PDF 1.7
Version 2.21.7
Đã sửa (Fixed)
- Việc lưu PDF 1.4 và cũ hơn rõ ràng bây giờ từ chối các mục nhập
/SMaskInDatacủa XObject hình ảnh, bao gồm giá trị rõ ràng là0, vì các kênh mặt nạ mềm JPEG 2000 được nhúng yêu cầu PDF 1.5 hoặc mới hơn
Version 2.21.6
Đã sửa (Fixed)
- Việc lưu PDF 1.4 và cũ hơn rõ ràng bây giờ từ chối các XObject hình ảnh 16 bit yêu cầu PDF 1.5 hoặc mới hơn, trong khi các mục tiêu PDF 1.5 đến PDF 1.7 vẫn giữ nguyên dữ liệu hình ảnh
/BitsPerComponent 16
Version 2.21.5
Đã sửa (Fixed)
- Việc lưu PDF 1.4 và cũ hơn rõ ràng bây giờ từ chối các giá trị
/PageLayout /TwoPageLeftvà/TwoPageRightcủa danh mục tài liệu yêu cầu PDF 1.5 hoặc mới hơn, trong khi các mục tiêu PDF 1.5 đến PDF 1.7 vẫn giữ nguyên bố cục hai trang được yêu cầu
Version 2.21.4
Đã sửa (Fixed)
- Việc lưu PDF 1.3 rõ ràng bây giờ từ chối các mục
/Langtrong danh mục tài liệu yêu cầu PDF 1.4 hoặc mới hơn, trong khi các mục tiêu PDF 1.4 đến PDF 1.7 vẫn giữ nguyên mã nhận dạng ngôn ngữ
Version 2.21.3
Đã sửa (Fixed)
- Việc lưu PDF 1.3 rõ ràng bây giờ từ chối các cây tên
/EmbeddedFilescủa tài liệu yêu cầu PDF 1.4 hoặc mới hơn, mà không từ chối các luồng tệp được nhúng vào được tham chiếu qua các đặc tả tệp cũ hơn
Version 2.21.2
Đã sửa (Fixed)
- Lưu ở PDF 1.3 tường minh hiện từ chối các metadata stream đang hoạt động, thứ đòi hỏi PDF 1.4 trở lên, trong khi vẫn giữ chúng cho các đích PDF 1.4 đến PDF 1.7
Version 2.21.1
Đã sửa (Fixed)
- Xác thực tham chiếu hỗn hợp bây giờ áp dụng các mục
/XRefStmbổ sung trước các placeholder xref cổ điển cùng phiên bản, do đó các chú thích bị nén và các đối tượng bị giới hạn phiên bản không còn bị bỏ sót
Version 2.21.0
Đã thay đổi (Changed)
- Tất cả ví dụ viewer trên Delphi, C++Builder và Lazarus đều có thể mở tệp PDF được truyền dưới dạng đối số dòng lệnh đầu tiên, và các ví dụ
MultiPageViewertrên C++Builder và Lazarus cung cấp phím tắt chọn tất cả và sao chép tường minh
Đã sửa (Fixed)
- Các ví dụ viewer hiện từ chối đích trang bookmark và liên kết không hợp lệ, giữ lại lỗi khi tải, kiểm tra đầu vào zoom thủ công một cách nhất quán, in trang đã điền form được yêu cầu thay vì lặp lại trang đang hiển thị, và hủy các tác vụ in Delphi đã bị hủy thay vì gửi đi đầu ra dang dở
Version 2.20.0
Đã thay đổi (Changed)
- Tất cả các ví dụ trình xem Delphi, C++Builder và Lazarus bây giờ cung cấp các phím tắt nhất quán để mở, tìm kiếm, lưu, in, thu phóng và điều hướng trang, trong khi mửi biến thể
ViewerInteractionLabcũng hỗ trợ nhảy trang, thu phóng thủ công 10–60 % được xác thực, nhật ký tương tác lâu dài và kiểm tra khứ hồi tọa độ nhấp chuột
Version 2.19.1
Đã sửa (Fixed)
- Xác thực phiên bản PDF tường minh bây giờ đi theo chuỗi revision classic, hybrid hoặc xref-stream đang hiệu lực, bao gồm cả các mục đối tượng nén, nhờ đó các đối tượng bị thay thế, đã được giải phóng hay không được tham chiếu tới không còn khiến kiểm tra báo sai lỗi phiên bản tính năng
Version 2.19.0
Đã thay đổi (Changed)
- Các ví dụ đính kèm, trích xuất ảnh, trích xuất văn bản, chuyển đổi trang và tách tài liệu trên C++Builder và Lazarus bây giờ dùng thư mục đầu ra riêng hoặc các tệp được kết thúc (finalize) một cách an toàn, tên ổn định có đệm số 0, cập nhật tiến trình mượt mà, cùng bản tóm tắt khi hoàn tất kèm số đếm lỗi theo từng mục
Đã sửa (Fixed)
CJKTextLabtrên C++Builder bây giờ đo văn bản thông qua các hàm chỉnh sửa PDFium được xuất ra, cònMergePDFtránh một overload thông điệp VCL nhập nhằng, qua đó các bản build RAD Studio 37 sạch sẽ trở lại
Version 2.18.3
膼茫 s峄璦 (Fixed)
- D岷 th峄漣 gian t脿i li峄噓 PAdES B-LTA hi峄噉 膽瓢峄 膽膬ng k媒 d瓢峄沬 d岷g m峄檛 tr瓢峄漬g ch峄?k媒 c贸 th峄?ph谩t hi峄噉 膽瓢峄 鈥?m峄檛 Widget v么 h矛nh c贸 th峄?truy c岷璸 th么ng qua
/Annotsc峄 trang 膽岷 ti锚n v脿/Fieldsc峄 AcroForm (ETSI EN 319 142-1 搂5.4.3) 鈥?thay v矛 m峄檛 膽峄慽 t瓢峄g m峄?c么i kh么ng th峄?ti岷縫 c岷璶 m脿 c谩c tr矛nh x谩c th峄眂 li峄噒 k锚 tr瓢峄漬g ch峄?k媒 kh么ng th峄?t矛m th岷; c谩c ch煤 th铆ch v脿 tr瓢峄漬g hi峄噉 t岷 膽瓢峄 b岷 to脿n
Version 2.18.2
膼茫 s峄璦 (Fixed)
- Vi峄嘽 k媒 PAdES v脿 ghi tham chi岷縰 ch茅o classic hi峄噉 膽瓢a ra l峄梚 r玫 r脿ng khi byte offset v瓢峄 qu谩 膽峄?r峄檔g tr瓢峄漬g 10 ch峄?s峄?c峄?膽峄媙h (~9.3 GB) thay v矛 l岷穘g l岷?膽峄?l岷 ch峄?gi峄?ch峄?
/ByteRangekh么ng 膽瓢峄 ghi (t岷 ra ch峄?k媒 kh么ng h峄 l峄? ho岷穋 v瓢峄 qu谩 d貌ng xref 20 byte (ISO 32000-1 搂7.5.4); 膽岷 ra cross-reference-stream s峄?d峄g tr瓢峄漬g nh峄?ph芒n 8 byte v脿 kh么ng b峄?岷h h瓢峄焠g
Version 2.18.1
Đã sửa (Fixed)
- Việc ký PAdES bây giờ phân giải các tham chiếu gián tiếp tới
/Annots,/AcroFormvà/Fieldscủa trang đầu theo toàn bộ header đối tượng (ISO 32000-1 §7.5.3) và theo số thế hệ thực tế của tham chiếu; trước đây tìm theo chuỗi con trơn từng khớp nhầm vào một số đối tượng nằm trong số dài hơn (phân giải5 0 Rthành15 0 obj), còn số thế hệ gắn cứng thì bỏ sót các đối tượnggen>0, dẫn đến làm hỏng các mảng trường chữ ký hoặc từ chối những tài liệu hợp lệ - Khi catalog, trang đầu,
/Annots,/AcroFormhoặc/Fieldsnằm bên trong một object stream, việc ký bây giờ thử lại trên một bản sao đã mở rộng trước khi chịu thua thay vì từ chối thẳng tài liệu
Version 2.18.0
Đã thêm (Added)
ReadPdfVersionInfobáo cáo phiên bản header, phiên bản lõi hiệu lực, phần ghi đè catalog và mức mở rộng cho nhà phát triển của Adobe từ một stream PDF
Đã thay đổi (Changed)
- Các lần lưu phiên bản tường minh PDF 1.3-1.7 bây giờ xác thực các cấu trúc catalog, tài nguyên trang, XFA, redaction và mở rộng nhà phát triển trong ngữ cảnh của chính đối tượng chứa chúng; đầu ra phiên bản tường minh có mã hóa và việc chuẩn hóa tăng dần cho PDF 1.3 đều bị từ chối để bảo toàn tính toàn vẹn của tài liệu
- Lưu theo đường dẫn tệp bây giờ ghi vào một tệp tạm nằm cạnh và chỉ thay thế đích sau khi toàn bộ các bước nén, chuẩn hóa và kiểm tra phiên bản đều thành công
Đã sửa (Fixed)
- Đầu ra PDF 1.3 bây giờ mang tài nguyên
/ProcSetđầy đủ theo yêu cầu và loại bỏ các khóa trong suốt (transparency) của PDF 1.4 khi chúng chỉ lặp lại các giá trị trạng thái đồ họa khởi tạo của PDF 1.3 - Các tệp hybrid-reference, xref-stream và object-stream không còn bị bộ nén classic-xref ghi đè lại, ngăn việc các mục đối tượng nén bị bỏ rơi
- Các tên giống khóa tính năng transparency hoặc catalog nằm trong chuỗi, chú thích hay resource map không liên quan không còn gây ra lỗi phiên bản đích giả
Version 2.17.0
膼茫 th锚m (Added)
- Ch峄?k媒 PAdES hi峄噉 膽瓢峄 膽膬ng k媒 d瓢峄沬 d岷g ch煤 th铆ch Widget v么 h矛nh trong m岷g
/Annotsc峄 trang 膽岷 ti锚n v脿 trong m岷g/Fieldsc峄 AcroForm, b岷 to脿n c谩c ch煤 th铆ch v脿 tr瓢峄漬g bi峄僽 m岷玼 hi峄噉 c贸
膼茫 thay 膽峄昳 (Changed)
- C谩c c岷璸 nh岷璽 t膬ng d岷 PDF/A, PDF/X, PDF/E, PDF/R, PDF/UA, PDF/VT v脿 PAdES hi峄噉 b岷 to脿n bi峄僽 di峄卬 tham chi岷縰 ch茅o ngu峄搉: c谩c t脿i li峄噓 xref-stream nh岷璶 膽瓢峄 b岷 c岷璸 nh岷璽 xref-stream theo y锚u c岷 c峄 ISO 32000-1 搂7.5.8.1, trong khi c谩c t脿i li峄噓 classic ti岷縫 t峄 nh岷璶 膽瓢峄 b岷g xref
- 膼峄?l峄嘽h tham chi岷縰 ch茅o,
startxref,/Prev, c谩c gi谩 tr峄?ByteRange c峄 PAdES v脿 x峄?l媒 ph岷 vi SHA-256 hi峄噉 s峄?d峄g v峄?tr铆 64-bit v峄沬 b膬m ph芒n 膽o岷, cho ph茅p c谩c t峄噋 l峄沶 h啤n 2 GB trong b岷 d峄眓g 64-bit - C谩c g贸i XMP c贸 th峄?ghi 膽瓢峄 t岷 ra hi峄噉 d脿nh ri锚ng 2048 byte 膽峄噈 tr瓢峄沜 ch峄?th峄?膽贸ng g贸i
Version 2.16.10
膼茫 s峄璦 (Fixed)
- Vi峄嘽 m峄?r峄檔g d貌ng 膽峄慽 t瓢峄g kh么ng c貌n ph峄 h峄搃 c谩c b岷 sao c农 k峄?c峄 c谩c 膽峄慽 t瓢峄g m脿 m峄檛 b岷 c岷璸 nh岷璽 t膬ng d岷 膽茫 chuy峄僴 ra kh峄廼 d貌ng 膽峄慽 t瓢峄g sang 膽峄媙h ngh末a ph岷硁g (ISO 32000-1 搂7.5.7); c谩c ki峄僲 tra t铆nh tu芒n th峄?v脿 ti锚m 膽i峄僲 膽谩nh d岷 tr瓢峄沜 膽芒y 膽茫 ph芒n gi岷 catalog ho岷穋 t峄?膽i峄僴 si锚u d峄?li峄噓 l峄梚 th峄漣 tr锚n c谩c t峄噋 nh瓢 v岷瓂
Version 2.16.9
Đã sửa (Fixed)
- Trên Free Pascal, các chuỗi văn bản có đầu vào không phải UTF-8 hợp lệ được mở rộng từng byte dưới dạng Latin-1 và ghi thành chuỗi hex UTF-16BE; trước đây các byte cao thô bị rò rỉ vào literal string, vốn không phải là một kiểu mã hóa chuỗi văn bản PDF 1.7 hợp lệ
- Việc giải mã stream bây giờ nhận diện dữ liệu deflate thô không có lớp bọc zlib RFC 1950 (một khuyết tật thường gặp của các trình ghi hỏng) và giải nén nó ở chế độ raw, nhờ đó các quét tuân thủ không còn âm thầm bỏ trắng những stream như vậy
Version 2.16.8
膼茫 s峄璦 (Fixed)
- C谩c c岷璸 nh岷璽 t膬ng d岷 膽瓢峄 ghi b峄焛 膽瓢峄漬g d岷玭 h岷璾 x峄?l媒 l瓢u hi峄噉 l脿m m峄沬 ph岷 t峄?
/IDtrailer th峄?hai (thay 膽峄昳) theo y锚u c岷 c峄 ISO 32000-1 搂14.4; c岷?hai ph岷 t峄?tr瓢峄沜 膽芒y 膽峄乽 膽瓢峄 sao ch茅p nguy锚n v膬n, do 膽贸 c谩c c么ng c峄?b峄?膽峄噈 v脿 膽峄搉g b峄?h贸a th岷 m峄檛 膽峄媙h danh kh么ng 膽峄昳 sau m峄梚 l岷 c岷璸 nh岷璽
Version 2.16.7
Đã sửa (Fixed)
- Việc xóa trắng thân stream dùng bởi các quét tuân thủ bây giờ yêu cầu từ khóa
streamphải được theo sau bởi một ký tự kết thúc dòng (ISO 32000-1 §7.3.8.1); trước đây từ này nằm trong một literal string như(downstream)đã xóa trắng toàn bộ cấu trúc phía sau cho đếnendstreamkế tiếp, che giấu các vi phạm thật khỏi các kiểm tra ở mức byte - Các quét tính năng bị cấm của PDF/X và PDF/E nay còn xóa trắng thêm cả literal string và chú thích (§7.2.2), nhờ đó một giá trị như
/Title (see /JavaScript docs)hay một token nằm trong chú thích không còn tạo ra kết quả phát hiện giả vềJavaScript,AcroFormhoặcLZWDecode
Version 2.16.6
膼茫 s峄璦 (Fixed)
- C谩c m峄 DPM c峄 PDF/VT hi峄噉 膽瓢峄 x谩c th峄眂 t岷 th峄漣 膽i峄僲 ghi nh瓢 t脿i li峄噓 膽茫 m么 t岷? t锚n kh贸a vi ph岷 quy t岷痗 NMTOKEN c峄 ISO 16612-2 搂6.6 ho岷穋 quy t岷痗 ti峄乶 t峄?膽膬ng k媒 c峄 Ph峄?l峄 E, v脿 c谩c t锚n tr霉ng l岷穚, b峄?t峄?ch峄慽 thay v矛 膽瓢峄 ghi v脿o t峄?膽i峄僴 DPart 鈥?m峄檛 t锚n ch峄゛ kho岷g tr岷痭g tr瓢峄沜 膽芒y 膽茫 t谩ch th脿nh m峄檛 c岷穚 kh贸a/gi谩 tr峄?gi岷?v脿 l脿m h峄弉g t峄?膽i峄僴
Version 2.16.5
膼茫 s峄璦 (Fixed)
- Vi峄嘽 lo岷 b峄?m峄檛 m峄 t峄?膽i峄僴 c贸 gi谩 tr峄?l脿 m峄檛 chu峄梚 hex (nh瓢
/Check <...>) hi峄噉 lo岷 b峄?to脿n b峄?m峄 膽贸; c谩c tr矛nh ti锚m tr瓢峄沜 膽芒y 膽峄?l岷 m峄檛 gi谩 tr峄?hex m峄?c么i ph铆a sau, t岷 ra m峄檛 t峄?膽i峄僴 b峄?l峄梚 c煤 ph谩p - Vi峄嘽 lo岷 b峄?m峄檛 m峄 c贸 tham chi岷縰 gi谩n ti岷縫 s峄?d峄g k媒 t峄?xu峄憂g d貌ng gi峄痑 c谩c token (ISO 32000-1 搂7.3.10 cho ph茅p b岷 k峄?kho岷g tr岷痭g n脿o) kh么ng c貌n 膽峄?l岷 s峄?th岷?h峄?v脿 t峄?kh贸a
Rph铆a sau
Version 2.16.4
膼茫 s峄璦 (Fixed)
- Vi峄嘽 qu茅t s峄?膽峄慽 t瓢峄g t峄慽 膽a kh么ng c貌n y锚u c岷 ti锚u 膽峄?膽峄慽 t瓢峄g ph岷 b岷痶 膽岷 d貌ng (ISO 32000-1 搂7.5.3 cho ph茅p b岷 k峄?kho岷g tr岷痭g ho岷穋 d岷 ph芒n c谩ch n脿o tr瓢峄沜 ch煤ng), do 膽贸 c谩c tr矛nh ti锚m kh么ng c貌n c贸 th峄?c岷 ph谩t m峄檛 s峄?膽峄慽 t瓢峄g tr霉ng v峄沬 m峄檛 ti锚u 膽峄?
N G objn峄檌 tuy岷縩 v脿 l脿m h峄弉g t峄噋 m峄檛 c谩ch 芒m th岷; s峄?膽峄慽 t瓢峄g 膽瓢峄 gi峄沬 h岷 b峄焛 gi峄沬 h岷 tr岷 c峄 Ph峄?l峄 C - C谩c d貌ng c贸
/Lengthl脿 m峄檛 tham chi岷縰 gi谩n ti岷縫 hi峄噉 ph芒n gi岷 膽峄慽 t瓢峄g s峄?nguy锚n 膽瓢峄 tham chi岷縰 v脿 s峄?d峄g gi谩 tr峄?c峄 n贸 khi kh峄沺 v峄沬endstream膽贸ng; tr瓢峄沜 膽芒y c谩c d貌ng nh瓢 v岷瓂 b峄?gi峄沬 h岷 b峄焛 vi峄嘽 t矛m ki岷縨 m岷玼, v峄憂 膽茫 c岷痶 ng岷痭 c谩c th芒n d貌ng ch峄゛ chu峄梚 byteendstreamm峄檛 c谩ch h峄 l峄?鈥?th瓢峄漬g th岷 膽峄慽 v峄沬 c谩c t峄噋 膽铆nh k猫m PDF 膽瓢峄 nh煤ng
Version 2.16.3
Đã sửa (Fixed)
- Phần nén stream giữ nguyên không đụng tới các tài liệu cross-reference-stream (tệp PDF 1.5+ không có từ khóa
trailerclassic); trước đây đường dẫn tái dựng từng đọc nhầmstartxrefthành vị trí của bảng và tự tổng hợp một trailer đoán già, có thể tạo ra tệp không thể mở - Bộ nén bỏ qua các stream metadata XMP để tài liệu PDF/A giữ được stream metadata không qua filter bắt buộc của mình (ISO 19005-1 §6.7.2), và không đụng tới các external file stream (
/Fvới/FFilter) - Bảng tham chiếu chéo được tái dựng được quét từ một bản sao của tài liệu đã lược bỏ stream, nhờ đó nội dung nhị phân của stream không thể giả mạo header đối tượng hay làm phình to bảng nữa;
/Sizecủa trailer được tái dựng bây giờ phản ánh đúng bảng thực tế và các số đối tượng bị chặn ở trần Phụ lục C - Việc định vị bảng tham chiếu chéo gốc chấp nhận kết thúc dòng chỉ có CR (ISO 32000-1 §7.5.1) và không thể còn khớp nhầm các chữ cái
xrefbên trongstartxref; quét từ khóa stream có thêm cơ chế bảo vệ đuôiendstreamgiống như những nơi khác và bây giờ tiến qua được phần thân stream đã bỏ qua
Version 2.16.2
膼茫 s峄璦 (Fixed)
- Ph芒n t铆ch c煤 ph谩p s峄?nguy锚n tr锚n c谩c tr矛nh 膽峄峜 PDF c岷 byte hi峄噉 ch岷 nh岷璶 d岷
+r玫 r脿ng 膽瓢峄 cho ph茅p b峄焛 ISO 32000-1 搂7.3.3 and t峄?ch峄慽 c谩c chu峄梚 s峄?c贸 th峄?b峄?tr脿n, do 膽贸 c谩c t脿i li峄噓 膽峄檆 h岷 ho岷穋 b峄?h峄弉g kh么ng c貌n c贸 th峄?chuy峄僴 膽峄昳 c谩c 膽峄?d脿i v脿 膽峄?l峄嘽h 膽瓢峄 ph芒n t铆ch th脿nh c谩c gi谩 tr峄?g芒y hi峄僽 l岷
Version 2.16.1
膼茫 s峄璦 (Fixed)
- Tr矛nh ti锚m PDF/UA ghi gi谩 tr峄?
/Langc峄 catalog d瓢峄沬 d岷g m峄檛 chu峄梚 v膬n b岷 PDF ph霉 h峄; tr瓢峄沜 膽芒y n贸 膽茫 ch岷 gi谩 tr峄?qua tr矛nh tho谩t XML, v矛 th岷?th岷?ng么n ng峄?ch峄゛&ho岷穋 d岷 ngo岷穋 膽啤n t岷 ra m峄 b峄?h峄弉g, v脿 膽岷 v脿o kh么ng ph岷 ASCII 膽瓢峄 ghi d瓢峄沬 d岷g UTF-8 th么 - M峄 Info
/ISO_PDFEVersionc峄 PDF/E s峄?d峄g b峄?m茫 h贸a chu峄梚 v膬n b岷 d霉ng chung, gi峄?cho c谩c gi谩 tr峄?kh么ng ph岷 ASCII h峄 l峄?trong PDF 1.7 - Vi峄嘽 tho谩t XML cho c谩c g贸i XMP lo岷 b峄?c谩c k媒 t峄?膽i峄乽 khi峄僴 kh么ng h峄 l峄?trong XML 1.0, do 膽贸 si锚u d峄?li峄噓 膽瓢峄 sao ch茅p t峄?t脿i li峄噓 ngu峄搉 b峄?h峄弉g kh么ng c貌n c贸 th峄?l脿m cho to脿n b峄?d貌ng si锚u d峄?li峄噓 kh么ng 膽煤ng 膽峄媙h d岷g
- Vi峄嘽 chuy峄僴 膽峄昳 ng脿y PDF-sang-XMP x谩c th峄眂 c谩c tr瓢峄漬g ng脿y l脿 d岷g s峄?v脿 膽峄噈 tr瓢峄漬g ph煤t b峄?thi岷縰, ng膬n ng峄玜 ng脿y ISO 8601 kh么ng 膽煤ng 膽峄媙h d岷g trong XMP 膽瓢峄 t岷 ra; tr锚n c谩c n峄乶 t岷g kh么ng ph岷 Windows, d岷 th峄漣 gian d峄?ph貌ng hi峄噉 bao g峄搈 th峄漣 gian trong ng脿y thay v矛 ch峄?c贸 ng脿y thu岷 t煤y
Version 2.16.0
膼茫 th锚m (Added)
- Vi峄嘽 gi岷 m茫 d貌ng hi峄噉 d峄眓g l岷 c谩c b峄?d峄?膽o谩n
/DecodeParms(PNG predictor 10-15 v脿 TIFF predictor 2, ISO 32000-1 搂7.4.4.4) sau FlateDecode, t么n tr峄峮g/Colors,/BitsPerComponentv脿/Columns; c谩c d貌ng 膽峄慽 t瓢峄g 膽瓢峄 n茅n b岷眓g b峄?d峄?膽o谩n 鈥?m峄檛 l峄盿 ch峄峮 ph峄?bi岷縩 c峄 tr矛nh ghi PDF 1.5+ 鈥?tr瓢峄沜 膽芒y hi峄僴 th峄?c谩c byte sai bi峄噒, do 膽贸 c谩c 膽峄慽 t瓢峄g ch煤ng mang theo ho脿n to脿n v么 h矛nh 膽峄慽 v峄沬 c谩c qu茅t tu芒n th峄?v脿 ti锚m 膽i峄僲 膽谩nh d岷
膼茫 s峄璦 (Fixed)
- Vi峄嘽 ph谩t hi峄噉 FlateDecode hi峄噉 ph芒n t铆ch c煤 ph谩p gi谩 tr峄?
/Filterd瓢峄沬 d岷g m峄檛 t锚n ho岷穋 m岷g thay v矛 kh峄沺 chu峄梚 con, do 膽贸 c谩c chu峄梚 b峄?l峄峜 x岷縫 ch峄搉g v脿 s峄?xu岷 hi峄噉 c峄 t峄?n脿y b锚n trong c谩c gi谩 tr峄?kh么ng li锚n quan kh么ng c貌n k铆ch ho岷 gi岷 n茅n gi岷? c谩c chu峄梚 kh么ng 膽瓢峄 h峄?tr峄?quay l岷 c谩c byte th么 nh瓢 tr瓢峄沜
Version 2.15.1
Đã sửa (Fixed)
- Bộ quét dictionary bây giờ bỏ qua literal string, hex string và chú thích khi đếm cân bằng
<</>>(ISO 32000-1 §7.2.2), nhờ đó các dictionary chứa giá trị như(A >> B)hay một hex string nằm sát delimiter đóng không còn bị cắt cụt khi phân tích trailer, catalog và trong các quét tuân thủ - Việc trích xuất literal string bây giờ giải mã trọn bộ escape của §7.3.4.2 Bảng 3 —
\n \r \t \b \f, bát phân\ddd, nối dòng và chuẩn hóa EOL chưa escape — thay vì sao chép nguyên chữ escape, khôi phục việc so sánh chính xác/Producer,/GTS_PDFXVersionvà/ISO_PDFEVersionvới những trình ghi dùng escape bát phân - Các literal string do bộ tiêm marker ghi ra bây giờ escape CR, LF và các ký tự điều khiển khác để giá trị sống sót qua bước chuẩn hóa kết thúc dòng phía reader đúng từng byte
Version 2.15.0
膼茫 s峄璦 (Fixed)
- C谩c c岷璸 nh岷璽 t膬ng d岷 膽瓢峄 ghi b峄焛 c谩c tr矛nh ti锚m 膽i峄僲 膽谩nh d岷 PDF/A, PDF/X, PDF/E, PDF/R, PDF/UA v脿 PDF/VT c农ng nh瓢 b岷眓g c谩c 膽瓢峄漬g d岷玭 k媒 PAdES v脿 DSS hi峄噉 b岷 to脿n 膽峄媙h danh t峄噋 v末nh vi峄卬 c峄 t脿i li峄噓 ngu峄搉: ph岷 t峄?
/IDtrailer 膽岷 ti锚n 膽瓢峄 mang sang nguy锚n v膬n theo y锚u c岷 c峄 ISO 32000-1 搂14.4 v脿 ch峄?ph岷 t峄?th峄?hai (thay 膽峄昳) 膽瓢峄 l脿m m峄沬; tr瓢峄沜 膽芒y c岷?hai ph岷 t峄?膽峄乽 膽瓢峄 t岷 m峄沬, do 膽贸 c谩c tham chi岷縰 b锚n ngo脿i v脿 quy tr矛nh x谩c th峄眂 d脿i h岷 th岷 m峄檛 danh t铆nh t脿i li峄噓 kh谩c sau m峄梚 l岷 l瓢u - Ch峄?k媒 PAdES, ti锚m DSS v脿 d岷 th峄漣 gian Document Time-stamp B-LTA hi峄噉 chuy峄僴 ti岷縫 tham chi岷縰
/Infoc峄 trailer ngu峄搉 (ISO 32000-1 搂7.5.6), do 膽贸 c谩c thu峄檆 t铆nh t脿i li峄噓 kh么ng c貌n bi岷縩 m岷 kh峄廼 b岷g 膽i峄乽 khi峄僴 c峄 tr矛nh 膽峄峜 sau khi k媒; trailer Document Time-stamp c农ng nh岷璶 膽瓢峄 m岷g/ID - D峄?ph貌ng
/Infoc峄 trailer cho t脿i li峄噓 cross-reference-stream hi峄噉 膽峄媙h v峄?ch铆nh x谩c t峄?膽i峄僴 d貌ng XRef v脿 b岷 to脿n s峄?th岷?h峄?c峄 tham chi岷縰; tr瓢峄沜 膽芒y n贸 kh么ng bao gi峄?kh峄沺 tr锚n c谩c t峄噋 PDF 1.5+ tu芒n th峄? 芒m th岷 b峄?r啤i/Info
Version 2.14.4
膼茫 s峄璦 (Fixed)
- Ng脿y
/Mc峄 t峄?膽i峄僴 ch峄?k媒 膽瓢峄 ghi b峄焛TPdf.SignPadesv脿SignPadesByteshi峄噉 mang ti峄乶 t峄?D:b岷痶 bu峄檆 v脿 k媒 hi峄噓 膽峄?l峄嘽h UTCZtheo y锚u c岷 c峄 ISO 32000-1 搂7.9.4; c谩c tr矛nh x谩c th峄眂 nghi锚m ng岷穞 tr瓢峄沜 膽芒y t峄?ch峄慽 th峄漣 gian k媒 d瓢峄沬 d岷g m峄檛 chu峄梚 ng脿y sai 膽峄媙h d岷g
Version 2.14.3
膼茫 s峄璦 (Fixed)
- Tra c峄﹗ kh贸a t峄?膽i峄僴 trong tr矛nh 膽峄峜 PDF d霉ng chung hi峄噉 kh峄沺 v峄沬 to脿n b峄?token t锚n (ISO 32000-1 搂7.3.5); tr瓢峄沜 膽芒y m峄檛 d貌ng c贸 t峄?膽i峄僴 li峄噒 k锚
/Length1tr瓢峄沜/Length(th瓢峄漬g th岷 膽峄慽 v峄沬 d貌ng FontFile) b峄?c岷痶 ng岷痭 th脿nh s峄?l瓢峄g byte sai, 芒m th岷 l脿m m霉 c谩c qu茅t tu芒n th峄?PDF/A, PDF/UA v脿 c谩c qu茅t kh谩c 膽峄峜 d貌ng font, CMap ho岷穋 si锚u d峄?li峄噓 - Tra c峄﹗ trailer
/Encrypt,/Root,/Sizev脿/Infokh么ng c貌n kh峄沺 v峄沬 c谩c kh贸a d脿i h啤n c贸 c霉ng ti峄乶 t峄?(nh瓢/EncryptMetadata) - Vi峄嘽 m峄?r峄檔g d貌ng 膽峄慽 t瓢峄g kh么ng c貌n tin c岷瓂 v脿o gi谩 tr峄?
/Nb峄?h峄弉g ho岷穋 膽峄檆 h岷: c谩c gi谩 tr峄?kh么ng ph岷 s峄?nguy锚n hi峄噉 mang l岷 0 thay v矛 m峄檛 s峄?ch瓢a kh峄焛 t岷, v脿 gi峄沬 h岷 tr锚n b岷痶 ngu峄搉 t峄?/Firstgi煤p ng膬n ng峄玜 vi峄嘽 c岷 ph谩t qu谩 m峄ヽ trong khi qu茅t t脿i li峄噓 sai 膽峄媙h d岷g
Version 2.14.2
膼茫 s峄璦 (Fixed)
- C谩c tr矛nh ti锚m 膽i峄僲 膽谩nh d岷 PDF/X, PDF/VT, PDF/UA, PDF/E v脿 PDF/R hi峄噉 sao ch茅p t脿i li峄噓 ngu峄搉 膽茫 m茫 h贸a 膽i qua m脿 kh么ng 膽峄昳 thay v矛 th锚m c谩c ph岷 c岷璸 nh岷璽 d岷g v膬n b岷 thu岷; h脿nh vi tr瓢峄沜 膽芒y t岷 ra c谩c t峄噋 c贸 trailer m峄沬 nh岷 b峄?m岷 m峄
/Encrypt(ISO 32000-1 搂7.5.6), khi岷縩 c谩c tr矛nh 膽峄峜 tu芒n th峄?膽峄峜 sai ph岷 th芒n m茫 h贸a th脿nh v膬n b岷 thu岷 TPdf.SignPades,SignPadesBytesv脿InjectPadesDssMarkershi峄噉 膽瓢a ra l峄梚EPadesCryptokhi t脿i li峄噓 ngu峄搉 b峄?m茫 h贸a, thay v矛 l岷穘g l岷?ph谩t ra t峄噋 b峄?h峄弉g ho岷穋 kh么ng th峄?x谩c minh; lo岷 b峄?m茫 h贸a tr瓢峄沜 khi k媒 ho岷穋 nh煤ng t脿i li峄噓 DSS
Version 2.14.1
Đã sửa (Fixed)
TPdf.SignPadesvàSignPadesBytesbây giờ điền ngược đầy đủ cả bốn trường/ByteRangecủa signature dictionary; trước đây ba trường cuối cứ kẹt ở chỗ giữ chỗ bằng 0, khiến chữ ký tạo ra khai báo một byte range rỗng và rớt xác minh trên các validator tuân thủ- Các dictionary Document Time-stamp của PAdES B-LTA cũng nhận phần sửa điền ngược
/ByteRangetương tự ValidatePadesCompliancebây giờ chấp nhận bố cục chữ ký chuẩn, trong đó khoảng hở của byte range chứa giá trị hex của/Contents, và kiểm tra rằng đoạn range thứ hai kết thúc đúng tại cuối tệp; trước đây chỉ có các range không hở mới qua được bước kiểm tra phạm vi phủ
Version 2.14.0
Đã thêm (Added)
TPdf.ExportXFDFtuần tự hóa mọi giá trị trường biểu mẫu và chú thích trên tất cả các trang ra một tài liệu XFDF (ISO 19444-1), phát<fields>cho các giá trị biểu mẫu phân cấp và<annots>cho mọi kiểu chú thích con được hỗ trợ (text, highlight, underline, strikeout, squiggly, line, circle, square, caret, polygon, polyline, stamp, ink, freetext, fileattachment, sound, link, redact)TPdf.ImportXFDFđọc một tài liệu XFDF trở lại vào PDF đang tải, tạo lại các chú thích trên những trang khớp và áp các giá trị trường vào widget annotation của chúng- Record
TPdfAnnotationcó thêmName(NM),Subject,ModificationDate(M),CreationDate,Icon,Opacity(CA), các điểm mút line, đỉnh polygon/polyline và các trường gesture của ink-list để các vòng round-trip XFDF bảo toàn trọn vẹn metadata của chú thích - Mẫu
XfdfLabmới trong các bộ demo Delphi, C++Builder và Lazarus minh họa vòng round-trip xuất/nhập
Version 2.13.6
膼茫 s峄璦 (Fixed)
ValidatePdfAhi峄噉 coi c谩c d貌ng/Metadatac峄 catalog kh么ng c贸/Type /Metadataho岷穋/Subtype /XMLl脿 si锚u d峄?li峄噓 XMP b峄?thi岷縰 th么ng quapvaiMissingXmpMetadata- B谩o c谩o ki峄僲 tra tr瓢峄沜 PDF/A hi峄噉 ph芒n lo岷
pvaiMissingXmpMetadatal脿 Metadata v脿 khuy岷縩 ngh峄?m峄檛 d貌ng/Metadatac峄 catalog c贸/Type /Metadata,/Subtype /XML, XMP kh么ng l峄峜 v脿 c谩c 膽i峄僲 膽谩nh d岷pdfaid
Version 2.13.5
膼茫 s峄璦 (Fixed)
ValidatePdfAhi峄噉 b谩o c谩o c谩c ch煤 th铆ch Widget kh么ng c贸 t峄?膽i峄僴 di峄噉 m岷 v脿 c谩c ch煤 th铆ch PDF/A-2 / PDF/A-3 y锚u c岷 nh瓢ng thi岷縰/APth么ng quapvaiAnnotationApDictViolation- B谩o c谩o ki峄僲 tra tr瓢峄沜 PDF/A hi峄噉 ph芒n lo岷
pvaiAnnotationApDictViolationl脿 n峄檌 dung m脿 vi峄嘽 ti锚m 膽i峄僲 膽谩nh d岷 kh么ng th峄?s峄璦 ch峄痑
Version 2.13.4
膼茫 s峄璦 (Fixed)
ValidatePdfAhi峄噉 b谩o c谩o c谩c h矛nh 岷h n峄檌 tuy岷縩 PDF/A-2 v脿 PDF/A-3 c贸 gi谩 tr峄?/Iho岷穋/Interpolatel脿trueth么ng quapvaiImageDictionaryViolation, kh峄沺 v峄沬 ph岷 vi t峄?膽i峄僴 Image XObject hi峄噉 c贸- B谩o c谩o ki峄僲 tra tr瓢峄沜 PDF/A hi峄噉 ph芒n lo岷
pvaiImageDictionaryViolationl脿 n峄檌 dung m脿 vi峄嘽 ti锚m 膽i峄僲 膽谩nh d岷 kh么ng th峄?s峄璦 ch峄痑
Version 2.13.3
膼茫 s峄璦 (Fixed)
ValidatePdfAhi峄噉 b谩o c谩o c谩c h矛nh 岷h n峄檌 tuy岷縩 PDF/A-1 s峄?d峄g b峄?l峄峜/LZWDecodeho岷穋 vi岷縯 t岷痶/LZWb锚n trong c谩c d貌ng n峄檌 dung th么ng quapvaiInlineImageLzwForbidden, kh峄沺 v峄沬 ph岷 vi h矛nh 岷h n峄檌 tuy岷縩 PDF/A-2 v脿 PDF/A-3 hi峄噉 c贸- Tr矛nh qu茅t b峄?l峄峜 h矛nh 岷h n峄檌 tuy岷縩 hi峄噉 ti岷縩 qua c谩c t锚n t脿i nguy锚n d岷玭 膽岷 nh瓢
/GS1, tr谩nh vi峄嘽 b峄?膽矛nh tr峄?trong khi qu茅t c谩c d貌ng n峄檌 dung PDF/A-1 r峄檔g h啤n
Version 2.13.2
膼茫 th锚m (Added)
TPdf.SetFocusedFormFieldTextghi v膬n b岷 v脿o b峄?膽峄噈 ch峄塶h s峄璦 c峄 tr瓢峄漬g bi峄僽 m岷玼 hi峄噉 膽ang 膽瓢峄 l岷 n茅t th么ng quaFORM_ReplaceSelection, 膽峄慽 x峄﹏g v峄沬FocusedFormFieldText; 膽峄慽 v峄沬 c谩c tr瓢峄漬g v膬n b岷/h峄檖 ch峄峮 (combo) AcroForm, gi谩 tr峄?s岷?cam k岷縯 v脿o/Vkhi m岷 n茅t v脿 膽瓢峄 duy tr矛; 膽峄慽 v峄沬 c谩c tr瓢峄漬g v膬n b岷 XFA, vi峄嘽 ghi ch峄?n岷眒 trong b峄?膽峄噈 trong b峄?nh峄?(PDFium kh么ng hi峄僴 th峄?API c么ng khai n脿o 膽峄?膽峄慽 chi岷縰 gi谩 tr峄?XFA tr峄?l岷 g贸i datasets, v矛 v岷瓂 n贸 kh么ng l瓢u tr峄?l芒u d脿i)- N峄乶 t岷g m谩y ch峄?JavaScript hi峄噉 膽瓢峄 膽铆nh k猫m b岷 c峄?khi n脿o c么ng c峄?V8 kh岷?d峄g, b岷 k峄?t脿i li峄噓 c贸 ph岷 l脿 XFA hay kh么ng — do 膽贸 JavaScript AcroForm 膽瓢峄 nh煤ng (c谩c script c岷 t脿i li峄噓, t铆nh to谩n tr瓢峄漬g,
app.alert) c农ng c贸 th峄?th峄眂 thi; tr瓢峄沜 膽芒y,m_pJsPlatformch峄?膽瓢峄 k岷縯 n峄慽 cho c谩c t脿i li峄噓 XFA, khi岷縩 AcroForm JS b峄?v么 hi峄噓 h贸a m峄檛 c谩ch 芒m th岷
膼茫 thay 膽峄昳 (Changed)
- Vi峄嘽 膽铆nh k猫m n峄乶 t岷g JavaScript hi峄噉 膽峄檆 l岷璸 v峄沬 quy岷縯 膽峄媙h XFA trong
InitializeFormFill— b岷gm_pJsPlatform膽瓢峄 x芒y d峄眓g b岷 c峄?khi n脿oV8FeaturesAvailablel脿 true, 膽瓢峄 谩p d峄g sau khi k岷縯 n峄慽 phi锚n b岷/callback XFA thay v矛 膽瓢峄 l峄搉g b锚n trong n贸
Version 2.13.1
Đã thêm (Added)
- Các event host mới đưa ra những thông tin mà các callback form-fill của v2.13.0 trước đây nuốt mất:
OnXfaUriAction,OnXfaPageCountChanged,OnXfaFocusChange,OnXfaEmail,OnXfaHttpRequest,OnXfaOpenFile,OnJavaScriptBeep,OnJavaScriptPrint,OnJavaScriptMail,OnJavaScriptSubmitForm. Mỗi event khi chưa được gán sẽ mặc định theo hành vi no-op hiện có, nên các host hiện tại không bị ảnh hưởng - Property chỉ đọc
TPdf.XfaFormPacketstrả về một snapshot một lần của tất cả các XFA packet (TXfaPacketList), qua đó các kiểuTXfaPacket/TXfaPacketListtừng được khai báo mà chưa dùng nay đã có tác dụng - Các mã lỗi PDFium dành riêng cho XFA
FPDF_ERR_XFALOAD/FPDF_ERR_XFALAYOUTbây giờ được gắn kết và đẩy lên quaLastPdfError, thay thế thông báo chung chung "Unknown error" cho các lỗi tải/dàn trang XFA
Đã thay đổi (Changed)
FFI_DoURIActionWithKeyboardModifierbây giờ hỏiOnXfaUriActiontrước khi shell-executing một URI từ một trường XFA, cho host quyền phủ quyết (bảo mật: trước đây một trường XFA độc hại có thể phóng các URL tùy ý một cách vô điều kiện). Handler chưa gán vẫn giữ mặc địnhShellExecuteWnhư trướcDecodeFormFieldTypebây giờ điều hướng các kiểu trường XFA quaIsXfaFormFieldthay vì một case 8 nhánh tường minh, giữ cho enum khớp vớiFPDF_FORMFIELD_XFA_*bằng offset theo ordinal
Đã sửa (Fixed)
ValidatePdfAbây giờ báo cáo các tài liệu tuyên bố PDF/A-1 mà dùng cross-reference stream hoặc object stream của PDF 1.5 với issue mớipvaiPdfA1Pdf15Structure, trong khi vẫn cho phép object stream với PDF/A-2 và PDF/A-3
Version 2.13.0
Đã thêm (Added)
- Hỗ trợ runtime XFA (XML Forms Architecture) đầy đủ:
TPdf.InitializeFormFillgiờ đây kết nối đủ cả 14 callback version-2 củaFPDF_FORMFILLINFO(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) và gắn kèm mộtIPDF_JsPlatformđể mộtpdfium.dllbật XFA có thể render và script các form XFA động - Unit mới
Lib\FPdfXfa.paskhai báo các hằng số XFA (FXFA_PAGEVIEWEVENT_*,FXFA_MENU_*,FXFA_SAVEAS_*,FPDF_FORMFIELD_XFA_*) cùng các kiểuTXfaPacket/TXfaSaveFormattrước đây chỉ được nhắc đến trong comment - Bộ đọc packet XFA tĩnh trên
TPdf:GetXfaPacketCount/GetXfaPacketName/GetXfaPacketContent/GetXfaPacketByNamecùngGetXfaTemplate/GetXfaDatasets/GetXfaConfigtrích xuất các packet XFAtemplate,datasetsvàconfigdưới dạng XML thô mà không cần runtime bật XFA — hữu ích cho kiểm toán tuân thủ và di chuyển dữ liệu - Các probe khả năng:
XfaFeaturesAvailabletoàn cục, cùngTPdf.XfaRuntimeAvailabletheo từng tài liệu (FPDF_LoadXFAcó thực sự thành công hay không) vàTPdf.XfaStaticReadable(các export của bộ đọc packet có resolve được hay không) TPdfFormFieldTypeđược mở rộng thêmfiXfa,fiXfaCheckBox,fiXfaComboBox,fiXfaImageField,fiXfaListBox,fiXfaPushButton,fiXfaSignature,fiXfaTextField, vớiDecodeFormFieldTypeánh xạ các giá trịFPDF_FORMFIELD_XFA_*mới- Các event host JavaScript trên
TPdf:OnJavaScriptAlert,OnJavaScriptResponse,OnXfaGotoUrlvàOnXfaRuntimeMissingcho phép host tùy biến hộp thoại JS và điều hướng XFA, hoặc phản ứng khi một tài liệu XFA không chạy được engine - Sample Delphi mới
XfaLabminh họa việc phát hiện XFA, trích xuất packet, probe khả năng và đường fallback khi thiếu runtime
Đã thay đổi (Changed)
TPdf.LoadDocumentgiờ đây quét sơ bộ input để tìm marker XFA (/XFAtrong dictionary AcroForm, hoặc catalog/NeedsRendering) và khi tìm thấy sẽ tự chọnpdfium.v8.dllbằng cách đặtEnableV8Engine := Truetrước khi thư viện singleton được load lần đầu; một khipdfium.dllthường đã được load thì tiến trình không thể đổi sang DLL khác nữa, nênOnXfaRuntimeMissingsẽ báo hiệu trường hợp đóTPdf.GetPageCountgiờ đây phản ánh số trang mà engine XFA báo về quaFFI_PageEventsau khi repagination động, thay vì chỉ dựa vào cây trang PDF tĩnh- Khi một tài liệu XFA được mở nhưng runtime không khả dụng,
InitializeFormFillgiờ đây ghimversion=1vàxfa_disabled=1thay vì yêu cầu version 2 với các callback chưa được gán, vốn trước đây có nguy cơ dereference một con trỏ callback sai
Version 2.12.2
膼茫 s峄璦 (Fixed)
ValidatePdfACompliancehi峄噉 b谩o c谩o c谩c kh么ng gian t锚n XMP t霉y ch峄塶h 膽瓢峄 s峄?d峄g m脿 kh么ng c贸pdfaExtension:schemastrong khi v岷玭 ch岷 nh岷璶 si锚u d峄?li峄噓pdfaidti锚u chu岷﹏ kh么ng c贸 khai b谩o ph岷 m峄?r峄檔g- X谩c th峄眂 t峄噋 nh煤ng PDF/A-3 hi峄噉 y锚u c岷 c岷?hai m峄 c岷 cao nh岷
/Fv脿/UFtr锚n c谩c t峄?膽i峄僴 filespec v脿 b峄?qua c谩c kh贸a d貌ng/EFl峄搉g nhau khi ki峄僲 tra c谩c t锚n 膽贸
Version 2.12.1
Đã sửa (Fixed)
ValidatePdfACompliancegiờ đây decode các token tên PDF đã escape trước khi đối chiếu với JavaScript, LZWDecode, Type1 và các tên bị cấm tương tự, nhờ đó những tên bị obfuscate nhưng cùng ý nghĩa vẫn được báo cáo đúng- Kiểm tra inline-image của PDF/A giờ đây từ chối các giá trị
/Filtervà/Fdùng/LZWDecode, dạng viết tắt/LZW, hoặc/Crypt, kể cả khi chúng nằm trong mảng hoặc ở dạng tên đã escape - Kiểm tra PDF/A giờ đây báo cáo các metadata stream dùng stream filter bị cấm, các profile ICC của OutputIntent thiếu hoặc lệch số thành phần
/N, và các embedded file spec của PDF/A-3 thiếu hoặc có/AFRelationshipkhông hợp lệ
Version 2.12.0
Đã thêm (Added)
- Request HTTP tới TSA giờ đây đặt timeout 30 s tường minh cho từng pha (resolve/connect/send/receive) thông qua
WinHttpSetTimeouts, nên một timestamp authority chậm hoặc không thể kết nối sẽ không thể treo thread ký vô hạn, thay vì phải dựa vào default ngầm của WinHttp - Sinh nonce theo từng request cho các timestamp request PAdES B-T / B-LTA khi caller bỏ qua
TPadesSignOptions.Nonce: một SHA-256 fold của bộ đếm monotonic + đồng hồ hệ thống +GetTickCount64+ process id thay thế fallback cố định$100000000trước đây, nhờ đó hai request phát ra trong cùng một mili giây không còn dùng chung nonce chống replay nữa PdfInflategiờ đây giới hạn đầu ra đã giải nén ở mức 256 MiB để chặn một stream nén zlib làm cạn bộ nhớ trên input độc hại hoặc hỏng (một “zlib bomb”); mức giới hạn này khá thoải mái với bất kỳ stream PDF thực tế nào
Đã thay đổi (Changed)
- Pha trộn overlay của
TPdfView(search highlight, chọn text, đọc từ, chọn spread) không còn dùngGetPixel/SetPixelVtrên từng pixel nữa; hình chữ nhật nay được trộn qua mộtTBitmapoff-screen 32-bpp vớiScanLinetrong đúng một lượt, loại bỏ hàng nghìn lần gọi xuống GDI kernel mỗi lần vẽ và giúp vùng chọn lớn mượt mà FPdfAsn1.TDerReader.ReadIntegergiờ đây từ chối các trường INTEGER dài hơn 8 byte (và các số âm 8 byte mà bit dấu đòi hỏishl >= 64), trả về 0 thay vì tính ra một giá trị sai do hành vi shift không xác định trên input ASN.1 của CMS/PAdESParseTimeStampRespkhông còn trả ngược nonce của request vềTPadesTimestamp.Nonce; cho đến khi bộ đi qua TSTInfo xác minh nonce trả về được bổ sung, trường này sẽ giữ nguyên 0 để báo hiệu “chưa xác minh” thay vì đánh lừa caller rằng timestamp response còn mới
Đã sửa (Fixed)
PointsToPixelstrả input về nguyên trạng ở mọi DPI: số chia làPointsPerInch(hằng số 72) thay vì literal 72, khiến công thức thu gọn thànhResult := Points. Bất kỳ caller bên ngoài nào dùng helper này để quy đổi points→device-pixel nay đều nhận được kết quả đúngPoints × PixelsPerInch / 72PdfMaxObjNumđếm thiếu trên các tài liệu dùng object stream (ObjStm của PDF 1.5+): các object bị nén bên trong một/ObjStmkhông mang markerN 0 obj, nên quá trình quét raw-byte bỏ sót chúng, và các injector cấp phátMaxObj+1cho object mới có thể va chạm với các thành phần ObjStm ẩn và âm thầm làm hỏng file. Quá trình quét nay mở rộng object stream trước để mọi số object đều hiện hữuInjectPdfAMarkerskhông còn bịa tuyên bố tuân thủ PDF/A trên tài liệu đã mã hóa: PDF/A (ISO 19005-1 §7.1) cấm mã hóa, và trước đây injector vẫn copy nguyên nguồn kèm các marker dù ngay bước validation kế tiếp sẽ từ chối. KhiHasEncryptđược đặt, nguồn nay được đưa qua nguyên vẹn không đổi. LuồngTPdf.SaveAsPdfAthông thường đã gỡ mã hóa (saRemoveSecurity) trước khi inject, nên thay đổi này chỉ ảnh hưởng đến các caller gọi trực tiếpPdfReadStreamBytesgiờ đây từ chối/Lengthlớn hơn cả file trước khi cấp phát buffer kết quả, bịt một đường cấp phát sớm khi indirect length bị hỏng hoặc độc hại
Version 2.11.0
Đã thêm (Added)
- Record
FPDF_FILEHANDLERcủa PDFium nay khai báo sáu callback của nó (Release,GetSize,ReadBlock,WriteBlock,Flush,Truncate) thành field thật thay vì comment, khớp bố cục header C. Các callback truyền file FFI của XFA (FFI_OpenFile/FFI_EmailTo/FFI_UploadTo/FFI_DownloadFromURL) trả về hoặc tiêu thụPFPDF_FILEHANDLERvẫn được bỏ ngỏ chưa hiện thực trong lớp form-fill Pascal, nhưng kiểu dữ liệu nay đã đúng về cấu trúc cho bất kỳ đường submit/upload XFA nào trong tương lai - Việc load và unload thư viện PDFium (
LoadLibrary/UnloadLibrary) nay được tuần tự hóa bằng một critical section toàn tiến trình, để hai worker threadTPdfFuture<T>(hoặc một worker đua với main thread) không thể cùng nhìn thấyPDFiumLibrary=0rồi bind hai lần, hay giải phóng DLL khi thread khác đang dở bind - Một section
initialization/finalizationnay gọiUnloadLibrarykhi unit được dỡ, bảo đảmFPDF_DestroyLibrarychạy hết (join worker thread, giải phóng V8 isolate, dọn font/cache) thay vì dựa vào OS thu hồi DLL
Đã thay đổi (Changed)
TPdf.SetActivenay nuốt mọi exception trong lúc load (trước đây chỉEPdfError), nên một lỗi stream hay access violation trong lúc dựng form/page sẽ đểActive=Falsethay vì component load dở với trạng thái không xác định- Thống nhất character encoding cho tham số khóa metadata của PDFium:
TPdf.GetMetaTextnay dùng cùng kiểu tách FPCAnsiString/ DelphiUTF8EncodenhưGetViewerPreferencevà các đường load, thay vì cast thẳngAnsiString(Tag) - Đã khử trùng lặp các helper
BytesToAnsi,AnsiToBytes,WriteBytesvàWriteStr:FPdfCompressnay import chúng từFPdfPdfCommon(các aliasWriteBytesToStream/WriteAnsiToStreamđược cho nghỉ) và overloadBytesToAnsiba tham số thừa trongFPdfPdfabị xóa bỏ.FPdfAsn1giữ bản copy cục bộ một cách chủ đích để tầng mật mã không phụ thuộc vào unit tầng conformance
Đã sửa (Fixed)
- Rò rỉ tài nguyên trong
TPdf.LoadDocument(file, memory,TBytes,TMemoryStream, custom stream) vàTPdf.CreateDocument: nếuInitializeFormFillhoặcReloadPageraise sau khiFPDF_LoadDocument/FPDF_CreateNewDocumentthành công, handle nativeFPDF_DOCUMENTbị rò rỉ vìFActivekhi đó vẫn còn False. Mỗi đường nay bọc phần dựng sau load trongtry/exceptvà đóng tài liệu khi thất bại, để component về trạng thái inactive sạch sẽ - Chẩn đoán load DLL PDFium thân thiện hơn:
CheckLoadLibraryphát hiệnERROR_BAD_EXE_FORMAT(193) và báo lệch kiến trúc 32/64-bit, chỉ thẳng tới buildDLLs/Win32hoặcDLLs/Win64tương ứng, thay vì chỉ chuyển tiếp lỗi chung chung của OS.CheckGetProcAddressnay nói rõpdfium.dllđang triển khai cũ hơn binding khi thiếu một export bắt buộc, thay vì dòng chữ trơ trọi "procedure not found" của OS
Version 2.10.1
Đã sửa (Fixed)
- Chuẩn hóa PAdES SignerInfo sid: nhận dạng người ký hiện sử dụng dạng RFC 5652 §5.3
issuerAndSerialNumber(issuer Name + serialNumber, cả hai được trích xuất nguyên văn từ chứng chỉ người ký DER), thay thế chỗ giữ chỗsubjectKeyIdentifier+ SHA-256 toàn chứng chỉ phi chuẩn trước đây mà Adobe Acrobat và các trình xác thực tuân thủ khác từ chối. Một trình duyệt TbsCertificate DER mới (ExtractIssuerAndSerial) đọc issuer SEQUENCE và serial INTEGER dưới dạng byte TLV thô — số serial thường vượt quá phạm viInt64, do đó TLV thô là bắt buộc. DạngsubjectKeyIdentifiervẫn chỉ còn là phương án dự phòng khi phân tích cú pháp chứng chỉ DER thất bại
Đã thay đổi (Changed)
TCmsSignerId.SerialNumber: Int64được thay thế bằngSerialDer: TBytes(TLV serialNumber thô). Trình dựng CMS nhúng TLV được cắt nguyên văn vàoIssuerAndSerialNumber, tránh trànInt64trên số serial CA dài 20 byte (giới hạn trên RFC 5280 §4.1.2.2)
Version 2.10.0
Đã thêm (Added)
- Xác thực dài hạn PAdES B-LT: khi
TPadesSignOptions.Level >= plB_LT,SignPadesBytesnối thêm một bản cập nhật tăng dần mang theo một từ điển/DSSvới chứng chỉ người ký và toàn bộ chuỗi trung gian (gốc tự ký bị loại trừ theo RFC 5652 §10.2.3), cùng với dấu hiệu/Extensions /ESICLevel 1 (EN 319 142-1 §5.4.2) - Dấu thời gian lưu trữ PAdES B-LTA: khi
Level >= plB_LTAvàTsaUrlđược đặt, một từ điển chữ ký Document Time-stamp (/SubFilter /ETSI.RFC3161) được nối thêm mà/ByteRangecủa nó bao phủ toàn bộ tệp; dấu hiệu ESIC được nâng lên Level 2. Điều này hoàn thiện bốn cấp độ cơ sở PAdES (B-B, B-T, B-LT, B-LTA) - Thu thập chuỗi chứng chỉ:
ResolveWinSignerhiện gọiCertGetCertificateChainvà điềnTPadesResolvedSigner.ChainCertDervới các chứng chỉ CA trung gian, do đó/DSS /Certscủa B-LT mang theo mọi chứng chỉ cần thiết để xác thực chữ ký mà không cần tra cứu bên ngoài.CertFreeCertificateContexthiện được liên kết, đóng lỗ hổng rò rỉ một ngữ cảnh-mỗi-lần-ký đã được ghi nhận trong v2.8.0 - Quy trình tích hợp PDF/A:
TPdf.SignPadesWithPdfAchuyển đổi tài liệu sang PDF/A trước (cấp độ cao nhất mà thư viện phát hành hiện nay) rồi áp dụng chữ ký PAdES được yêu cầu — mẫu container lưu trữ dài hạn mà EN 319 142-1 Phụ lục A.7 khuyến nghị
Version 2.9.0
Đã thêm (Added)
- Dấu thời gian tin cậy PAdES B-T:
TPadesSignOptionsnhận thêm các trườngLevel,TsaUrlvàNonce. KhiLevel >= plB_TvàTsaUrlđược đặt,SignPadesBytestrích xuất giá trị chữ ký từ CMS đã dựng, yêu cầu một dấu thời gian RFC 3161 trên đó, và nhúng TimeStampToken trả về làm thuộc tính không dấu SignerInfosignature-time-stamp— bước thời gian tin cậy của B-T (EN 319 142-1 §6.3 req o) FPdfTsa: trình khách RFC 3161 đa nền tảng —BuildTimeStampReq(phiên bản 1, messageImprint SHA-256 trên giá trị chữ ký, nonce, certReq=true),ParseTimeStampResp(chấp nhận PKIStatus 0/1, từ chối 2+, trích xuất TimeStampToken ContentInfo nguyên văn), vàRequestTimestamp(dựng+POST+phân tích một lần).PadesTsaAvailableđiều khiển tính năng trên các nền tảng không có backend HTTPFPdfTsaWin: backend WinHttp của Windows, liên kết động từ winhttp.dll (không thêm phụ thuộc thời điểm biên dịch mới nào; HTTPS được thương lượng bởi kho chứng chỉ của Windows). Phản chiếu mẫu liên kết động củaFPdfCryptoWinFPdfCms:ExtractSignatureValueduyệt một CMS đã dựng để khôi phục các octet chữ ký thô (đầu vào băm TSA), vàAddSignatureTimestampToCmsdựng lại ContentInfo với mộtunsignedAttrs [1](0xA1) mới mang theo thuộc tính dấu thời gian. Trình xác thực giai đoạn-1 nhận diện kết quả là một chữ ký B-T
Version 2.8.0
Đã thêm (Added)
- Bộ Signing stack PAdES B-B: bốn khối xây dựng pure-Pascal/đa nền tảng mới (
FPdfSha256,FPdfAsn1,FPdfCms,FPdfCrypto) cộng với một backend CNG của Windows (FPdfCryptoWin) cho phépTPdf.SignPades/SignPadesToStreamtạo ra một chữ ký PAdES B-B từ đầu đến cuối. Chứng chỉ người ký được phân giải bằng dấu vân SHA-1 từ kho Current User “MY”; RSA-PSS (được khuyến nghị), RSA PKCS#1 v1.5 và ECDSA đều được hỗ trợ thông quaNCryptSignHash FPdfSha256: SHA-256 FIPS 180-4 tự chứa (Init/Update/Final + các helper một lần). FPC 3.2.2 không đi kèm đơn vị SHA-2 nào, do đó thư viện tự sở hữu một đơn vị để giữ mọi đường dẫn mã CMS trên một kiểuTSHA256Digestduy nhất mà không rẽ nhánh RTLFPdfAsn1: bộ mã hóa DER (TDerWriter) và bộ đọc (TDerReader) bao phủ SEQUENCE/SET/OID/INTEGER/OCTET STRING/UTCTime/GeneralizedTime/context-specific tags, với mã hóa definite-length và xử lý IMPLICIT-tag mà CMS yêu cầuFPdfCms: trình dựng CAdES SignedData (BuildSignedData) phát ra các thuộc tính có dấu content-type, message-digest và signing-certificate-v2 mà cơ sở PAdES bắt buộc, với signing-time và commitment-type-indication tùy chọn. Thông báo băm signedAttrs được tính trên dạng gắn thẻ SET (0x31) và phát lại với thẻ IMPLICIT [0] (0xA0) theo RFC 5652 §5.4FPdfCrypto+FPdfCryptoWin: trừu tượng backend mật mã vớiPadesCryptoAvailable/ResolvePadesSigner, và triển khai Windows liên kết crypt32.dll / ncrypt.dll động (không có phụ thuộc DLL thời điểm biên dịch mới). Các chữ ký ECDSA được mã hóa lại từ dạng IEEE P1363 r¦s của Windows sang dạng DERECDSA-Sig-Valuemà CMS yêu cầuSignPadesBytes: tiêm chữ ký cấp byte — dành trước một khe hex/Contentsđộ rộng cố định, tính toán/ByteRangebao phủ, thông báo tài liệu, dựng và nhúng CMS, và nối thêm bản cập nhật tăng dần. Trình xác thực (v2.7.0) nhận diện đầu ra là một chữ ký PAdES B-B
Version 2.7.0
Đã thêm (Added)
- Trình xác thực cấu trúc PAdES (ETSI EN 319 142-1 V1.2.1): đơn vị
FPdfPadesmới và phương thứcTPdf.ValidatePadeskiểm tra các từ điển giá trị chữ ký có thể tiếp cận từ/ByteRange, duyệtSignedDataCMS bên trong/Contentsđủ xa để xác nhận hình thái CAdES tách rời, và phát hiện bốn cấp độ cơ sở (B-B, B-T, B-LT, B-LTA) cùng các từ điển Document Time-stamp (/SubFilter /ETSI.RFC3161) - Bộ vấn đề cấp điều khoản PAdES: 26 enum
ppei*bao phủ tính chấp nhận được của/SubFilter(adbe.pkcs7.sha1vàadbe.x509.rsa_sha1được đánh dấu là bị cấm), mức bao phủ tệp/ByteRange, lệnh cấm/Cert, hình thái CMSSignedData(người ký đơn lẻ, eContent tách rời, phạm vi phiên bản), các thuộc tính có dấu bắt buộc (content-type,message-digest,signing-certificate/v2), các băm bị cấm (MD5, SHA-1), loại trừ tương hỗ/Reasonvscommitment-type-indication(req d), yêu cầu thời gian tin cậy của B-T,/DSS+/Certs+ dấu hiệu ESIC Level 1 của B-LT, và dấu thời gian Document Time-stamp + dấu hiệu ESIC Level 2 của B-LTA - Trình chèn DSS:
TPdf.SaveAsPadesDss/SaveAsPadesDssToStreamnối thêm một bản cập nhật tăng dần mang theo một từ điển/DSS(với các mảng luồng/Certs,/OCSPs,/CRLs) và dấu hiệu/Extensions /ESIC(Level 1 hoặc 2) lên một bản sao của tài liệu, bảo toàn các byte gốc — bước nhúng vật liệu xác thực B-LT/B-LTA (điều khoản 5.4.2) - Giai đoạn đa nền tảng, không phụ thuộc: trình xác thực và trình chèn là pure-Pascal và hoạt động trên mọi IDE được hỗ trợ (Delphi, Lazarus, FPC, C++Builder); không yêu cầu backend mật mã cho bản phát hành này, và không giới thiệu phụ thuộc DLL mới nào
Version 2.6.0
Đã thay đổi (Changed)
- Khử trùng lặp liên chuẩn: bảy hàm helper trùng lặp nữa (PdfEnclosingObjNum, PdfDictRefNum, PdfExpandObjectStreams, PdfTextStr, ExtractLiteralString, ExtractXmpAttr) đã bị loại bỏ khỏi các đơn vị chuẩn riêng lẻ và hợp nhất vào
FPdfPdfCommon, giảm khoảng ~300 dòng gánh nặng bảo trì sao chép-dán - Chất lượng PreflightReport: các vấn đề lớp nội dung PDF/X và PDF/E trước đây rơi vào danh mục “missing marker” chung hiện nay mang các danh mục Content/Metadata/Security chính xác và các khuyến nghị theo điều khoản cụ thể (~15 enum trên cả hai tiêu chuẩn)
- Bao phủ kiểm thử PDF/E và PDF/R: sáu enum có độ bao phủ bằng không nữa nhận được các kiểm thử tích cực (
pveiLzwForbidden,pveiJavaScriptForbidden,pveiFormFieldsForbidden,pveiEmbeddedFilesForbidden,pvriBadHeader,pvriProhibitedInfoEntry) - Sửa lỗi dựng Lazarus:
Tests.PdfVT(một đơn vị DUnitX chỉ dành cho Delphi được thêm vào trong v2.5.x) hiện được loại trừ khỏi dự án Lazarus để khôi phục khả năng biên dịch
Version 2.5.3
Đã thêm (Added)
- Đầy đủ OutputIntent (PDF/X-4 §6.2.4):
pvviOutputIntentSchemegắn cờ một OutputIntent mà/Scủa nó không phải là/GTS_PDFX;pvviOutputIntentMissingIdentifiergắn cờ một/OutputConditionIdentifierbị thiếu - Miễn trừ Reference XObject của PDF/VT-2 (§6.2.2):
pvviReferenceXObjectForbiddenkhông còn kích hoạt đối với một tệpPDF/VT-2, tệp này có thể hợp pháp sử dụng Reference XObjects trên một cơ sở X-5g/5pg - Kiểm tra ký tự ranh giới MIME (RFC 2046 §5.1.1):
vtmviBoundaryInvalidChargắn cờ một ranh giới mà các ký tự nằm ngoài tập hợp bchars hoặc có độ dài vượt quá 70
Đã sửa (Fixed)
InjectPdfVTMarkershiện ghi Info/CreationDatevà/ModDatetừ các tùy chọn lưu, do đó tệp được tạo ra khứ hồiValidatePdfVTCompliancemà không cópvviInfoModDateMismatchgiả (trước đây injector viết lại các ngày XMP nhưng để lại các ngày từ điển Info cũ)
Version 2.5.2
Đã thêm (Added)
- Tính nhất quán Info
/ModDate(§6.3 NOTE 2, cơ sở PDF/X-4):pvviInfoModDateMismatchgắn cờ một/ModDatecủa từ điển Info mà, sau khi chuẩn hóa ngày-PDF sang ngày-XMP, không bằngxmp:ModifyDate - Tuân thủ khối nội tuyến PDF/VT-2s (Phụ lục A.2): trình xác thực MIME hiện chạy
ValidatePdfVTCompliancetrên mỗi phầnapplication/pdfnội tuyến và gắn cờ một thân không phải PDF/VT quavtmviInlinePdfNotPdfVT
Version 2.5.1
Đã thêm (Added)
- Kiểm tra chia khối DParts (ISO 16612-2 §6.5 Table 4):
pvviDPartsBadChunkinggắn cờ một mảng/DPartsmà các mảng con không cuối của nó không có chính xác 8192 phần tử hoặc mảng con cuối nằm ngoài 1..8192 - Tính nhất quán RecordLevel liên luồng (Phụ lục A.2): trình xác thực MIME PDF/VT-2s hiện trích xuất
/RecordLevelcủa mỗi PDF nội tuyến và gắn cờ sự không đồng nhất quavtmviRecordLevelMismatch, bổ sung cho kiểm tra NodeNameList hiện có - Gợi ý đối tượng đồ họa định kỳ (§6.7):
pvviGtsScopeInvalidValuegắn cờ một/GTS_Scopenằm ngoài {SingleUse, Record, File, Stream, Global, Unknown};pvviGtsScopeRecordWithoutRecordLevelgắn cờ/Recordthiếu/RecordLevel;pvviGtsXidNotUuidgắn cờ một/GTS_XIDkhông phải là uuid: URI RFC 4122;pvviGtsEnvMissinggắn cờ một/GTS_Envbị thiếu khi/GTS_Scopelà Stream hoặc Global (§6.7.4) - Phát hiện tham chiếu tiến MIME (Phụ lục A.2):
vtmviForwardReferencegắn cờ một PDF nội tuyến trích dẫn một tên tệp (qua/EF /F) không được giới thiệu bởi một phần đính kèm sớm hơn trong luồng
Đã sửa (Fixed)
ExtractNodeNameListFromPdfvàExtractRecordLevelFromPdftrongFPdfPdfvtMimeđã giải quyết một lỗi off-by-one lặp lại trong đó offset 1-based được trả về bởiAnsiFindKeyđược xử lý như một offset byte tuyệt đối vào PDF đã mở rộng
Version 2.5.0
Đã thêm (Added)
- Siêu dữ liệu Document Part của PDF/VT (DPM, ISO 16612-2 §6.6):
TPdfVTSaveOptionsnhận thêmDpmEntriesvàDpmTargetđể một trình ghi có thể đính kèm một từ điển/DPMvào nút DPart đã tổng hợp, với kiểm tra tên-khóa theo quy tắc tiền tố hạng hai Phụ lục E và các quy tắc §6.6 NMTOKEN / tính duy nhất / hình tháiGTS_Managedở phía trình xác thực - Trao đổi luồng PDF/VT-2s (Phụ lục A): đơn vị
FPdfPdfvtMimemới cung cấpBuildPdfVT2sStreamvàValidatePdfVT2sStreamcho phong bì MIMEmultipart/mixedmang theo các khối PDF/VT nội tuyến cộng với các tiểu chuẩn ICC đính kèm, với quy tắc thứ tự tiêu đềX-PDFVT-Stream-version: 1và kiểm tra tính nhất quánNodeNameListliên luồng TPdf.ValidatePdfVThiện thực hiện đếm JavaScript-action chính tắc quaFPDFDoc_GetJavaScriptActionCount, bổ sung cho quét tên/JavaScriptcấp byte
Đã sửa (Fixed)
- Tính đúng đắn
Trappedcủa PDF/VT trên cơ sở PDF/X-4: giá trị enumptvUnknownbị loại bỏ (PDF/X-4 cấm/Unknown),ptvUnspecifiedđược chuẩn hóa thành/Falsetại thời điểm ghi (một/Trappedbị thiếu cũng bị cấm), và một vấn đềpvviTrappedInvalidmới gắn cờ một giá trị vắng mặt hoặcUnknown ValidatePdfVTCompliancehiện mở rộng các luồng đối tượng (PdfExpandObjectStreams) trước khi quét, do đó một từ điển catalog, OutputIntent hoặc Metadata lưu trữ bên trong một ObjStm nén (PDF 1.5+, điển hình của các trình tạo PDF/X-4) có thể tiếp cận được bởi các tra cứu cấp byte
Đã thay đổi (Changed)
- PDF/VT-1 hiện kế thừa toàn bộ các lệnh cấm nội dung PDF/X-4:
pvviAcroFormForbidden(/AcroFormhoặc/XFA),pvviAdditionalActionsForbidden(catalog/AA),pvviMissingTrimBoxvàpvviReferenceXObjectForbidden(Reference XObject, chỉ X-5g/5pg) - Khử trùng lặp liên chuẩn:
BuildDictObj,IccComponentCount, tiểu chuẩn sRGB tích hợp (GetSrgbIccProfile),PdfTextStr,PdfEnclosingObjNum,PdfDictRefNumvàPdfExpandObjectStreamsđược nâng cấp từ các bản sao cục bộ ba lần trongFPdfPdfa/FPdfPdfx/FPdfPdfvtlên một nơi chính tắc duy nhất trongFPdfPdfCommon; literal ICC 3144-byte nay chỉ tồn tại chính xác một lần trong cơ sở mã
Version 2.4.0
Đã sửa (Fixed)
InjectPdfUaMarkerskhông còn loại bỏ tham chiếu/Infocủa trailer trên cơ sở dòng tham chiếu chéo (cross-reference-stream): bản saoSourceTrailerInfoRefcục bộ (thiếu phương án dự phòng dòng xref) đã được thay thế bằngPdfSourceTrailerInfoRefdùng chung (được chuyển từ bản sao PDF/A vốn đã có phương án dự phòng từ phiên bản v2.0.0)- Hàm
PdfReadStreamBytesdùng chung giờ đây xử lý các tham chiếu/Length N G Rgián tiếp (được chuyển từ bản sao PDF/A cục bộ), do đó các trình kiểm tra PDF/VT, PDF/R và PDF/E không còn đọc sai hoặc bỏ qua các luồng siêu dữ liệu XMP được tạo bởi các công cụ sử dụng Length gián tiếp (Acrobat, Ghostscript)
Đã thay đổi (Changed)
- Khử trùng lặp liên chuẩn: các bản sao
PdfReadTrailercục bộ trongFPdfPdfavàFPdfPdfx, các bản saoSourceTrailerInfoRefcục bộ trongFPdfPdfavàFPdfPdfua, và bản saoPdfReadStreamBytescục bộ trongFPdfPdfađều đã bị xóa — phiên bảnFPdfPdfCommondùng chung giờ đây được áp dụng ở mọi nơi, giúp loại bỏ khoảng ~330 dòng mã trùng lặp và loại bỏ gánh nặng bảo trì khi phải giữ các bản sao đồng bộ - Giải quyết nợ kiểm thử PDF/X: bảy enum lớp nội dung trước đây có tỷ lệ bao phủ bằng không nay đã nhận được các kiểm thử tích cực (
pvxiLzwForbidden,pvxiJavaScriptForbidden,pvxiFormFieldsForbidden,pvxiAdditionalActions,pvxiEmbeddedFilesForbidden,pvxiMissingTrimBox,pvxiTrappedNotSet)
Version 2.3.0
Đã thay đổi (Changed)
- Tiếp tục giải quyết nợ kiểm thử PDF/A: thêm ba enum có tỷ lệ bao phủ bằng không nhận được các kiểm thử tích cực;
pvaiForbiddenRenderingIntent(§6.2.9) gắn cờ một tên rendering-intent không chuẩn trong dòng nội dung;pvaiJpeg2000Violation(§6.2.2) gắn cờ một hình ảnh JPXDecode có/NumComponentsnằm ngoài khoảng {1,3,4} tại Part 2;pvaiInlineImageLzwForbidden(§6.1.10) gắn cờ một hình ảnh nội tuyến sử dụng bộ lọc LZW tại Part 2
Version 2.2.0
Đã thay đổi (Changed)
- Các bài kiểm thử hồi quy luồng tham chiếu chéo (cross-reference-stream): bài kiểm thử
Validate_XrefStreamTrailer_DetectsConformancehiện tại giờ đây cũng xác minh rằng tham chiếu/Metadatacủa catalog được phân giải và XMPpdfaid:partđược đọc trên một nền tảng xref-stream (không chỉ/Root+/ID). Một bài kiểm thửInjectPdfA_XrefStreamBase_RoundTripsmới bảo vệ đường dẫn xref-stream của injector được thêm vào trong v2.0.0. Hai bài kiểm thử đa tiêu chuẩn (PdfE_XrefStreamBase_NotRejectedAsUnparsable,PdfR_XrefStreamBase_NotRejectedAsUnparsable) xác minh các trình xác thực PDF/E và PDF/R không còn từ chối các tệp PDF xref-stream do không thể phân tích cú pháp - Giải quyết nợ kiểm thử (test-debt) PDF/A: bài kiểm thử
Validate_MinimalPdf_FlagsRequiredMarkersxác nhận rằng một tài liệu PDF tối giản thuần túy sẽ kích hoạtpvaiMissingPdfAIdentifier,pvaiMissingOutputIntent,pvaiMissingIccProfile,pvaiMissingXmpMetadatavàpvaiMissingXmpDates— lấp đầy khoảng cách đối xứng với các trình xác thực PDF/E và PDF/X vốn đã có các bài kiểm thử tương đương. Thêm hai enum có độ bao phủ bằng không có thêm các bài kiểm thử khẳng định:pvaiUnembeddedFontvàpvaiSubsetMissingCidSet
Version 2.1.0
Đã sửa (Fixed)
- PDF/E vô tình bị bỏ sót trong bản sửa lỗi luồng tham chiếu chéo (cross-reference-stream) của v2.0.0: cả
InjectPdfEMarkersvàValidatePdfECompliancevẫn gọiPdfReadTrailermà không cóAcceptXrefStream, vì vậy injector PDF/E âm thầm thất bại trên đầu ra PDF 1.5+ (mặc định củaSaveAsCopytrong pdfium). Cả hai vị trí gọi hiện truyền vàoTrue - Cơ chế dự phòng luồng tham chiếu chéo (cross-reference-stream)
PdfReadTrailerdùng chung hiện mang theo trình bảo vệ/Type /XRefgiống như các bản sao cục bộ của PDF/A và PDF/X đã có, vì vậy một offsetstartxrefbị lỗi trỏ đến một từ điển không liên quan sẽ thất bại một cách rõ ràng thay vì bị phân tích cú pháp sai thành trailer - Bộ phân giải tham chiếu gián tiếp
/LangtrongValidatePdfUaCompliance(v2.0.0) không thể tiếp cận:PdfFindObjDictchỉ tìm thấy các từ điển<<, nhưng một đối tượng chuỗi/Langlà(...)hoặc<...>không có từ điển. Được thay thế bằng một quét thân đối tượng trực tiếp để định vị token chuỗi
Đã thay đổi (Changed)
- Bảy helper trùng lặp bóng chết (dead-shadow helper duplicates) (PdfStructureBytes, PdfHasName, PdfCountName, BuildStreamObj) vốn là các bản sao giống hệt nhau về byte của các phiên bản
FPdfPdfCommondùng chung đã bị loại bỏ khỏiFPdfPdfavàFPdfPdfua— các phiên bản dùng chung giờ đây áp dụng ở mọi nơi thông quauses
Version 2.0.0
Đã sửa (Fixed)
- Thất bại âm thầm đa tiêu chuẩn: helper
PdfReadTrailerdùng chung (được sử dụng bởi các trình chèn điểm đánh dấu và trình xác thực của PDF/UA, PDF/X, PDF/VT và PDF/R) giờ đây chấp nhận một tham sốAcceptXrefStreamvà chuyển dự phòng về từ điển đối tượng luồng tham chiếu chéo (cross-reference-stream) khi không có từ khóatrailer(PDF 1.5+). Trước đây, đầu raSaveAsCopycủa pdfium (sử dụng luồng tham chiếu chéo) đã khiến mọi trình chèn điểm đánh dấu âm thầm thất bại — các byte nguồn được sao chép nguyên vẹn và lệnh gọi vẫn trả về thành công. Trình xác thực PDF/R-1.0 (có cơ sở PDF 2.0 luôn là một luồng tham chiếu chéo) thực tế là một no-op. Triển khai hoàn thiện của trình xác thực PDF/A đã được chuyển sang helper dùng chung để mọi tiêu chuẩn đều được hưởng lợi - Việc quét từ điển trailer trong
InjectPdfUaMarkersvàInjectPdfAMarkershiện sử dụngPdfDictEndnhận biết độ sâu thay vì tìm kiếm>>đơn thuần, do đó một trailer chứa một từ điển lồng nhau (ví dụ:/Encrypt << ... >>) không còn bị ngắt sớm trước một mục/Infoở cuối
Đã thay đổi (Changed)
TPdf.ValidatePdfUahiện chặn lỗi cấp độ byte sơ sàipvuaiFontNotEmbeddedkhi lỗi mô hình đối tượng Pdfium chính xácpvuaiPdfiumFontNotEmbeddedđã kích hoạt, vì vậy báo cáo kiểm tra trước (preflight report) không còn mang hai dòng gần như trùng lặp “embed your fonts” cho cùng một lỗipvuaiLangInvalidFormat(§7.2) hiện phân giải một tham chiếu gián tiếp/Lang(N 0 R) thành đối tượng chuỗi của nó và xác minh nội dung, vì vậy một thẻ ngôn ngữ được tham chiếu gián tiếp không còn là một điểm mù
Version 1.99.0
Đã sửa (Fixed)
pvuaiLangInvalidFormat(§7.2) không còn bỏ qua cho các chuỗi/Langmã hóa hex: các cặp UTF-16BE (với BOMFE FF) và các chuỗi hex ASCII trần giờ đây được giải mã và kiểm tra cú pháp BCP 47 tương tự như các chuỗi(...)trực tiếp, do đó chuỗi/Langdạng hex bị lỗi sẽ bị phát hiện trong khi chuỗi hợp lệ (ví dụ: UTF-16BEen-US) không còn nguy cơ bị cảnh báo
Đã thay đổi (Changed)
pvuaiFontMissingToUnicode(§7.21.7) hiện miễn trừ cho/MacExpertEncodingcùng với/WinAnsiEncodingvà/MacRomanEncoding, khớp với bốn điều kiện miễn trừ mà điều khoản liệt kê
Version 1.98.0
Đã thêm (Added)
pvuaiNeedAppearancesTrue(§7.18.4) gắn cờ một AcroForm có cờ/NeedAppearanceslà true, khiến cho các diện mạo widget không được khóa một cách đáng tin cậy và công nghệ hỗ trợ không thể liên kết chúng với cây cấu trúc; được chuyển cổng từ trình xác thực PDF/A và được lọc theo sự tồn tại của/AcroFormđể thu hẹp phạm vi quét
Đã thay đổi (Changed)
- Hồi quy tập dữ liệu veraPDF: đã tích hợp cặp pass+fail của §7.20 Reference-XObject và các cặp pass+fail của §7.21.4.2 subset CharSet/CIDSet vào
Live_Corpus_ValidatePdfUaMatchesConformance; các mẫu pass của §7.21.7 ToUnicode-forbidden-value và §7.18.6.2 media-clip cũng được tích hợp làm trình bảo vệ tránh báo động giả (các mẫu fail của chúng sử dụng bố cục từ điển mà quét cấp độ byte không bắt được, vì vậy chỉ có phía pass được tích hợp) - Danh sách xác nhận đường dẫn pass của tập dữ liệu đã có thêm 15 trình bảo vệ tránh báo động giả mới để mọi kiểm tra cấu trúc và cấp độ byte
pvuai*đang hoạt động đều được thử nghiệm với các mẫu tuân thủ (trước đây chỉ có khoảng 30 trong số 60 lỗi đang hoạt động được bảo vệ); trình bảo vệpvuaiLangInvalidFormatđã bị cố ý bỏ qua vì trình kiểm tra cấp độ byte gắn cờ một cách thận trọng đối với các chuỗi/Langmã hóa hex mà nó không thể giải mã
Version 1.97.0
Đã sửa (Fixed)
- Tăng cường bảo mật cho
ValidatePdfUaStructureElements: việc duyệt chuỗi chaEnclosingTablehiện mang theo một bộ đếm bước (bị giới hạn bởi số lượng phần tử), do đó một chu trìnhParentIndexbị lỗi trên một mảng structure-element giả lập không còn có thể làm treo trình gọi; việc cấp phát mảng marked-content-ID củaValidatePdfUaPageContentTagginghiện được giới hạn ở một triệu mục, ngăn chặn cấp phát nhiều GB trên mộtMarkedContentIDbị lỗi hoặc độc hại
Đã thay đổi (Changed)
- Chú thích tài liệu enum
pvuaiOrderedListMissingListNumberinghiện mô tả chính xác những gì kiểm tra thực hiện: nó gắn cờ một phần tửLcó giá trịListNumberingnằm ngoài tập hợp Bảng 347 của ISO 32000-1 (một thuộc tính vắng mặt không bị gắn cờ); chú thích trước đó ngụ ý rằng nó cũng phát hiện các danh sách có thứ tự bị thiếu thuộc tính, điều mà việc triển khai thực tế không thực hiện - Hai mẫu fail của tập dữ liệu
7.21.3.3-t02WMode-mismatch hiện được tích hợp vàoLive_Corpus_ValidatePdfUaMatchesConformance— kể từ v1.95.0 luồng CMap được giải nén bằng FlateDecode, do đó việc so sánh giữa từ điển và nội dung hiện chạy trên một phía có thể đọc được; chú thích cũ “không được tích hợp” đã bị xóa
Version 1.96.0
Đã thêm (Added)
- Nhất quán chéo chuẩn:
TPdf.ValidatePdfUacó thêm hai check port từ validator PDF/A.pvuaiAnnotationFlagsViolation(§7.18.1) gắn cờ các annotation không thuộc diện miễn trừ mang flag Hidden / Invisible / NoView, vốn phá vỡ luồng đọc của công nghệ hỗ trợ.pvuaiActionTargetMissing(§7.18.5) gắn cờ các action GoToR / URI / SubmitForm thiếu key đích bắt buộc (/F+/D, /URI, /F), khiến link không thể dùng được với AT
Đã sửa (Fixed)
- Gộp cây cấu trúc chéo trang: vòng lặp tích lũy
AllElemstrongTPdf.ValidatePdfUanay tái định cơ sởParentIndexcủa từng phần tử từ mảng cục bộ của trang sang mảng đã gộp. Nếu không có điều này, các phần tử con của trang 2 vẫn giữ chỉ số cục bộ của trang, trỏ vào lát cắt của trang 1, âm thầm làm sai mọi check phụ thuộc ParentIndex (cấu trúc bảng/danh sách, số lượng con H theo §7.4.4, EnclosingTable) - Phân tích RoleMap:
PdfReadRoleMapPairskhông còn chấm dứt toàn bộ quá trình quét key/value khi một giá trị là tham chiếu gián tiếp (N 0 R) hoặc một mảng ([...]) — cả hai đều là dạng RoleMap hợp lệ theo ISO 32000-1 14.8.5.1. Nó nay chỉ bỏ qua đúng entry đó (Continue) thay vìBreak, loại bỏ các báo nhiễupvuaiRoleMapUnresolvedvới những kiểu được map sau một entry dạng indirect/array
Đã thay đổi (Changed)
FPdfPreflightReport: 18 giá trịTPdfUaValidationIssueđang hoạt động trước đây rơi vào nhóm và khuyến nghị chung chung “missing marker” nay mang các nhóm chính xác (Structure / Content / Metadata / Security) cùng khuyến nghị riêng theo từng điều khoản. Đồng thời đã sửa lỗi chính tảpuaNone / pua1→pucNone / puc1trongPDFSpecComplianceMatrix.md
Version 1.95.0
Đã thay đổi (Changed)
- Lượt rà soát tính hợp lý và hiệu quả của
TPdf.ValidatePdfUa: kiểm trapvuaiCMapWModeMismatchtheo §7.21.3.3 and kiểm trapvuaiToUnicodeForbiddenValuetheo §7.21.7 giờ đây giải nén các luồng CMap / ToUnicode được nén bằngFlateDecodetrước khi quét (trước đây chỉ đánh giá các luồng không nén, một lỗi bỏ sót đã biết); các helper dùng chungPdfInflate/PdfReadAndDecodeStreamđã được chuyển từFPdfPdfa/FPdfPdfxlênFPdfPdfCommonđể mọi đơn vị tuân thủ chia sẻ cùng một bản sao
Đã thêm (Added)
pvuaiSubsetCharSetEmpty(§7.21.4.2) gắn cờ mộtFontDescriptortập con Type 1 mang khóa/CharSetcó giá trị chuỗi trống —pvuaiSubsetMissingCharSethiện tại chỉ bắt được thuộc tính bị thiếu; một/CIDSettrống sẽ không bị gắn cờ, vì một font không có CID có thể mang một bitmap trống một cách hợp lệ
Version 1.94.0
Đã thêm (Added)
- Vòng audit thứ hai cho
TPdf.ValidatePdfUađã bịt sáu khoảng trống ISO 14289-1 lộ ra từ một lượt rà soát từng điều khoản và một lượt quét lại các native API của Pdfium đã được bọc nhưng đường PDF/UA chưa dùng tới.pvuaiHeadingFormatInvalid(§7.4.3) gắn cờ các heading tag do người dùng định nghĩa bắt đầu bằng H nhưng lại chứa dấu phân cách, khoảng trắng hay chữ số La Mã thay vì thuần chữ số Ả Rập.pvuaiMissingDocumentOutline(§7.17, should) gắn cờ tài liệu nhiều trang không có bookmark outline nào (tài liệu một trang được miễn).pvuaiStructElementLangInvalid(§7.2) gắn cờ giá trị/Langcủa phần tử cấu trúc không phải tag BCP 47 hợp lệ.pvuaiWidgetMissingPrintField(§7.14 / §7.18.4) gắn cờ phần tử cấu trúc Widget thiếu attribute owner PrintField.pvuaiLinkNotInStructureTree(§7.18.5) gắn cờ tài liệu mà các annotation/Subtype /Linkkhông được phơi bày thành phần tử cấu trúc Link.pvuaiPdfiumAnnotationMissingContentsvàpvuaiPdfiumLinkMissingContents(§7.18.1 / §7.18.5) bổ sung một lượt quét annotation theo object model của Pdfium với độ chính xác cao, miễn trừ các annotation ẩn, nằm ngoài crop box, Popup và Widget — triệt tiêu các báo nhiễu của heuristic mức byte, vốn không đọc được flag/Fhay/Rect
Version 1.93.0
Đã thêm (Added)
TPdf.ValidatePdfUanay chồng thêm một lượt quét theo object model của Pdfium bên trên inspector mức byte, đối xứng với kiến trúc vòng 7 của PDF/A: nó đi qua các text object của từng trang quaFPDFTextObj_GetFont→FPDFFont_GetIsEmbedded(pvuaiPdfiumFontNotEmbedded, §7.21.4) và quét từng ký tự quaFPDFText_HasUnicodeMapError(pvuaiPdfiumUnicodeMapError, §7.21.7) vàFPDFText_GetUnicode(pvuaiPdfiumNotDefGlyph, §7.21.8) — chính xác hơn các heuristic mức byte, vốn chỉ kích hoạt khi không có font program nào hoặc hoàn toàn không xuất hiện/ToUnicode. Lượt đi này short-circuit ở ba mức: vòng lặp trang thoát khi cả ba issue tầng Pdfium đã được đặt, vòng lặp từng object thoát ngay ở font đầu tiên không nhúng, và lượt quét ký tự bỏ qua bước.notdefkhiUnicodeMapErrorđã dính. PDF/UA là validator theo chuẩn PDF cuối cùng còn thiếu tầng object model của Pdfium
Version 1.92.0
Đã thêm (Added)
- Đã tạo
Tests.PdfR— tệp kiểm thử đầu tiên cho trình xác thực PDF/R-1 (FPdfPdfr), bao gồm xác thực tiêu đề, cấm ObjStm, phát hiện dấu hiệu raster và một trình bảo vệ tránh báo động giả cho tệp sạch; cả sáu bộ kiểm thử tiêu chuẩn PDF hiện đều có các tệp kiểm thử chuyên dụng: PdfA(80), PdfUa(101), PdfX(7), PdfE(5), PdfVT(15), PdfR(4) = tổng cộng 212 kiểm thử
Version 1.91.0
Đã thêm (Added)
ValidatePdfEvàValidatePdfVTcó thêm các kiểm tra cấp nội dung trước đây chỉ có sẵn trong các trình xác thực PDF/A, PDF/UA và PDF/X:pveiLzwForbidden,pveiJavaScriptForbidden,pveiFormFieldsForbidden(chỉ dành cho PDF/E),pveiEmbeddedFilesForbidden(chỉ dành cho PDF/E),pveiOpiForbidden,pvviLzwForbidden,pvviJavaScriptForbidden,pvviEmbeddedFilesForbidden,pvviOpiForbidden;TPdf.ValidatePdfEvàTPdf.ValidatePdfVTcũng có thêm một lớp mô hình đối tượng Pdfium (pveiPdfiumFontNotEmbedded/pvviPdfiumFontNotEmbedded) thực hiện duyệt qua các đối tượng văn bản của trang thông quaFPDFFont_GetIsEmbedded, ngắt sớm ở font không nhúng đầu tiên
Version 1.90.0
Đã thêm (Added)
TPdf.ValidatePdfXhiện xếp một lượt mô hình đối tượng Pdfium lên trên trình kiểm tra cấp độ byte: nó duyệt qua các đối tượng văn bản của mỗi trang thông quaFPDFTextObj_GetFont→FPDFFont_GetIsEmbeddedvà báo cáo font không nhúng dưới dạngpvxiPdfiumFontNotEmbedded— chính xác hơn phép phân tích heuristic cấp độ byte vốn chỉ kích hoạt khi không có chương trình font nào tồn tại; lượt duyệt này ngắt sớm ở font không nhúng đầu tiên được tìm thấy
Đã thay đổi (Changed)
- Lượt duyệt cây cấu trúc của
TPdf.ValidatePdfUa: lệnh gọiValidatePdfUaPageContentTaggingtheo từng trang (xây dựng bản đồ xác nhận marked-content-ID và kiểm tra chéo từng đối tượng văn bản/hình ảnh) giờ đây sẽ bị bỏ qua trên các trang tiếp theo sau khi đã tìm thấypvuaiUntaggedContent— các structure elements vẫn được thu thập cho các kiểm tra đa trang (chỉ mục ID duy nhất, chuỗi tiêu đề), nhưng lượt kiểm tra gắn thẻ nội dung theo từng trang tốn kém sẽ dừng sớm
Version 1.89.0
Đã thay đổi (Changed)
- Tăng hiệu năng tầng object model của Pdfium trong
TPdf.ValidatePdfA: lượt đi trang/object nay short-circuit ở ba mức — vòng lặp trang thoát khi mọi issue tầng Pdfium áp dụng được đều đã tìm thấy, vòng lặp từng object thoát khi cả hai issue theo object (font nhúng + transparency) đều đã đặt, và lượt quét ký tự của text page bỏ qua bước.notdefkhiUnicodeMapErrorđã dính. Các check khả dụng API quaAssigned()cùng các flag conformance được cache vào biến boolean cục bộ một lần trước vòng lặp thay vì bị đánh giá lại ở từng trang/object/ký tự. Với tài liệu lớn không tuân thủ, lượt đi nay có thể dừng ngay sau trang đầu tiên thay vì quét hết mọi trang; với tài liệu tuân thủ, chi phí mỗi trang thấp hơn (không còn gọiAssignedlặp lại)
Version 1.88.0
Đã thêm (Added)
ValidatePdfXcó thêm tám giá trịTPdfXValidationIssuemới ở mức nội dung, bao phủ các ràng buộc trao đổi in ấn mà PDF/X đặt ra bên cạnh các marker định dạng file:pvxiLzwForbidden(/LZWDecode),pvxiJavaScriptForbidden(/JavaScript),pvxiFormFieldsForbidden(/AcroForm//XFA),pvxiAdditionalActions(/AA),pvxiEmbeddedFilesForbidden(/EmbeddedFiles//FileAttachment),pvxiOpiForbidden(/OPI//Alternates),pvxiMissingTrimBox(không trang nào có/TrimBox), vàpvxiTrappedNotSet(/Trappedvắng mặt hoặc/Unknown). Validator PDF/X trước đây chỉ kiểm tra marker XMP/OutputIntent; đây là lượt quét mức nội dung đầu tiên của nó. Các helper dùng chungPdfStructureBytes/PdfHasName/PdfCountNameđã được thêm vàoFPdfPdfCommonđể mọi unit conformance đều dùng được
Version 1.87.0
Đã thêm (Added)
- Xác thực PDF/UA hiện bao gồm các quy tắc font tổng hợp theo ISO 14289-1 §7.21.3:
pvuaiCidSystemInfoMismatchđánh dấu các font Type0 có CMap nhúng và CIDFont con không đồng nhất vềRegistry/OrderinghoặcSupplementcủa CIDFont vượt quá giá trị trong CMap,pvuaiCMapNotEmbeddedđánh dấu các CMap được tham chiếu bằng tên (dưới dạngEncodinghoặcUseCMap) không phải là CMap định sẵn theo Bảng 118 ISO 32000-1, vàpvuaiCMapWModeMismatchđánh dấu các CMap nhúng cóWModetrong từ điển khác với WMode trong nội dung luồng
Đã sửa (Fixed)
- Kiểm tra
pvuaiCidFontMissingCidToGidMaptheo §7.21.3.2 đã bỏ sót các từ điển CIDFontType2 có cặp khóa/giá trịSubtypebị ngăn cách bởi ký tự xuống dòng, và hiện cũng đánh dấu giá trị tênCIDToGIDMapkhác vớiIdentity
Version 1.86.0
Đã thêm (Added)
- Xác thực PDF/UA hiện bao gồm các quy tắc mã hóa TrueType theo ISO 14289-1 §7.21.6:
pvuaiTrueTypeEncodingInvalidđánh dấu các font TrueType không biểu tượng (non-symbolic) cóEncodingbị thiếu hoặc không phải làMacRomanEncodinghayWinAnsiEncoding(trực tiếp hoặc quaBaseEncoding), vàpvuaiSymbolicTrueTypeEncodingđánh dấu các font TrueType biểu tượng (symbolic) mang tênEncodingkhông chuẩn
Version 1.85.1
Đã thay đổi (Changed)
- Kiểm tra thứ tự tab theo ISO 14289-1 §7.18.3
pvuaiMissingTabsOrdergiờ chạy theo từng trang: mỗi trang có chú thích phải khai báo/Tabs /Strong từ điển trang của chính nó, do đó một trang hợp lệ sẽ không còn che khuất trang thiếu khai báo này
Version 1.85.0
Đã thêm (Added)
- Xác thực PDF/UA giờ phân biệt XFA form động và tĩnh theo ISO 14289-1 §7.15:
pvuaiXfaDynamicđánh dấu các form có cấu hình XFA đặtdynamicRenderthànhrequired
Đã thay đổi (Changed)
- Cờ ứng viên any-XFA cũ
pvuaiXfaPresentđã bị loại bỏ và không còn được phát sinh (XFA tĩnh phù hợp với §7.15); giá trị enum vẫn giữ nguyên để tương thích API
Version 1.84.0
Đã thêm (Added)
- Xác thực PDF/UA giờ phát hiện nội dung thực không được gắn thẻ theo yêu cầu của ISO 14289-1 §7.1:
pvuaiUntaggedContentđánh dấu các đối tượng văn bản và hình ảnh được hiển thị mà không được cây cấu trúc của trang nhận diện (qua ID nội dung được đánh dấu) cũng không được đánh dấu là Artifact - Các helper cấp trang mới
GetPageContentMarkInfosvàValidatePdfUaPageContentTaggingcùng bản ghiTPdfPageContentMarkInfođể sử dụng trực tiếp
Version 1.83.0
Đã thêm (Added)
- Xác thực PDF/UA giờ thực thi mô hình heading theo ISO 14289-1 §7.4.4:
pvuaiHeadingModelMixedđánh dấu các tài liệu kết hợp thẻHchung với các heading được đánh sốH1..Hn, vàpvuaiHeadingMultipleInNodeđánh dấu các nút cấu trúc có nhiều hơn một heading conH
Version 1.82.0
Đã thêm (Added)
- Xác thực PDF/UA giờ phân giải RoleMap theo yêu cầu của ISO 14289-1 §7.1:
pvuaiRoleMapRemapsStandardđánh dấu các mục RoleMap định nghĩa lại kiểu cấu trúc chuẩn, vàpvuaiRoleMapUnresolvedđánh dấu các kiểu cấu trúc không chuẩn được sử dụng mà chuỗi RoleMap của chúng bị thiếu, đứt gãy hoặc vòng tròn — các chuỗi gián tiếp đến được kiểu chuẩn được chấp nhận, và các mục RoleMap không được dùng không bao giờ bị đánh giá - Các helper mới
PdfUaIsStandardStructType,PdfReadRoleMapPairs(với giải mã escape tên PDF#hh) vàValidatePdfUaRoleMapUsageđể sử dụng trực tiếp
Version 1.81.0
Đã thêm (Added)
- Xác thực PDF/UA giờ bao gồm việc gắn thẻ danh sách theo ISO 32000-1 theo yêu cầu của ISO 14289-1 §7.6:
pvuaiListStructureInvalidđánh dấu các mục LI nằm ngoài container L và các phần Lbl/LBody nằm ngoài mục LI, trong khi chấp nhận danh sách lồng nhau và cách dùng Lbl hợp lệ bên trong các phần tử Note và BibEntry
Version 1.80.0
Đã thêm (Added)
- Xác thực PDF/UA giờ bao gồm việc gắn thẻ bảng theo ISO 32000-1 theo yêu cầu của ISO 14289-1 §7.5:
pvuaiTableStructureInvalidđánh dấu các ô TH/TD nằm ngoài hàng TR và các hàng hoặc nhóm hàng nằm ngoài container Table,pvuaiTableHeaderMissingScopeđánh dấu các ô header mà mối quan hệ của chúng không thể xác định qua thuộc tính Scope lẫn liên kết Headers/ID, vàpvuaiTableHeadersUndefinedIdđánh dấu các tham chiếu Headers trong tài liệu không định nghĩa ID phần tử cấu trúc nào TPdfStructureElementhiển thị các thuộc tính bảngScope,HasHeaders,HeadersIds,ColSpanvàRowSpan, được phân giải trong quá trình duyệt cây cấu trúc
Đã thay đổi (Changed)
- Quá trình duyệt cây cấu trúc giờ đọc tất cả thuộc tính bố cục và bảng trong một lần quét qua từng từ điển thuộc tính của phần tử thay vì một lần quét cho mỗi thuộc tính
Version 1.79.1
Thêm (Added)
- Đã chuyển code mẫu
AnnotationsLabsang Lazarus và C++Builder, kết hợp với mẫu console Delphi hiện có
Sửa lỗi (Fixed)
TPdf.CreateAnnotationcó thể gặp lỗi “Cannot set attachment points” đối với các chú thích đánh dấu sử dụng các điểm tứ giác (Highlight, Underline, StrikeOut, Squiggly) vì chú thích mới chưa có ô tứ giác nào để thay thế; bây giờ nó sẽ gắn thêm tứ giác đầu tiên vào
Version 1.79.0
Thêm (Added)
- Mẫu console Delphi mới
AnnotationsLab: tạo các chú thích Text, Highlight, Square và Circle, ghi chúng vào một file PDF, sau đó tải lại file đó và liệt kê danh sách chú thích của trang
Version 1.78.0
Thêm (Added)
- Thêm
TPdf.MeasureTextvàTPdf.MeasureTextWidth: đo lường chiều rộng và chiều cao hiển thị của một chuỗi cho font và kích thước nhất định (đơn vị của PDF, 1 đơn vị = 1/72 inch) mà không cần thêm nội dung vào trang, giúp cho logic layout và word-wrap (tự động xuống dòng) có thể thực hiện dựa trênAddText; được cung cấp bởi unit độc lậpFPdfMeasurenhư một class helper - Thêm
TPdf.WrapText: cơ chế tự động xuống dòng tham lam (greedy word wrap) được xây dựng dựa trênMeasureTextWidth, tách văn bản ở khoảng trắng và gói các từ thành các dòng không rộng hơn một chiều rộng đã cho (đơn vị PDF); một từ đơn quá dài sẽ có một dòng riêng (không ngắt giữa từ), trả về các dòng đã gói dưới dạng mảng
Version 1.77.0
Thêm (Added)
ValidatePdfAđược bổ sung ba giá trịTPdfAValidationIssuemới, bao gồm các điều khoản trước đây được đánh giá là “NO” hoặc “hành vi của trình đọc” trong đợt kiểm tra trước đó (được nối tiếp số thứ tự, các giá trị hiện tại không đổi):pvaiPdfiumNotDefGlyph(PDF/A-2 6.2.11.8 — một ký tự phân giải thành Unicode 0 mà không có lỗi ánh xạ, đây là dấu hiệu khi chạy của tham chiếu glyph.notdef; được phát hiện thông qua lớp object-model Pdfium),pvaiWordBreakMissing(Cấp độ A 6.8.3.2 — một chuỗi hiển thị content-stream dài hơn 20 ký tự không có khoảng trắng, rất có thể là lỗi vi phạm nối từ; đây là một phương pháp phỏng đoán đơn giản giúp tránh các kết quả dương tính giả của nhóm ngôn ngữ CJK), vàpvaiLinkActionMissingTarget(6.6.3 — hành động GoToR/URI/SubmitForm thiếu khoá target hiển thị, do đó trình đọc không thể hiển thị nó)
Version 1.76.0
Đã thêm (Added)
ValidatePdfAđã có thêm ba giá trịTPdfAValidationIssuemới (được nối vào cuối, các giá trị hiện tại không thay đổi):pvaiNameNotValidUtf8(PDF/A-2/3 6.1.8 — token/BaseFonthoặc/FontNamechứa các byte ≥ 0x80 không tạo thành UTF-8 hợp lệ),pvaiInlineImageLzwForbidden(PDF/A-2/3 6.1.10 — một inline image trong một luồng nội dung trang sử dụng bộ lọc LZW hoặc Crypt), vàpvaiTrueTypeDifferencesForbidden(6.3.7 Cor.2 — một phông chữ TrueType non-symbolic mà từ điển Encoding của nó mang/Differences)
Version 1.75.0
Thêm mới (Added)
ValidatePdfAcó thêm ba giá trịTPdfAValidationIssuemới (được nối vào thứ tự, các giá trị hiện tại không thay đổi):pvaiIntegerImplementationLimit(PDF/A-2/3 6.1.13 — một thẻ số vượt quá giới hạn số nguyên có dấu 32-bit là 2,147,483,647),pvaiBlendModeNotWhitelisted(PDF/A-2/3 6.2.10 — một giá trị/BMnằm ngoài tập hợp chế độ hòa trộn tiêu chuẩn theo ISO 32000-1 §11.3.5; bổ sung chopvaiTransparentColorSpacecủa PDF/A-1 vốn chỉ cho phép Normal/Compatible), vàpvaiHexStringOddDigits(6.1.6 — một chuỗi hex<...>có số lượng chữ số hex lẻ)
Version 1.74.0
Thêm mới (Added)
ValidatePdfAcó thêm ba giá trịTPdfAValidationIssuemới (được nối vào thứ tự, các giá trị hiện tại không thay đổi):pvaiPermissionsViolation(6.1.12 — một từ điển/Permsmang/DigestLocation,/DigestMethodhoặc/DigestValuecùng với/DocMDP),pvaiTransActionForbidden(PDF/A-2 6.5.1 — một hành động chuyển tiếp Trans, được phát hiện thông qua mẫu từ điển hành động/S /Transđể tránh khớp sai với/Transparency), vàpvaiPdfiumObjectTransparency(PDF/A-1 6.4 — một đối tượng trang mang độ trong suốt thực theoFPDFPageObj_HasTransparency, mở rộng lớp mô hình đối tượng Pdfium được giới thiệu trong v1.73.0 để bắt các hiệu ứng chế độ hòa trộn/mặt nạ mềm mà quá trình quét tên ở cấp độ byte có thể bỏ sót)
Version 1.73.0
Thêm mới (Added)
TPdf.ValidatePdfAhiện sắp xếp một lớp mô hình đối tượng Pdfium lên trên bộ kiểm tra ở cấp độ byte: nó duyệt qua các đối tượng văn bản của mỗi trang thông quaFPDFPage_GetObject→FPDFTextObj_GetFont→FPDFFont_GetIsEmbeddedvà báo cáo một phông chữ được kết xuất không nhúng làpvaiPdfiumFontNotEmbedded(ISO 19005 6.3.4), đồng thời tải mỗi trang văn bản để quétFPDFText_HasUnicodeMapErrorvà báo cáo một ánh xạ Unicode bị hỏng làpvaiPdfiumUnicodeMapError(6.3.8). Đây là các kiểm tra mà bộ kiểm tra ở cấp độ byte không thể thực hiện — nó chỉ thấy các thẻ tên, chứ không thấy các tay cầm phông chữ đã phân giải hay trạng thái ánh xạ trên mỗi ký tự — và được hợp nhất vào kết quả cấp độ byte. Hàm độc lập ở cấp độ byteValidatePdfACompliancekhông thay đổi
Version 1.72.0
Thêm mới (Added)
ValidatePdfAcó thêm năm giá trịTPdfAValidationIssuemới (được nối vào thứ tự, các giá trị hiện tại không thay đổi):pvaiNeedsRenderingPresent(PDF/A-2 6.4.2 — catalog không được mang/NeedsRendering),pvaiDestOutputProfileRef(PDF/A-3 6.2.3 — một OutputIntent không được mang/DestOutputProfileRef),pvaiEmbeddedFileMissingUF(PDF/A-3 6.8 — một đặc tả tệp với/EFcũng phải mang/UF),pvaiXmpPacketBytesAttr(6.7.5 — phần mào đầu gói XMP không được mang thuộc tínhbytes=hoặcencoding=đã bị ngừng sử dụng), vàpvaiAnnotationToggleNoView(PDF/A-2 6.3.2 — bit/FToggleNoView của chú thích, giá trị 512, bị cấm)
Version 1.71.0
Thay đổi
ValidatePdfUahiện sẽ đưa rapvuaiOrderedListMissingListNumbering(ISO 14289-1 7.6): bộ duyệt cây cấu trúc (structure-tree walker) sẽ phân giải thuộc tính bố cụcListNumberingtrên mỗi phần tửLthông qua API thuộc tính của Pdfium và gắn cờ bất kỳ giá trị nào nằm ngoài tập hợp của Bảng 347 trong ISO 32000-1 (Decimal,UpperRoman,LowerRoman,UpperAlpha,LowerAlpha,None,Circle,Disc,Square). Thuộc tính bị thiếu sẽ không bị gắn cờ, vì danh sách có thể là danh sách không có thứ tự; điều này đóng lại khoảng trống ISO 14289-1 còn sót lại cuối cùng được ghi nhận ở cuối vòng 5
Version 1.70.0
Thêm mới
ValidatePdfUacó thêm bốn giá trịTPdfUaValidationIssuemới (được nối vào thứ tự, các giá trị hiện tại không thay đổi):pvuaiSubsetMissingCidSet(ISO 14289-1 7.21.4.2 — mộtFontDescriptorcủa tập hợp con CID phải khai báo/CIDSet),pvuaiToUnicodeForbiddenValue(7.21.7 — một ToUnicode CMap không được ánh xạ bất kỳ mã nào tớiU+FEFFhoặcU+FFFE; các luồng không nén được quét để tìm các dạng đầu ra<FEFF>/<FFFE>),pvuaiLangInvalidFormat(7.2 —/Langphải là một thẻ RFC 1766 / BCP 47 hợp lệ; một ngữ pháp nới lỏng chấp nhậnen,en-US,zh-Hans,es-419và gắn cờ các giá trị rõ ràng là không tuân thủ), vàpvuaiOrderedListMissingListNumbering(7.6 — được giữ lại để đảm bảo tính hoàn chỉnh của API; validator hiện chưa đưa ra vấn đề này vì việc phân biệt chính xác danh sách có thứ tự và không có thứ tự cần có giá trị thuộc tínhListNumbering, thứ mà bộ duyệt cây cấu trúc không phơi bày)
Version 1.69.0
Thêm mới
ValidatePdfUacó thêm hai giá trịTPdfUaValidationIssuemới (được nối vào thứ tự, các giá trị hiện tại không thay đổi):pvuaiWidgetOutsideForm(ISO 14289-1 7.18.4 — một phần tử cấu trúc Widget phải được lồng trong một phần tửForm; bộ duyệt cây cấu trúc hiện sẽ xác minh loại cha trực tiếp của mỗi Widget) vàpvuaiSubsetMissingCharSet(7.21.4.2 — mộtFontDescriptorcủa tập hợp con Type 1 phải khai báo/CharSet, được nhận diện bởi tiền tố tên tập hợp con+gồm sáu chữ cái trên/FontName)
Version 1.68.0
Thêm mới
ValidatePdfUacó thêm hai giá trịTPdfUaValidationIssuemới (được nối vào thứ tự, các giá trị hiện tại không thay đổi):pvuaiUriActionIsMap(ISO 14289-1 7.18.5 — một từ điển hành động URI không được chứa/IsMapcó giá trịtrue, vì nó sẽ vô hiệu hóa mục tiêu liên kết có thể truy cập) vàpvuaiHeadingSequenceViolation(7.4.2 — các tiêu đề được đánh số phải bắt đầu tạiH1và một chuỗi giảm dần không được bỏ qua một cấp độ trung gian nào, ví dụH1→H3là một vi phạm). Kiểm tra tiêu đề là quy tắc PDF/UA cấp độ cây cấu trúc đầu tiên trong validator:ValidatePdfUaStructureElementshiện sẽ duyệt qua danh sách phần tử được định kiểu và xác minh chuỗiH1…H6(vàH7+theo 7.4.3) theo thứ tự tài liệu
Version 1.67.0
Thêm mới
ValidatePdfUacó thêm năm giá trịTPdfUaValidationIssuemới (được nối vào thứ tự, các giá trị hiện tại không thay đổi):pvuaiLinkMissingContents(ISO 14289-1 7.18.5 — một chú thích Link phải chứa một mô tả thay thế thông qua/Contents),pvuaiAnnotationMissingContents(7.18.1 — bất kỳ chú thích nào không được miễn trừ mà không có/Contentsđều phải có một mô tả thay thế; Popup và Widget được miễn trừ),pvuaiEmbeddedFileMissingName(7.11 — một từ điển đặc tả tệp phải chứa/Fvà/UF),pvuaiMediaClipMissingAlt(7.18.6.2 — một từ điển dữ liệu clip phương tiện truyền thông phải chứa/CTvà/Alt), vàpvuaiCidFontMissingCidToGidMap(7.21.3.2 — một CIDFont Type 2 được nhúng phải chứa/CIDToGIDMap)
Version 1.66.0
Thêm mới
ValidatePdfUacó thêm năm giá trịTPdfUaValidationIssuemới (được nối vào thứ tự, các giá trị hiện tại không thay đổi):pvuaiRoleMapMissing(ISO 14289-1 7.1 — một tài liệu được gắn thẻ với các loại cấu trúc phi tiêu chuẩn phải chứa một/RoleMap),pvuaiOptionalContentAsKey(7.10 — một từ điển cấu hình nội dung tùy chọn không được mang khóa trạng thái tự động/AS),pvuaiXfaPresent(7.15 — sự hiện diện của/XFAtrong AcroForm bị gắn cờ vì XFA động bị cấm),pvuaiTrapNetAnnotation(7.18.2 — các chú thích/TrapNetbị cấm), vàpvuaiReferenceXObject(7.20 — các Reference XObject, được gắn với điểm đánh dấu/Ref, bị cấm)
Đã sửa lỗi
ValidatePdfUakhông còn báo cáo dương tính giảpvuaiEncryptionPresenttrên mỗi tệp được mã hóa: PDF/UA cho phép mã hóa miễn là khóa/Ptrong từ điển mã hóa có vị trí bit 10 (giá trị 1024) được thiết lập, nhằm cấp quyền truy cập cho công nghệ hỗ trợ (7.16). Vi phạm chính xác hiện được báo cáo thông quapvuaiEncryptionPBitMissingmới;pvuaiEncryptionPresentđược giữ lại trong enum để tương thích API nhưng không còn được đưa ra bởi validator ở cấp độ byte nữa
Version 1.65.0
Thêm mới
ValidatePdfAcó thêm năm giá trịTPdfAValidationIssuemới (được nối vào thứ tự, các giá trị hiện tại không thay đổi):pvaiCidFontMissingCidToGidMap(ISO 19005-1 6.3.3.2 Cor.2 — một CIDFont Type 2 được nhúng phải chứa/CIDToGIDMap),pvaiSubsetMissingCharSet(6.3.5 — mộtFontDescriptorcủa tập hợp con Type 1 phải chứa/CharSet),pvaiSubsetMissingCidSet(6.3.5 — mộtFontDescriptorcủa tập hợp con CID phải chứa/CIDSet),pvaiWidgetActionForbidden(6.6.1 — một chú thích Widget không được chứa/Ahoặc/AA), vàpvaiOptionalContentAsKey(ISO 19005-2 6.9 — một từ điển cấu hình nội dung tùy chọn không được mang khóa trạng thái tự động/AS, vấn đề này mới trở nên có liên quan vì PDF/A-2 cho phép nội dung tùy chọn)
Version 1.64.0
Thêm mới
ValidatePdfAcó thêm tám giá trịTPdfAValidationIssuemới (được nối vào thứ tự, các giá trị hiện tại không thay đổi):pvaiHeaderBinaryMarkerMissing(ISO 19005-1 6.1.2 — phần mào đầu%PDF-x.yphải được theo sau bởi một chú thích%có ít nhất bốn byte lớn hơn 127),pvaiExternalStreamRef(6.1.7 — một từ điển luồng không được chứa/F,/FFilterhoặc/FDecodeParms),pvaiOutputIntentScheme(6.2.2 — OutputIntent/Sphải là/GTS_PDFA1),pvaiInfoXmpDateMismatch(6.7.3 —CreationDate/ModDatecủa Info cũng phải xuất hiện dưới dạngxmp:CreateDate/xmp:ModifyDate),pvaiMarkInfoMissing(6.8.2.2 — Level A yêu cầu/MarkInfovới/Marked true),pvaiAnnotationApDictViolation(6.5.3 Cor.2 — từ điển/APcủa chú thích chỉ được chứa/N),pvaiEmbeddedFileMissingAFRelationship(ISO 19005-3 Phụ lục E.2 — mỗi tệp được liên kết đặc tả phải chứa/AFRelationship), vàpvaiJpeg2000Violation(ISO 19005-2 6.2.8.3 — một hình ảnh JPEG2000 phải khai báo 1, 3 hoặc 4 thành phần)
Đã sửa lỗi
ValidatePdfAkhông còn báo cáo dương tính giảpvaiAnnotationFlagsViolationtrên các tài liệu sử dụng tên tài nguyên phông chữ gồm một chữ cái như/Font << /F 5 0 R >>; việc quét cờ/Fhiện được đặt trong một ngữ cảnh chú thích (/Subtypecủa một loại chú thích), khớp với hành vi đã được ghi nhận (6.5.3)ValidatePdfAhiện báo cáo yêu cầu về tệp được liên kết PDF/A-3 trên mỗi tệp: một tài liệu chỉ bị gắn cờ khi một/Type /Filespecđược nhúng tham chiếu đến một luồng được nhúng thông qua/EFmà thiếu/AFRelationship, thay vì việc kiểm tra toàn bộ tài liệu (bất kỳ hoặc không có) như trước đây (ISO 19005-3 Phụ lục E.2)- Đã thêm hành động bị ngừng sử dụng (deprecated)
/SetStatevào tập hợp hành động bị cấm cùng với/SetOCGState, do đó tên hành động của PDF Reference bị bắt trực tiếp (6.6.1)
Version 1.63.0
Đã thêm (Added)
- Thêm
TPdf.MeasureTextvàTPdf.MeasureTextWidth: đo chiều rộng và chiều cao hiển thị của text với font và cỡ chữ cho trước mà không thêm nội dung vào trang (theo đơn vị user của PDF, 1 unit = 1/72 inch), mở đường cho tính toán layout và tự động ngắt dòng trên nềnAddText; được cung cấp bởi unit độc lậpFPdfMeasuredưới dạng class helper
Đã thay đổi (Changed)
Demo\Delphi\MergePDF,Demo\CBuilder\MergePDFvàDemo\Lazarus\MergePDFđược nâng cấp trên cả ba IDE: bổ sung chọn vùng trang theo từng file, đường dẫn đầu ra tùy chọn, khử trùng lặp, log chạy, nút hủy và tổng kết sau khi merge xong, với bookmark và metadata được chuyển sang từ nguồn đầu tiên khi import- Các demo
CreatePDFtrên cả ba IDE nay có tùy chọn “European Text” để ghi text có dấu trong tiếng Séc, Pháp, Đức, Tây Ban Nha, Bồ Đào Nha, Ba Lan và Thổ Nhĩ Kỳ, phục vụ kiểm chứng việc chọn font và xử lý Unicode (sampleEuropeanTextcũ đã được gộp vào) - Đã loại bỏ các sample
ExtractTextPagesvàEuropeanText: khả năng xuất text theo từng trang củaExtractTextPagesnay được bao phủ bởi các tùy chọn page-range và page-separator trongExtractText; phần render text đa ngôn ngữ củaEuropeanTextđã được gộp vàoCreatePDF
Version 1.62.2
Đã sửa (Đã sửa lỗi)
- Tạo lại các header C++Builder (
.hpp) cho mọi phiên bản và nền tảng RAD Studio (Win32/Win64/Win64x); chúng đã lệch khỏi nguồn Pascal, để lại chữ ký hàm cũ và các unit bị thiếu đến tay người dùng C++Builder qua bản phân phối mã nguồn
Version 1.62.1
Đã sửa (Đã sửa lỗi)
- Khôi phục quá trình biên dịch mã nguồn trên RAD Studio 12 Athens và cũ hơn: một phép gán
TArray<Byte>trong đường dẫn xác thực PDF/UA dùng chuyển đổi mảng ngầm định chỉ có trong Delphi 13, nên không biên dịch được trên các IDE cũ hơn
Version 1.62.0
Đã thêm (Thêm mới)
TPdf.RenderPageThumbnailrender bất kỳ trang nào theo index thành bitmap vừa khít tỷ lệ khung hình mà không thay đổi trang hiện tại của tài liệu, trang đã tải hoặc kích hoạtOnPageChange
Đã sửa (Đã sửa lỗi)
TPdfThumbnailViewkhông còn điều khiểnPageNumbercủa tài liệu host khi vẽ; trước đây mỗi lần repaint sẽ tải lại trang, kích hoạtOnPageChangevà bỏ text page, có thể làm gián đoạnTPdfViewđược liên kết và gây vòng lặp repaint. Thumbnail hiện được render quaRenderPageThumbnailmà không có các tác dụng phụ đó- Kiểm tra tuân thủ PDF/X hiện kiểm tra các tài liệu cross-reference stream (PDF 1.6, thường gặp ở PDF/X-4) và các object được lưu trong compressed object streams, thay vì báo toàn bộ các tệp như vậy là không tuân thủ; marker
GTS_PDFXVersionđược đọc từ cả element-form và RDF attribute-form trong XMP - Kiểm tra PDF/R hiện báo
pvriInfoXmpMismatchkhi Info dictionary và XMP không khớp về Producer hoặc Creator; issue này trước đây đã được khai báo nhưng chưa bao giờ được phát sinh - Các timer form-fill được theo dõi theo từng yêu cầu, nên tài liệu chạy nhiều timer cùng lúc (ví dụ JavaScript interval cùng với nhấp nháy field caret) sẽ giữ tất cả thay vì mất mọi timer trừ timer mới nhất
- Hoạt động vẽ của
TPdfViewvà các phương thức publicRenderPage/RenderTilehiện giữ document render lock, tuần tự hóa với worker-thread rendering của cùng mộtTPdf(PDFium không thread-safe) - Văn bản non-ASCII ghi vào metadata PDF/X, PDF/R và PDF/VT (tên điều kiện OutputIntent, Creator, Producer) hiện được mã hóa thành chuỗi UTF-16BE theo ISO 32000-1 §7.9.2.2 thay vì raw UTF-8 mà các reader tuân thủ sẽ đọc sai
- Các helper tuân thủ đọc đúng embedded metadata streams có
/Lengthlà indirect reference, tải source bytes bằngReadBuffer(để short read thất bại sạch) và từ chối offsetstartxrefâm thay vì có nguy cơ đọc ngoài phạm vi
Version 1.61.0
Đã thay đổi (Thay đổi)
- Hiệu chỉnh khai báo FFI/ABI có thể yêu cầu biên dịch lại mã đã triển khai các callback bị ảnh hưởng: callback form-fill
FFI_OpenFilenay mangcdecl(quy ước stack của Win32), và tham sốvaluecủaFPDFAnnot_SetStringValuevàFPDFAttachment_SetStringValuenay làFPDF_WIDESTRING(UTF-16LE) để khớp với header của PDFium - Các callback progressive-load
FX_FILEAVAIL.IsDataAvailvàFX_DOWNLOADHINTS.AddSegmentnay nhận offsetsize_t, vàsize_tcó độ rộng bằng con trỏ trên Free Pascal / Lazarus Win64 (trước đây bị cắt còn 32-bit), khắc phục các lời gọi API data-availability vàoutsize_ttrên FPC Win64
Đã sửa (Đã sửa lỗi)
- An toàn bộ nhớ: lỗi use-after-free của timer form-fill khi hủy một
TPdfcó AcroForm caret đang hoạt động; gọiFPDF_CloseDocumenthai lần trên nhánh lỗi củaImportNPagesToOne; ngoại lệ Pascal thoát ra khỏi các callbackFPDF_FILEWRITE/FPDF_FILEACCESSqua ranh giới C trong lúc lưu và chèn JPEG; và tràn số nguyên trong trích xuất văn bản khi đọc từ chỉ mục đầu đến cuối trang TPdfFuture<T>nay trả callback kết quả một cách tin cậy; trước đây phản hồi gần như luôn bị rơi mất (và có thể chạm vào một thread đã giải phóng) vì worker tự giải phóng trước khi phản hồi xếp hàng chạy- Đầu ra PDF/A, PDF/X, PDF/E, PDF/R, PDF/VT và PDF/UA nay ghi các mục cross-reference đúng 20 bytes theo ISO 32000-1 §7.5.4
- Việc chèn standards marker không còn phá hủy dictionary khi key bị xóa, ví dụ
/Trapped, là mục cuối cùng, vốn trước đây nuốt luôn>>đóng và tạo ra object lỗi - Các luồng ICC profile của OutputIntent nay khai báo đúng số thành phần
/Nbắt buộc cho PDF/X và PDF/VT (đã có cho PDF/A); tài liệu nguồn đã mã hóa được giải mã trước khi chèn marker PDF/X, PDF/E, PDF/R, PDF/VT và PDF/UA, nên đầu ra hợp lệ thay vì bị hỏng âm thầm - BOM xpacket UTF-8 trong XMP sinh ra được xuất đúng byte, sửa lỗi hỏng dữ liệu trên các cài đặt Delphi có ANSI code page không phải Latin-1; các trailer incremental-update nay giữ tham chiếu
/Infocủa tài liệu SaveAsvới nén không còn cắt ngắn các stream có/Lengthlà indirect reference, và các bảng cross-reference được dựng lại nay dùng entry 20 bytes, generation number thực, và bỏ pointer/Prevcũ- Xác thực tuân thủ đọc đúng marker phiên bản XMP dạng attribute cho PDF/E và PDF/X, nên nhận ra các tệp PDF/X-4 được tuần tự hóa bằng attribute, yêu cầu đúng định danh
PDF/E-1, đọc đúng metadata stream có indirect-/Length, và không còn false-match key/IDhay/StructTreeRootcủa phần tử cấu trúc khi kiểm tra trailer PDF/UA; offsetstartxreflỗi định dạng không còn gây range error TPdfThumbnailView: trang cuối nay có thể tới được bằng thanh cuộn, trang hiện tại của tài liệu host được khôi phục sau khi vẽ thumbnail, và xử lý mouse-leave chuẩn được phát lại- Bitmap trang và ảnh dạng grayscale không còn bị render với palette sai;
TPdfViewcũng không còn bị bỏ lại với tham chiếu treo khiTPdfcủa nó bị giải phóng trước - Báo cáo preflight: HTML được lưu dưới UTF-8 để khớp charset khai báo, và escaping chuỗi JSON tạo ra các chuỗi
\uđúng cho ký tự non-ASCII trên Free Pascal - Bản dựng trial: hộp thoại nhắc trial nay xuất hiện thay vì bị chặn trước khi kịp hiện
TPdfStreamAdapternay từ chối các stream lớn hơn 4 GiB bằng lỗi rõ ràng thay vì âm thầm cắt ngắn độ dài chuyển cho PDFium
Version 1.60.1
Đã thay đổi (Thay đổi)
- Các bản demo AccessibilityReader cho Delphi, Lazarus và C++Builder giờ chạy đọc to trên
TPdfReadingSession: mỗi trang được ghép thành một đoạn thoại vớiBuildSpokenTextFromWords, vị trí từ SAPI được nạp vàoFeedSpokenPosition, và phiên làm việc tự động chuyển trang đồng thời điều khiển con trỏ từ của khung nhìn, thay cho phần điều phối viết tay mà mỗi bản demo từng tự đảm nhiệm - Theo dõi karaoke ở mức từ trong các demo giờ cũng hoạt động khi NVDA là bộ máy giọng nói:
EstimatePacingđiều chỉnh nhịp con trỏ đọc theo thời gian nói đã trôi qua, trong khi trước đây NVDA đọc to mà không hề có theo dõi từ - Tạm dừng và Tiếp tục trong các demo giờ cũng hoạt động với NVDA:
ResumeRestartsChunkphát lại phần đầu của trang hiện tại khi Resume, trong khi SAPI vẫn giữ cơ chế tạm dừng và tiếp tục nội tuyến vốn có
Version 1.60.0
Đã thêm (Thêm mới)
- Kết xuất hỗ trợ nhìn kém trực tiếp trên
TPdfView: các tùy chọn render mớireInvertvàreNightDuotoneđổi màu mọi tile trang đã render (đảo màu hoàn toàn, hoặc bảng màu hai tông ban đêm) trước khi lớp phủ tìm kiếm, chọn, đọc và con trỏ từ được vẽ, đưa các phép biến đổi màu bitmap sẵn có vào trình xem tương tác cho cả bố cục một trang lẫn hai trang; bật tắt tùy chọn là vẽ lại ngay NightDuotoneInkvàNightDuotonePapercấu hình bảng màu ban đêm, mặc định là chữ màu hổ phách trên nền đen;reInvertđược ưu tiên khi cả hai tùy chọn đều bật
Version 1.59.0
Đã thêm (Thêm mới)
TPdfReadingSession: thành phần điều phối đọc to trung lập với bộ máy âm thanh. Nó giữ con trỏ đoạn, con trỏ từ và trạng thái phát (Play/PlayFrom/Pause/Resume/Stop), lần lượt đi qua các đoạnTPdfSpokenTextđã nạp khi máy chủ báo bộ máy nhàn rỗi quaTick, ánh xạ ngược các vị trí văn bản đã nói về ký tự trên trang và tự động điều khiển con trỏ từ củaTPdfViewđược gắn kèm; máy chủ kết nối bất kỳ bộ máy nói nào quaOnSpeakcùng các sự kiện yêu cầu hủy / tạm dừng / tiếp tục, nên thư viện không tự liên kết API giọng nói nàoFeedSpokenPositionnhận vị trí từ của engine (như SAPIStatus.InputWordPosition);EstimatePacingvớiEstimatedWordsPerMinuteđiều chỉnh nhịp cho engine không có tín hiệu vị trí;ResumeRestartsChunkđọc lại đoạn hiện tại cho engine không có tạm dừng gốcOnChunkChange,OnWordChangevàOnFinishedchỉ phát khi thực sự có thay đổi, và một view được gắn kèm sau khi bị giải phóng sẽ tự tách ra, nên mã phía host không bị nhấp nháy và an toàn trước crash
Version 1.58.0
Đã thêm (Thêm mới)
EstimateSpokenWordIndexước lượng engine đang đọc từ nào dựa trên thời gian đã trôi qua và tốc độ từ mỗi phút, cho các từ dài nhiều thời gian hơn theo tỷ lệ, nên những engine không báo vị trí từ (như NVDA controller client) vẫn có thể điều khiển con trỏ đọc ở mức từ; bên gọi cung cấp thời gian đã trôi qua, nên routine không phụ thuộc đồng hồ và có thể kiểm thử đơn vị
Version 1.57.0
Đã thêm (Thêm mới)
- Ghép văn bản nói với ánh xạ hai miền cho theo dõi đọc to:
BuildSpokenTextFromWordsvàSpokenTextAppenddựng chuỗi gửi cho engine text-to-speech từ các hộp từ trên trang đồng thời ghi lại bảng span, cònSpokenToPageCharchuyển vị trí văn bản đã nói do engine báo (như SAPIStatus.InputWordPosition) về chỉ mục ký tự trên trang, nên việc theo dõi tô sáng ở mức từ vẫn chính xác khi văn bản được nói không phải toàn bộ văn bản trang (vùng bị bỏ qua, đọc theo đơn vị, ghi đè phát âm) TPdfSpokenTextvàTPdfSpokenSpanmang chuỗi đã nói cùng các dải trang nguồn dùng để tạo ra nó; các offset trên dấu phân tách được chèn sẽ trỏ sang từ được ánh xạ kế tiếp và các offset vượt quá các đoạn đã ánh xạ sẽ báo không khớp
Version 1.56.9
Đã thêm (Thêm mới)
Demo\Delphi\PreflightReportthêm bản xem trước Action Plan, cô đọng các tiêu chuẩn không đạt, độ ưu tiên, hành động tiếp theo, mã issue và khuyến nghị thành một checklist khắc phụcDemo\Delphi\PreflightReportClichấp nhậnplan/actionplanlàm định dạng đầu ra cho chạy một tệp và chạy hàng loạt, ghi cùng checklist khắc phục đó ra một tệp văn bản
Đã thay đổi (Thay đổi)
- Cả hai demo Delphi PreflightReport giờ hiển thị số lượng trạng thái pass / action / review cùng với tổng số tiêu chuẩn và issue
Version 1.56.8
Đã thay đổi (Thay đổi)
ViewerInteractionLabgiờ có thêm điều khiển nhảy trang, điều khiển phóng to thủ công, ghi log tọa độ nhấp chuột choDeviceToPage/PageToDevice, và một nhật ký tương tác rõ ràng hơn cho các kiểm tra chọn, tìm kiếm, xoay và điều hướngViewerInteractionLabcác trang readme giờ ghi lại quy trình tương tác được bổ sung trong bộ readme demo đã bản địa hóa
Version 1.56.7
Đã thêm (Thêm mới)
AccessibilityWorkbenchCliánh xạ mọi phát hiện được kích hoạt tới Success Criteria của WCAG 2.1 và vùng điều khoản ISO 14289-1 (PDF/UA-1) tương ứng, đồng thời hiển thị một mục bao phủ tiêu chuẩn trong báo cáoAccessibilityWorkbenchClitính một điểm truy cập hỗ trợ 0-100 có tài liệu đi kèm, với thang phạt đã công bố và các mức excellent / good / needs work / poor, hiển thị theo từng tệp và dưới dạng trung bình của cả lôAccessibilityWorkbenchClichấp nhậnfailscore=Nđể làm cho lần chạy thất bại (mã thoát 2) khi bất kỳ tệp nào có điểm thấp hơn NAccessibilityWorkbenchClighi log SARIF 2.1.0 khi tên tóm tắt batch kết thúc bằng.sarif, với mỗi rule ứng với một loại phát hiện, mang theo thẻ WCAG 2.1 và PDF/UA để CI và code-scanning nạp vàoAccessibilityWorkbenchClithêm lệnhversionin ra phiên bản PDFium Delphi Component được liên kết
Version 1.56.6
Đã thêm (Thêm mới)
IntakeWorkbenchClitính hash pháp chứng SHA-256 cho từng tệp đầu vào (rơi xuốngunavailabletrên các compiler không cóSystem.Hash) và báo cáo trong mọi định dạngIntakeWorkbenchClichấp nhậnpasswords=file.txtđể thử mở khóa các tài liệu cần mật khẩu từ một danh sách ứng viên, ghi lại chỉ số của ứng viên khớp mà không bao giờ ghi log văn bản mật khẩuIntakeWorkbenchClichấp nhậncopyto=dirđể chuyển từng tệp đã thẩm định vào một thư mục con theo mức rủi ro, biến auditor thành bộ sắp xếp đầu vàoIntakeWorkbenchClighi log SARIF 2.1.0 khi tên tóm tắt batch kết thúc bằng.sarif, với mỗi rule ứng với một cờ rủi ro và một result cho mỗi tệp bị gắn cờ để CI và code-scanning nạp vàoIntakeWorkbenchClithêm lệnhversionin ra phiên bản PDFium Delphi Component được liên kết
Version 1.56.5
Đã thêm (Thêm mới)
IntakeWorkbenchCligiờ suy ra các hành động hậu nhập được khuyến nghị như accept, request-password, manual-review, quarantine và deduplicate, đồng thời hiển thị số lượng hành động trong tóm tắt batchAccessibilityWorkbenchCligiờ suy ra các hành động khắc phục được khuyến nghị như pass-through, remediate-tags, run-ocr, remediate-semantics và manual-review, kèm số lượng hành động batch tương ứng
Đã thay đổi (Thay đổi)
- Cả hai demo CLI ở mức công cụ đều hiển thị hành động được khuyến nghị trong đầu ra console, text, HTML, JSON và CSV để người vận hành batch có thể điều hướng tệp mà không cần xử lý hậu kỳ các trường rủi ro hoặc trạng thái
Version 1.56.4
Đã sửa (Đã sửa lỗi)
- Đọc chú thích, bookmark hoặc link annotation trong vòng lặp sẽ không còn làm rò rỉ chuỗi văn bản của mục trước đó: các record kết quả
TPdfAnnotation,TBookmarkvàTLinkAnnotationgiờ được xóa bằng khởi tạo có nhận thức kiểu managed thay vì zero hóa bộ nhớ thô, nên những tài liệu chứa số lượng rất lớn annotation có văn bản sẽ không còn làm phình bộ nhớ tiến trình trong suốt vòng đời ứng dụng - Khi hủy một
TPdfđã đăng ký handlerOnUnsupportedFeature, nó sẽ được tách khỏi callback PDFium dùng chung toàn tiến trình, nên lần nạp tài liệu sau từ một instanceTPdfkhác không có handler riêng sẽ không thể dispatch vào component đã giải phóng (use-after-free)
Version 1.56.3
Đã sửa (Đã sửa lỗi)
AccessibilityWorkbenchClikhông còn tính các trang trống là trang đọc theo heuristics, nên các tài liệu được gắn thẻ với trang ngăn cách rỗng vẫn giữ đúng trạng thái hỗ trợ truy cập; các trang không có nội dung có thể đọc giờ được báo riêngAccessibilityWorkbenchCliphát hiện header bảng không còn cộng điểm cho bảng ngoài đối với ôTHthuộc bảng lồng nhau, và tên field form cùng tên font được so khớp phân biệt hoa thường để các field khác nhau không bị gộpIntakeWorkbenchCligiờ loại bỏ userinfo, query và fragment khỏi kiểm kê host của URL, nên một liên kết được tạo khéo nhưtrusted.example@evil.examplesẽ được quy cho host thật, còn đíchmailto:sẽ đóng góp domain của nó thay vì biến mấtIntakeWorkbenchClibáo cáo Markdown giờ escape dấu backtick trong các đường dẫn, host và tên đính kèm do kẻ tấn công kiểm soát, nên định dạng báo cáo không thể bị phá từ trong tài liệu
Đã thay đổi (Thay đổi)
AccessibilityWorkbenchClibáo cáo các lỗi quét font và quét field form bằng bộ đếm riêng, đánh dấu những font không nhúng nhưng cũng có bản nhúng, và giới hạn các danh sách font dài bằng một marker rút gọn rõ ràngIntakeWorkbenchClitóm tắt batch thêm cột đếm annotation đính kèm, và kiểm kê annotation theo trang được giới hạn ở 20000 annotation mỗi trang với mức giới hạn được báo ở mọi định dạng
Version 1.56.2
Đã thêm (Thêm mới)
AccessibilityWorkbenchCligiờ kiểm tra mức độ nhúng font, tooltip của field form, nguồn của thứ tự đọc, outline tài liệu, cấu trúc bảng và danh sách, alt text đáng ngờ, cùng chi tiết xem xét phong phú hơn theo từng trang để báo cáo batch hỗ trợ truy cập xác định được nhiều mục cần khắc phục hơnIntakeWorkbenchCligiờ báo cáo giới hạn quét trang, hành động launch và remote-go-to, kiểm kê host của URI, số lượng annotation, các tính năng PDFium không được hỗ trợ, định danh tài liệu trùng lặp, và các cờ rủi ro mở rộng cho việc xem xét đầu vào tự động
Đã thay đổi (Thay đổi)
IntakeWorkbenchClichấp nhậnmaxpages=Nở chế độ một tệp và batch để giới hạn số trang quét trên mỗi tài liệu trong khi vẫn hoàn tất báo cáo metadata, attachment, script, XFA, signature và rủi ro
Version 1.56.1
Đã sửa (Đã sửa lỗi)
- Nạp một
pdfium.dllcũ hơn mà thiếu một export mới giờ sẽ thất bại gọn gàng: đường dẫn lỗi đặt lại mọi điểm vào API đã bind, nên các kiểm traAssigned()(ví dụ trênFPDF_GetLastErrorhoặcFPDF_GetSecurityHandlerRevision) sẽ báo thư viện chưa được nạp thay vì gọi vào module đã dỡ và crash với access violation UnloadLibrarygiờ xóa sạch mọi ràng buộc API PDFium thay vì chỉ các helper V8 tùy chọn, nên không còn con trỏ hàm cũ nào tồn tại sau khi DLL được giải phóng
Version 1.56.0
Đã thêm (Thêm mới)
- Con trỏ đọc karaoke ở mức từ trên
TPdfView:TrackReadingWordAtánh xạ offset ký tự của từ hiện tại từ engine text-to-speech (như SAPIStatus.InputWordPosition) vào các hộp từ trên trang, tô sáng từ chứa nó như một lớp phủ riêng phía trên khối đọc, cuộn nó vào khung nhìn, và trả về chỉ số từ, nên từ đang được đọc sẽ phát sáng khi giọng đọc tiến tới SetReadingWordvàClearReadingWordđặt hoặc xóa trực tiếp từ được tô sáng từ mộtTPdfWordBox; đặt lại cùng một từ là không có tác dụng, nên theo dõi từng từ không bao giờ làm nhấp nháy khung nhìnReadingWordColorvàReadingWordFollowđiều khiển màu của con trỏ từ và việc khung nhìn có tự cuộn từ đang được nói vào khung nhìn hay không
Version 1.55.2
Đã sửa (Đã sửa lỗi)
- ViewerInteractionLab giờ cho các hàng toolbar thêm không gian dọc, nên Open PDF, Create Sample, điều khiển điều hướng, tìm kiếm và chọn không còn chồng lấn nhau dưới font được phóng to
Version 1.55.1
Đã sửa (Đã sửa lỗi)
- ViewerInteractionLab giờ đặt Prev, Next và Rotate trên hàng toolbar thứ hai, tránh tình trạng chồng lấn lúc khởi động với Open PDF và Create Sample
Version 1.55.0
Đã thêm (Thêm mới)
- Cầu nối từ sang chọn cho đọc kiểu “đọc nó, chọn nó”:
TPdfView.SelectWordBoxvàSelectWordSpanchọn một hộp từ đơn hoặc một dải hộp từ cùng trang (từPageWordBoxes) theo dải ký tự của chúng, nên từ hoặc dòng đang được đọc cũng có thể được chọn và sao chép WordBoxIndexAtCharIndexánh xạ một chỉ mục ký tự trở lại hộp từ chứa nó, điều khiển tô sáng từng từ khi con trỏ đọc TTS tiến lên
Version 1.54.0
Đã thêm (Thêm mới)
- Các accessor hỗ trợ điều khiển bằng giọng nói đọc thẳng field đang focus từ con trỏ logic:
FocusedFormFieldValue,FocusedFormFieldNamevàFocusedFormFieldDetailstrênTPdfvàTPdfViewbáo giá trị field hiện tại, tên dễ đọc cho người dùng (/TUtooltip, rơi về/T) và toàn bộTPdfFormFieldInfo(kiểu, cờ, tùy chọn); mọi thứ một giao diện giọng nói cần để thông báo khi nó đi qua một form
Đã sửa (Đã sửa lỗi)
FocusedFormFieldValueđọc field theoFocusedFormFieldIndexthay vì focus tương tác của pdfium, nên bộ điền form điều khiển bằng giọng nói sẽ nhận đúng giá trị ngay cả khi không có caret trên màn hình (FocusedFormFieldTexthiện có vẫn phản ánh focus của pdfium và không đổi)
Version 1.53.0
Đã thêm (Thêm mới)
- Hỗ trợ tô sáng ở mức từ:
TPdf.PageWordBoxesvàTPdfView.PageWordBoxestách một trang thành các recordTPdfWordBox, mỗi record mang theo văn bản của từ, dải ký tự của nó và một khung giới hạn trong không gian trang, nên một ứng dụng đọc hỗ trợ truy cập có thể tô sáng từng từ được đọc lần lượt (“karaoke” reading) bằng cách truyền khung đó choSetReadingHighlight BuildWordBoxestách riêng luôn bước tokenizer, chuyển văn bản trang thành các hộp từ với dải ký tự
Version 1.52.0
Đã thêm (Thêm mới)
- Các helper render hỗ trợ nhìn kém
InvertPdfBitmap,GrayscalePdfBitmapvàDuotonePdfBitmapáp dụng biến đổi màu tại chỗ lên bitmap 32-bit đã render, nên một ứng dụng đọc hỗ trợ truy cập có thể hiển thị trang ở chế độ đảo màu / tối, thang xám hoặc lược đồ hai màu tùy chỉnh (ví dụ nền tối với chữ sáng) cho người dùng nhìn kém - Các phép biến đổi chạy theo từng pixel và hoạt động giống hệt trên VCL và Lazarus/LCL, không làm thay đổi kích thước bitmap
Version 1.51.0
Đã thêm (Thêm mới)
- Các đơn vị đọc ở cấp câu cho đọc hỗ trợ nghe-đọc:
TPdf.ReadingUnits,TPdf.DocumentReadingUnitsvàTPdfView.ReadingUnitstuyến tính hóa luồng nội dung có thể đọc thành các recordTPdfReadingUnitcó thứ tự, kích thước theo câu - mỗi record mang theo văn bản cần đọc cùng loại ngữ nghĩa, trang, các hình chữ nhật tô sáng và thẻ ngôn ngữ của nó, nên một ứng dụng screen reader có thể đi qua một trang hoặc cả tài liệu từng đơn vị đọc được phát ra lần lượt - Điều hướng ngữ nghĩa với
NextReadingUnitOfKind, cho phép giao diện giọng nói nhảy tới heading, figure, mục danh sách hoặc ô bảng tiếp theo hay trước đó mà không cần tự quét luồng bằng tay BuildReadingUnitschuyển bất kỳTPdfContentFragmentsnào thành reading unit trực tiếp: heading và mô tả figure/alt được giữ nguyên khối trong khi đoạn văn tách theo ranh giới câu, dấu chấm thập phân được giữ lại, và con trỏ đọc là chỉ số thuần do bên gọi sở hữu
Version 1.50.0
Đã thêm (Thêm mới)
ValidatePdfAgiờ có thể kiểm tra các tài liệu PDF 1.5+ lưu catalog, OutputIntent hoặc các dictionary khác bên trong compressed object stream (/Type /ObjStm). Các object stream được giải nén và các object chúng mang theo được phân giải, nên những tài liệu như vậy được xác thực theo giá trị thực của chúng thay vì bị báo là thiếu marker PDF/A
Version 1.49.5
Đã sửa (Đã sửa lỗi)
ValidatePdfAkhông còn báo thiếu mô tảpdfaExtension:schemaslà một vấn đề nữa. Lược đồ định danh PDF/A (pdfaid) là lược đồ đã biết, nên cả veraPDF lẫn PDF/A-2/-3 đều không yêu cầu mô tả extension-schema cho nó, và việc gắn cờ thiếu mục này trước đây đã báo sai mọi PDF/A bên thứ ba tuân thủ; các tài liệu do thư viện tự tạo vẫn bao gồm mô tả
Version 1.49.4
Đã sửa (Đã sửa lỗi)
ValidatePdfAgiờ phát hiện mức tuân thủ khi định danh PDF/A được ghi dưới dạng thuộc tính XML (pdfaid:part="2") thay vì phần tử con, nên các tài liệu dạng thuộc tính không còn bị báo có mức không xác định nữa. Điều này cũng sửa một chuỗi lỗi trong đó mức không được phát hiện làm cho các kiểm tra theo part rơi về quy tắc PDF/A-1 nghiêm ngặt và gắn nhầm embedded files và transparency mà PDF/A-2 và PDF/A-3 cho phép
Version 1.49.3
Đã sửa (Đã sửa lỗi)
ValidatePdfAgiờ kiểm tra các tài liệu PDF 1.5+ có dữ liệu cross-reference là cross-reference stream (các tệp không có từ khóatrailer). Mức tuân thủ,/IDcủa trailer và các marker khác được đọc từ dictionary của cross-reference stream, nên những tài liệu như vậy được xác thực theo giá trị thực của chúng thay vì bị báo là hoàn toàn không tuân thủ
Version 1.49.2
Đã sửa (Đã sửa lỗi)
ValidatePdfAkhông còn báo sai lỗi font không nhúng trên các tài liệu đã nhúng toàn bộ font của chúng nữa. Heuristic trước đây so sánh số token/FontDescriptorvới các chương trình font đã nhúng, nhưng mỗi font được nhúng đóng góp hai token/FontDescriptor(tham chiếu dictionary của font cộng với object descriptor), nên mọi tệp có font nhúng đều bị gắn cờ sai. Kiểm tra hiện chỉ báo một tài liệu có tham chiếu font nhưng hoàn toàn không nhúng chương trình font nào, khớp với sửa lỗi tương ứng củaValidatePdfUa
Version 1.49.1
Đã sửa (Đã sửa lỗi)
- Đầu ra PDF/A giờ xác thực là PDF/A-1b và PDF/A-1a tuân thủ với veraPDF: luồng ICC profile OutputIntent sRGB được nhúng (tham chiếu bởi
/DestOutputProfile) giờ khai báo đúng số thành phần/Nbắt buộc (3 cho profile RGB dựng sẵn), đúng như ISO 19005-1 6.2.3.2 yêu cầu. Các tài liệu doSaveAsPdfAtạo trước đây thất bại ở xác thực PDF/A-1 nghiêm ngặt vì luồng profile đích không khai báo/N; giá trị này được suy ra từ header của ICC profile, nên profile CMYK hoặc Gray do bên gọi cung cấp cũng nhận đúng số lượng
Version 1.49.0
Đã sửa (Đã sửa lỗi)
ValidatePdfUakhông còn báo thiếu định danh XMP giả trên PDF được gắn thẻ tuân thủ nữa — mã định danh PDF/UA (pdfuaid:part),dc:title, các ngày XMP và/IDcủa trailer giờ được đọc từ byte gốc của tài liệu thay vì bản lưu lại, vốn bỏ qua luồng/MetadataXMP và, với tệp cross-reference-stream, cả/IDcủa trailerValidatePdfUasửa lại kiểm tra nhúng font để một tài liệu đã nhúng toàn bộ font của nó không còn bị báo là có font không nhúng nữa; giờ nó chỉ gắn cờ một tài liệu có tham chiếu font nhưng hoàn toàn không nhúng chương trình font nàoValidatePdfUagiờ chấp nhận một phần tử cấu trúcFormulacó alt text được cung cấp quaActualTextthay vì mụcAlt(ISO 14289-1 §7.7), nhất quán với quy tắcFigurehiện có
Version 1.48.0
Đã thêm (Thêm mới)
- Chọn văn bản bằng lập trình trên
TPdfView:SelectTextRange(theo trang và dải ký tự) vàSetSelection(theo các dải từng trang tường minh) chọn văn bản từ mã, ví dụ để đọc và tô sáng một đoạn; cả hai đều vẽ lại và phátOnSelectionChangekhi lựa chọn thay đổi.SelectionRangesđọc lựa chọn hiện tại dưới dạng các dải ký tự theo trang, cònSelectionRectanglestrả về các hình chữ nhật của nó trong tọa độ trang để tô sáng tùy biến hoặc cuộn tới
Version 1.47.0
Đã thêm (Thêm mới)
- Điều hướng field form cho điền form bằng giọng nói, trên cả
TPdflẫnTPdfView:FormFieldTabOrder,FocusedFormFieldIndex,FocusFormField,FocusNextFormField,FocusPreviousFormField,ClearFormFieldFocusvàFocusedFormFieldText. Chúng di chuyển con trỏ field logic trên các field widget của trang theo thứ tự tab (vòng lại ở cuối), nên một ứng dụng đọc hỗ trợ có thể đi qua form, thông báo từng field quaFormFieldInfo[Index].AlternateName(tooltip /TU), và điền nó quaFormField[Index] TPdfView.OnFormFieldFocusChangeevent, phát ra khi con trỏ field di chuyển (mang theo chỉ số field mới, hoặc -1 khi bị xóa)
Version 1.46.0
Đã thêm (Thêm mới)
- Luồng nội dung để đọc hỗ trợ nghe-đọc:
TPdf.ReadableContent,TPdf.ReadablePageContent,TPdf.DocumentReadableContentvàTPdfView.ReadableContenttrả về một danh sách có thứ tự các mụcTPdfContentFragmentngữ nghĩa, mỗi mục mang theo văn bản cần nói (glyph thật, hoặcActualText/Alt cho figure), một loại fragment (heading có cấp, paragraph, figure, list item, table cell, link, plain), ngôn ngữ, trang bắt đầu từ 1, cùng các hình chữ nhật tô sáng theo khối và theo từng dòng. PDF có thẻ được tuyến tính hóa theo thứ tự đọc logic từ cây cấu trúc; các trang không có thẻ sẽ rơi về thứ tự render để bất kỳ tài liệu nào cũng có thể được đọc to - Đồng bộ tô sáng khi đọc trên
TPdfView:SetReadingHighlight,ClearReadingHighlightvà thuộc tính công khaiReadingHighlightColortô sáng khối đang được đọc, đè lên lớp phủ tìm kiếm và chọn - Các kiểu công khai mới
TPdfContentFragment,TPdfContentFragments,TPdfReadableContent,TPdfContentFragmentKindvàTPdfReadingOrderSource, cùng helper mớiClassifyStructType
Version 1.45.0
Đã thêm (Thêm mới)
ValidatePdfUagiờ cũng duyệt cây cấu trúc gắn thẻ đang hoạt động và báo ba vi phạm nội dung độ tin cậy cao mà quét ở mức byte không thể phát hiện: một phần tửFigurekhông có Alt entry hoặc ActualText (ISO 14289-1, 7.3), một phần tửFormulakhông có thuộc tính Alt (7.7), và một phần tửNotethiếu ID duy nhất (7.9). Ba giá trịTPdfUaValidationIssuemới bộc lộ các lỗi này:pvuaiFigureMissingAlt,pvuaiFormulaMissingAltvàpvuaiNoteMissingId. Việc duyệt cây được bỏ qua với tài liệu không được gắn thẻ- Helper công khai mới
ValidatePdfUaStructureElementsáp dụng các quy tắc cây cấu trúc đó cho một danh sách phần tử phẳng (như trả về bởiTPdf.StructureElements), để có thể chạy các kiểm tra hoặc test đơn vị mà không cần nạp cả tài liệu
Version 1.44.5
Đã sửa (Đã sửa lỗi)
- Kiểm tra nhúng font của
ValidatePdfA(pvaiFontNotEmbedded, ISO 19005-1, 6.3.4) giờ cũng phát hiện các font đơn không nhúng nhưng không có/FontDescriptor, quan trọng nhất là 14 font Type 1 chuẩn (Helvetica, Times, Courier, v.v.) vốn PDF/A yêu cầu phải nhúng mà không có ngoại lệ. Trước đây kiểu font này bị bỏ sót; giờ kiểm tra cũng đếm các dictionary font đơn (/Type1,/TrueType,/MMType1) so với các chương trình font đã nhúng, mô phỏng sửa lỗi PDF/UA ở 1.44.3
Version 1.44.4
Đã sửa (Đã sửa lỗi)
ValidatePdfVTgiờ từ chối các cây DPart ISO 16612-2 §6.5 bị lỗi, nơi/DPartslà mảng tham chiếu phẳng thay vì mảng mảng bắt buộc, hoặc nơi một DPart lá lặp lại trang/Startcủa nó làm/Enddù phạm vi chỉ có một trangValidatePdfVTgiờ kiểm tra tên/NodeNameListnhư các giá trị XML NMTOKEN sau khi mở rộng escape#xxcủa tên PDF, nên các tên cấp phân cấp không hợp lệ được báo quapvviMissingDPartRootthay vì bị chấp nhận như cấu trúc DPart dùng được
Version 1.44.3
Đã sửa (Đã sửa lỗi)
- Kiểm tra nhúng font của
ValidatePdfUa(pvuaiFontNotEmbedded, ISO 14289-1, 7.21.4) giờ cũng phát hiện các font đơn không nhúng nhưng không có/FontDescriptor, quan trọng nhất là 14 font Type 1 chuẩn (Helvetica, Times, Courier, v.v.) mà PDF/UA không cho ngoại lệ nhúng. Trước đây kiểu font này bị bỏ sót và một tài liệu dùng nó có thể bị báo là tuân thủ; giờ kiểm tra cũng đếm các dictionary font đơn (/Type1,/TrueType,/MMType1) so với các chương trình font đã nhúng
Version 1.44.2
Đã sửa (Đã sửa lỗi)
ValidatePdfVTgiờ giữ markerpdfvtid:GTS_PDFVTVersioncó mặt nhưng không nhận ra làpvcUnknownthay vì hạ nó xuốngpvcNone. Điều này giữ cho các chuỗi cấp tệp không hợp lệ nhưPDF/VT-2svẫn phân biệt được với tài liệu không mang marker PDF/VT; PDF/VT-2s được xác định bởi header luồng MIME trong ISO 16612-2 Annex A, chứ không phải bởi marker XMP của tệp PDF- Kiểm tra
/DPartRootgiờ xác thực semantics cây ISO 16612-2 §6.5 chặt hơn:/DPartRootNodevà/NodeNameListphải mô tả đúng độ sâu DPart thực tế, liên kết cha của DPart phải tạo thành một cây,/Startvà/DPartsloại trừ lẫn nhau, và mỗi/DPartcủa trang phải trỏ tới DPart lá bao phủ nó theo cùng thứ tự depth-first như cây trang
Version 1.44.1
Đã sửa (Đã sửa lỗi)
SaveAsPdfVTgiờ ghi một Document Part Hierarchy tối thiểu theo ISO 16612-2 §6.5 khi PDF nguồn không có/DPartRootdùng được. Cây được tạo ra liên kết mọi trang qua/DPart, giữ lại một hierarchy hợp lệ đã có, và để metadata recipient/DPM phong phú hơn cho quy trình gọiValidatePdfVTgiờ kiểm tra cấu trúc DPart dùng được, đọc các giá trị XMP PDF/VT từ cả thuộc tính RDF lẫn văn bản phần tử, và bắt buộc pairing PDF/VT-to-PDF/X chính xác: PDF/VT-1 cần PDF/X-4, còn PDF/VT-2 cần PDF/X-4p, PDF/X-5g hoặc PDF/X-5pgTPdfVTSaveOptions.Conformance = pvc2không còn ghi marker PDF/VT-2 một tệp đơn không hợp lệ nữa. Trình ghi một tệp đơn chuẩn hóa đầu ra thành PDF/VT-1 vì PDF/VT-2 đòi hỏi semantics file-set
Version 1.44.0
Đã thêm (Thêm mới)
ValidatePdfUagiờ cũng báo các vi phạm PDF/UA ở mức nội dung có thể kiểm bằng byte ngoài các marker định dạng tệp: một chương trình font không được nhúng (ISO 14289-1, 7.21.4), một font thiếu/ToUnicodeCMap khi không có encoding font đơn được miễn (7.21.7), và một tài liệu có annotation nhưng không khai báo thứ tự tab trang/Tabs /S(7.18.3)- Ba giá trị
TPdfUaValidationIssuemới -pvuaiFontNotEmbedded,pvuaiFontMissingToUnicodevàpvuaiMissingTabsOrder- đượcValidatePdfUavà báo cáo preflight bộc lộ. Đây là các heuristic thô, dùng làm gợi ý preflight hơn là một xác minh ISO 14289-1 đầy đủ
Version 1.43.1
Đã sửa (Đã sửa lỗi)
SaveAsPdfUagiờ bắt buộc các mục catalog theo ISO 14289-1, 7.1:/ViewerPreferences/DisplayDocTitle truevà/MarkInfo/Marked true/Suspects falsengay cả khi tài liệu nguồn đã có các dictionary đó nhưng thiếu hoặc mâu thuẫn giá trị. Trước đây các marker chỉ được chèn khi dictionary hoàn toàn vắng mặt, nên một nguồn có, chẳng hạn,/ViewerPreferenceskhông cóDisplayDocTitlehoặc/MarkInfovới/Marked falsesẽ vòng qua thành một tệp không tuân thủ- Các key hiện có trong dictionary
/ViewerPreferenceshoặc/MarkInfosẵn có được giữ nguyên, và một dictionary được cung cấp dưới dạng tham chiếu gián tiếp sẽ được giải tham chiếu trước khi áp dụng các key bắt buộc
Version 1.43.0
Đã thêm (Thêm mới)
ValidatePdfAgiờ áp dụng các quy tắc PDF/A-2 / PDF/A-3 cho file nhúng và file liên kết, cũng như văn bản Level U. File nhúng vẫn bị từ chối cho PDF/A-1; với PDF/A-3, một file nhúng thiếu key/AFRelationshipbắt buộc (ISO 19005-3 Annex E) sẽ bị gắn cờ, trong khi đính kèm PDF/A-2 được cho phép (không xác minh đệ quy mức tuân thủ của chính chúng). Một issuepvaiUnicodeMappingMissingmới báo tài liệu PDF/A-2u hoặc PDF/A-3u có font không mang ánh xạ/ToUnicode(ISO 19005-2 6.2.11.7). Transparency và optional content vẫn chỉ bị gắn cờ cho PDF/A-1
Version 1.42.0
Đã thêm (Thêm mới)
- PDF/A-2 (ISO 19005-2) và PDF/A-3 (ISO 19005-3) giờ được hỗ trợ ở cả ba mức tuân thủ — a, b và u — bởi
SaveAsPdfA,ValidatePdfAvà thuộc tínhPdfAConformance. EnumTPdfAConformancethêmpac2a,pac2u,pac3avàpac3u(PDF/A-1 không có Level u). Khi lưu sẽ ghipdfaid:partkhớp (2 hoặc 3) vàpdfaid:conformance(A, B hoặc U), giữ subtypeGTS_PDFA1OutputIntent mà ISO 19005-2 giữ lại để tương thích. Một yêu cầu Level A vẫn hạ xuống Level B tương ứng (ở bất kỳ part nào) khi tài liệu thiếu cấu trúc gắn thẻ mà level đó cần
Version 1.41.0
Đã thêm (Thêm mới)
ValidatePdfAnow detects content-level PDF/A violations that marker injection cannot repair, on top of the structural markers it already reported: JavaScript and other forbidden actions, additional-actions (/AA), embedded files,LZWDecode, transparency (soft masks and transparency groups), optional content (/OCProperties), forbidden annotation subtypes (FileAttachment, Sound, Movie, 3D, Screen), AcroForm/NeedAppearances trueand/XFA, fonts whose descriptors lack an embedded font program, and a Level A claim made without the tagged structure required by ISO 19005-1 6.8. The transparency, optional-content and embedded-file checks apply only to PDF/A-1 (these features are permitted in PDF/A-2 and PDF/A-3). Các giá trịTPdfAValidationIssuemới sẽ phản ánh từng trường hợp; các giá trị hiện có không đổi
Version 1.40.3
Đã sửa (Đã sửa lỗi)
SaveAsPdfAgiờ loại bỏ mọi mã hóa của tài liệu nguồn trước khi tạo đầu ra PDF/A. ISO 19005-1 6.1.3 cấm key trailer/Encrypt, nhưng đường dẫn lưu trước đây vẫn giữ security handler của nguồn, nên lưu một tài liệu được mã hóa dưới dạng PDF/A đã tạo ra một tệp được mã hóa, không tuân thủ. Lưu PDF/A bây giờ giải mã tài liệu trước. Tài liệu không mã hóa không bị ảnh hưởng
Version 1.40.2
Đã sửa (Đã sửa lỗi)
- Ngăn
SaveAsPdfAđưa ra tuyên bố tuân thủ PDF/A Level A sai. Khi yêu cầu Level A (pac1a) nhưng tài liệu nguồn thiếu các marker cấu trúc gắn thẻ mà ISO 19005-1 6.8 yêu cầu - một/StructTreeRoottrong catalog và một dictionary/MarkInfovới/Marked true- tệp được lưu giờ được nhận dạng là Level B tương ứng (pdfaid:conformance=B) thay vì khẳng định Level A. Đầu ra PDF/A-1b chỉ thuần thị giác không bị ảnh hưởng
Version 1.40.1
Đã sửa (Đã sửa lỗi)
- Siết kiểm tra tuân thủ phiên bản PDF để hành động
SetOCGState(set-optional-content-group-state) được nhận là tính năng PDF 1.5. Lưu sang mục tiêu PDF 1.2, 1.3 hoặc 1.4 có chứa hành độngSetOCGStategiờ bị từ chối để khớp với ISO 32000-1 (Table 198); trước đây một hành động như vậy có thể lọt qua đầu ra phiên bản thấp hơn. Hành độngSetStatecũ, đã lỗi thời của PDF 1.2 vẫn được chấp nhận từ PDF 1.2 trở đi
Version 1.40.0
Đã thêm (Thêm mới)
- Bind API
FPDFPageObj_AddExistingMark()từ upstream, dùng để gắn một content mark có sẵn vào một page object. Khi các page object liên tiếp cùng chia sẻ một mark, PDF được lưu sẽ gộp chúng thành một mark duy nhất trải trên tất cả; các object không liên tiếp sẽ nhận bản sao riêng - Bind API
FPDFTextObj_SetFontSize()từ upstream để thay đổi cỡ điểm của một text object hiện có, bổ sung cho bindingFPDFTextObj_GetFontSize()sẵn có
Đã thay đổi (Thay đổi)
- Làm mới các DLL runtime PDFium đi kèm (Win32 và Win64, bản dựng standard và V8) lên snapshot upstream ngày 2026-06-02
Version 1.39.53
Đã thay đổi (Thay đổi)
- Thay đổi các demo Delphi
PDFViewer,SplitViewvàMultiPageViewerđể mở tài liệu ở chế độZoom to Pagetheo mặc định - Lần render đầu tiên giờ khít toàn bộ trang vào bề mặt trình xem trước khi người dùng chọn mức zoom thủ công
- Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.53
Version 1.39.52
Đã thay đổi (Thay đổi)
- Tăng cường
Demo\Lazarus\CreatePDFđể sample giới thiệu giờ tạo một PDF hai trang với các đường vector, nội dung bảng, một ảnh nhúng, một annotation văn bản, văn bản xoay và một walkthrough xây dựng tài liệu rõ hơn - Thêm các trang
README.htmlhoàn thiện cho mọi thư mục demo Delphi, C++Builder và Lazarus, thay thế phần README demo chỉ còn văn bản bằng một hướng dẫn đọc trên trình duyệt - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.52
Version 1.39.51
- Tăng cường tóm tắt batch của
Demo\Delphi\PreflightReportClivới tổng trạng thái tiêu chuẩn cho kết quả Pass, Action required và Review trên các tiêu chuẩn đã chọn - Các hàng theo từng tệp giờ gồm số lượng action required và review trong tóm tắt TXT / HTML / JSON / CSV, giúp artifact CI dễ xem xét mà không cần mở từng báo cáo đã tạo
- Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.51
Version 1.39.50
- Tăng cường chế độ batch theo thư mục của
Demo\Delphi\PreflightReportCliđểbatchdir=folderthu thập các đường dẫn PDF tìm được, sắp xếp chúng rồi tạo báo cáo theo thứ tự ổn định - Quét thư mục đệ quy giờ tạo ra thứ tự báo cáo và hàng tóm tắt có thể lặp lại, trong khi xử lý tường minh
batch=list.txtvẫn giữ nguyên thứ tự của tệp danh sách - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.50
Version 1.39.49
- Tăng cường tóm tắt batch của
Demo\Delphi\PreflightReportCliđể ghi lại thiết lập chạy: loại nguồn, đường dẫn nguồn, trạng thái đệ quy, thư mục đầu ra, định dạng báo cáo, các tiêu chuẩn đã chọn và chế độfailon= - Tóm tắt JSON giờ có object
run, tóm tắt TXT và HTML có mục thiết lập chạy, còn các hàng CSV lặp lại cùng các cột kiểm tra đó cho pipeline bảng tính và CI - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.49
Version 1.39.48
- Tăng cường đặt tên đầu ra batch của
Demo\Delphi\PreflightReportCliđể các tên tệp đầu vào trùng nhau cùng dùng mộtoutdir=không còn ghi đè báo cáo đã tạo của nhau - Các lần chạy batch giờ thêm hậu tố
-2,-3và các hậu tố sau khi một đường dẫn báo cáo đã tạo ra đã được gán trong cùng một lần chạy, còn tóm tắt ghi lại đường dẫn báo cáo cuối cùng đã tránh va chạm - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.48
Version 1.39.47
- Tăng cường tóm tắt batch của
Demo\Delphi\PreflightReportCliđể đầu ra TXT và JSON giờ gồm tổng số gộp cho tổng tệp, tệp đã xử lý, tệp lỗi, issue và các lần khớpfailon= - Tóm tắt CSV vẫn là một bảng hàng thuần túy cho người tiêu dùng hiện có, trong khi tóm tắt HTML vẫn hiển thị cùng các chỉ số gộp đó ở phần đầu bảng điều khiển
- Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.47
Version 1.39.46
- Tăng cường
Demo\Delphi\PreflightReportClivớisummary=batch.html/.htmđể các lần chạy batch có thể xuất một bảng điều khiển đọc được trên trình duyệt bên cạnh các manifest TXT / CSV / JSON - Tóm tắt HTML hiển thị các chỉ số tổng, đã xử lý, lỗi, issue và
failon=rồi liệt kê từng đầu vào với liên kết báo cáo, trạng thái, số lượng và văn bản lỗi - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.46
Version 1.39.45
- Tăng cường
Demo\Delphi\PreflightReportClivớibatchdir=foldervàrecursiveđể script có thể quét thư mục PDF trực tiếp mà không cần viết tệp danh sách trước - Chế độ batch theo thư mục tái sử dụng hành vi
outdir=,summary=,standards=vàfailon=từ chế độ batch theo danh sách, trong khi quét không đệ quy chỉ xử lý thư mục được chọn vàrecursivebao gồm cả thư mục con - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.45
Version 1.39.44
- Tăng cường
Demo\Delphi\PreflightReportClivớisummary=batch.csv|json|txtđể các lần chạy batch có thể xuất một manifest đọc được bởi máy bên cạnh các báo cáo theo từng tệp - Tóm tắt batch gồm từng đường dẫn đầu vào, đường dẫn báo cáo, trạng thái, số tiêu chuẩn, số pass, số issue, trạng thái khớp
failon=và văn bản lỗi cho các job CI và script ngoài - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.44
Version 1.39.43
- Tăng cường
Demo\Delphi\PreflightReportClivớibatch=list.txtvàoutdir=reportsđể script có thể tạo báo cáo preflight cho một danh sách tệp PDF trong một lần chạy - Chế độ batch bỏ qua các dòng trống và dòng chú thích
#, lấy tên báo cáo.preflight.<ext>từ tệp PDF đầu vào, tiếp tục sau lỗi từng tệp, và tóm tắt các tệp đã xử lý và bị lỗi trước khi trả về - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.43
Version 1.39.42
- Tăng cường
Demo\Delphi\PreflightReportClivớifailon=none|issues|action|reviewđể các job CI có thể biến kết quả preflight đã tạo thành mã thoát xác định - CLI giờ trả về mã thoát 2 khi một quy tắc
failon=được chọn khớp sau khi tệp báo cáo và PDF báo cáo đính kèm tùy chọn đã được tạo, trong khi lỗi chạy vẫn trả về mã thoát 1 - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.42
Version 1.39.41
- Tăng cường
Demo\Delphi\PreflightReportClivớiattach=output.pdfđể một báo cáo preflight đã tạo có thể được nhúng như một tệp đính kèm ở mức tài liệu trong một bản sao PDF mới - CLI giữ lại tệp báo cáo TXT / HTML / Markdown / JSON / CSV đã tạo trên đĩa và từ chối đính kèm trở lại đường dẫn PDF đầu vào gốc, giảm nguy cơ ghi đè nhầm
- Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.41
Version 1.39.40
- Thêm
Demo\Delphi\PreflightReportCli, một console companion Delphi để tạoFPdfPreflightReportcó thể được script hóa mà không cần mở trình xem - CLI hỗ trợ tạo sample không cần đối số cùng các đối số đầu vào / đầu ra, mật khẩu tùy chọn, các định dạng đầu ra
text/html/md/json/csv, và lọcstandards=cho PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R và PDF/VT - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.40
Version 1.39.39
- Tăng cường
FPdfPreflightReportvớiTPdfPreflightReport.ToMarkdownvàSaveMarkdownToFileđể báo cáo preflight có thể xuất dưới dạng Markdown thân thiện với trình theo dõi issue - Cập nhật các sample
PreflightReportDelphi, C++Builder và Lazarus với chuyển đổi xem trước Markdown và hành động Save MD bên cạnh workflow TXT / HTML / JSON / CSV sẵn có - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.39
Version 1.39.38
- Tăng cường các sample
SecurityAuditDelphi, C++Builder và Lazarus với xuất báo cáo audit JSON bên cạnh workflow TXT save / copy sẵn có - Báo cáo JSON chứa
format,generatedAt,summary,findingCountvà các hàngfindingscó cấu trúc với các trường severity, area và detail - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.38
Version 1.39.37
- Tăng cường
FPdfPreflightReportvớiTPdfPreflightReport.ToCsvvàSaveCsvToFileđể báo cáo preflight có thể xuất dưới dạng CSV thân thiện với bảng tính - Cập nhật các sample
PreflightReportDelphi, C++Builder và Lazarus với chuyển đổi xem trước CSV và hành động Save CSV bên cạnh workflow TXT / HTML / JSON sẵn có - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.37
Version 1.39.36
- Tăng cường
FPdfPreflightReportvớiTPdfPreflightReport.IssueCategoryCountscùng các kiểu tái dùngTPdfPreflightIssueCategoryCountvàTPdfPreflightIssueCategoryCountsđể gom các issue ở mức marker theo danh mục - Cập nhật
TPdfPreflightReport.ToText,ToHtmlvàToJsonđể đầu ra PreflightReport được tạo ra gồm tóm tắt số lượng issue theo danh mục bên cạnh các hàng theo từng tiêu chuẩn và khuyến nghị chi tiết cho issue - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.36
Version 1.39.35
- Đổi tên sample
PrintDialogmở rộng thànhPrintPreferencestrên Delphi, C++Builder và Lazarus để tên demo giờ khớp với workflow tùy chọn in của tác giả PDF, in N-up, lọc odd / even, grayscale, viền ô và ánh xạ duplex - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.35
Version 1.39.34
- Tăng cường
Demo\Delphi\PrintPDFvới tải PDF kéo-thả và ghi lại workflowDemo\CBuilder\PrintPDFhiện có bên cạnh các sample PrintPDF Delphi và Lazarus - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.34
Version 1.39.33
- Thêm
Demo\CBuilder\SplitView, hoàn thiện ma trận sample SplitView trên Delphi, C++Builder và Lazarus - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.33
Version 1.39.32
- Thêm
Demo\Lazarus\SplitView, mang so sánh PDF song song sang Lazarus với bố cục hai hoặc ba khung, điều hướng theo khung đang hoạt động, lệnh đồng bộ, preset zoom và xoay - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.32
Version 1.39.31
- Thêm
Demo\Lazarus\PrintPDF, mang workflow in PDF tiêu chuẩn sang Lazarus với điều hướng xem trước, phạm vi trang, số bản, chế độ collate, tiến trình và hủy - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.31
Version 1.39.30
- Thêm mới
Demo\Lazarus\FontProperties, completing the FontThuộc tính sample matrix across Delphi, C++Builder, and Lazarus - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.30
Version 1.39.29
- Thêm mới
Demo\CBuilder\FontProperties, bringing indexed character and font metadata inspection to C++Builder alongside the Delphi sample - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.29
Version 1.39.28
- Thêm
Demo\Delphi\ExtractTextPages, hoàn thiện ma trận sample trích xuất văn bản theo từng trang trên Delphi, C++Builder và Lazarus - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.28
Version 1.39.27
- Thêm
Demo\Lazarus\PrintDialog, hoàn thiện ma trận sample PrintDialog trên Delphi, C++Builder và Lazarus - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.27
Version 1.39.26
- Thêm
Demo\CBuilder\PrintDialog, mang workflow in N-up và tùy chọn in của tác giả PDF sang C++Builder bên cạnh sample Delphi - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.26
Version 1.39.25
- Thêm
Demo\CBuilder\ViewerInteractionLab, hoàn thiện ma trận sample ViewerInteractionLab trên Delphi, C++Builder và Lazarus - Cập nhật workflow build thư viện và output gói C++Builder Win64 để các phương thức tương tác viewer của
TPdfViewliên kết đúng trong demo Win64 - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.25
Version 1.39.24
- Thêm
Demo\Lazarus\ViewerInteractionLab, mang workflow tương tác viewer tập trung sang Lazarus bên cạnh sample Delphi - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.24
Version 1.39.23
- Thêm
Demo\Lazarus\SearchAndSelect, hoàn thiện ma trận sample SearchAndSelect trên Delphi, C++Builder và Lazarus - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.23
Version 1.39.22
- Thêm
Demo\CBuilder\ContentExtractionLabvàDemo\Lazarus\ContentExtractionLab, mang workflow trích xuất nội dung nhiều danh mục sang tất cả IDE demo được hỗ trợ - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.22
Version 1.39.21
- Tăng cường
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReportvàDemo\CBuilder\PreflightReportvới bộ chọn định dạng xem trước để người dùng có thể kiểm tra đầu ra text hoặc JSON trước khi lưu báo cáo - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.21
Version 1.39.20
- Thêm xuất JSON cho
FPdfPreflightReportquaTPdfPreflightReport.ToJsonvàSaveJsonToFile, tạo ra tóm tắt có thể đọc bằng máy, trạng thái / ưu tiên theo từng tiêu chuẩn, hành động tiếp theo và chi tiết issue - Cập nhật
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReportvàDemo\CBuilder\PreflightReportvới hành động Save JSON bên cạnh xuất TXT / HTML - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.20
Version 1.39.19
- Tăng cường
FPdfPreflightReportvớiTPdfPreflightStatus, các danh mục issue, độ ưu tiên theo từng tiêu chuẩn và hướng dẫn hành động tiếp theo trong báo cáo TXT / HTML - Cập nhật
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReportvàDemo\CBuilder\PreflightReportđể hiển thị trạng thái, độ ưu tiên, số lượng issue và hành động tiếp theo trong lưới tóm tắt - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.19
Version 1.39.18
- Thêm
Demo\Lazarus\SecurityAudit, hoàn thiện ma trận demo Delphi, C++Builder và Lazarus cho workflow audit bề mặt rủi ro PDF chỉ đọc - Sample Lazarus liệt kê quyền, đính kèm, hành động JavaScript, annotation link URI / Launch, web link, chữ ký, trạng thái XFA, khả năng helper V8 / XFA, và callback tính năng không được hỗ trợ, rồi lưu hoặc sao chép danh sách phát hiện thành báo cáo TXT
- Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.18
Version 1.39.17
- Thêm
Demo\CBuilder\SecurityAudit, mang workflow audit bề mặt rủi ro PDF chỉ đọc sang C++Builder bên cạnh sample Delphi hiện có - Sample C++Builder liệt kê quyền, đính kèm, hành động JavaScript, annotation link URI / Launch, web link, chữ ký, trạng thái XFA, khả năng helper V8 / XFA, và callback tính năng không được hỗ trợ, rồi lưu hoặc sao chép danh sách phát hiện thành báo cáo TXT
- Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.17
Version 1.39.16
- Thêm
Demo\CBuilder\SearchAndSelect, mang workflow viewer SearchAndSelect độc lập sang C++Builder bên cạnh sample Delphi hiện có - Sample C++Builder tạo hoặc mở PDF, liệt kê các khớp trên mọi trang với xem trước số trang / chỉ mục ký tự, hỗ trợ Previous / Next và điều hướng nhấp đúp, và tô sáng các khớp trên trang hiện tại bằng
HighlightSearchText - Nó cũng bộc lộ
AllowUserTextSelection,SelectedText,SelectAll,CopySelectionToClipboard,ClearSelection,OnSelectionChangevà các tùy chọnDisplayModedạng trải; metadata phiên bản giờ báo 1.39.16
Version 1.39.15
- Thêm
Demo\CBuilder\WatermarkStamp, hoàn thiện ma trận demo Delphi, Lazarus và C++Builder cho workflow watermark và stamp dùng lại từ Form XObject - Sample C++Builder tạo PDF đích và PDF stamp, tái sử dụng trang stamp qua
CreateXObjectFromPage, áp dụng biến đổiTPdfMatrix, và lưu watermark căn giữa, stamp góc và nhãn số trang - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.15
Version 1.39.14
- Thêm
Demo\Lazarus\WatermarkStamp, mang workflow watermark và stamp dùng lại từ Form XObject sang Lazarus - Sample Lazarus tạo PDF đích và PDF stamp, tái sử dụng trang stamp qua
CreateXObjectFromPage, áp dụng biến đổiTPdfMatrix, và lưu watermark căn giữa, stamp góc và nhãn số trang - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.14
Version 1.39.13
- Thêm
Demo\CBuilder\PreflightReport, hoàn thiện ma trận demo Delphi, Lazarus và C++Builder cho workflowFPdfPreflightReportdùng lại - Sample C++Builder dùng
FPdfPreflightReport.hppđể tạo tóm tắt tiêu chuẩn, xem trước báo cáo TXT, file báo cáo TXT / HTML và hành vi Open Last Report - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.13
Version 1.39.12
- Thêm
Demo\Lazarus\PreflightReport, mang workflow báo cáo preflight cho PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R và PDF/VT sang Lazarus - Sample Lazarus có thể mở hoặc tạo PDF, chọn tiêu chuẩn đích, xem trước các hàng tóm tắt và đầu ra báo cáo TXT, lưu báo cáo TXT / HTML, và mở báo cáo được lưu gần đây nhất
- Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.12
Version 1.39.11
- Tăng cường
Demo\Delphi\SearchAndSelectvới danh sách kết quả tìm kiếm trên mọi trang ghi lại số trang, chỉ mục ký tự và văn bản xem trước - Thêm điều hướng Previous / Next cho khớp và nhảy tới kết quả bằng nhấp đúp trong khi vẫn giữ hành vi
HighlightSearchTexttrên trang hiện tại - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.11
Version 1.39.10
- Tăng cường
Demo\Delphi\SecurityAuditvới hành động Save Report và Copy Report để xuất bản tóm tắt hiện tại và các hàng phát hiện thành báo cáo audit TXT - Demo giờ xóa trạng thái xuất báo cáo khi panel audit được reset, giữ cho báo cáo đã sao chép hoặc đã lưu khớp với các phát hiện đang hiển thị
- Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.10
Version 1.39.9
- Tăng cường
Demo\Delphi\ContentExtractionLabvới lưu PDF nguồn, sao chép báo cáo vào clipboard, và các hành động chọn danh mục tất cả / không có - Demo giờ vô hiệu hóa báo cáo hiện tại khi lựa chọn danh mục thay đổi, nên các bản xuất TXT / JSON phản ánh đúng phạm vi trích xuất đang hiển thị
- Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.9
Version 1.39.8
- Thêm
Demo\Delphi\ContentExtractionLab, một sample workflow trích xuất nội dung thống nhất cho metadata tài liệu, văn bản trang, object trang, ảnh, đính kèm, liên kết, annotation, bookmark và số liệu font / ký tự - Sample có thể mở một PDF có sẵn hoặc tạo một PDF tổng hợp với nội dung văn bản, ảnh, đính kèm và annotation, rồi tạo hàng tóm tắt và báo cáo TXT / JSON chi tiết
- Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.8
Version 1.39.7
- Thêm
Lib\FPdfPreflightReport.pas, một helper báo cáo dùng lại bọcValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfRvàValidatePdfVTvào một objectTPdfPreflightReport - Thêm
Demo\Delphi\PreflightReport, một sample workflow mở hoặc tạo PDF, chọn tiêu chuẩn đích, xem trước hàng tóm tắt và khuyến nghị issue, rồi lưu báo cáo TXT hoặc HTML - Các báo cáo được tạo ra mô tả rõ ràng ranh giới xác thực ở cấp marker sẵn có để ứng dụng có thể ghép chúng với các công cụ preflight ở cấp nội dung chuyên dụng khi cần
- Cập nhật
TPdf.AboutInfo, metadata gói Lazarus, danh sách project gói và metadata phiên bản trình cài đặt để báo 1.39.7
Version 1.39.6
- Thêm
Demo\Delphi\SearchAndSelect, một sample workflow viewer tập trung cho tô sáng tìm kiếm, chọn văn bản, xem trước văn bản được chọn, sao chép, xóa và các chế độ hiển thị trải - Sample trình diễn
HighlightSearchText, các tùy chọn tìm kiếm khớp chữ hoa / thường và khớp toàn bộ từ,AllowUserTextSelection,SelectedText,SelectAll,CopySelectionToClipboardvàClearSelectionmà không thêm API thư viện mới - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.6
Version 1.39.5
- Mở rộng
Demo\Delphi\ViewerInteractionLabthành sample UX viewer kiểu SearchAndSelect vớiHighlightSearchText, các tùy chọn khớp chữ hoa / thường và khớp toàn bộ từ, xem trước văn bản được chọn, cùng các điều khiển chọn / clipboard sẵn có - Mở rộng
Demo\Delphi\PrintDialogđể kiểm tra các tùy chọn in của tác giả PDF:PrintCopies,PrintPageRanges,PrintScaling,PrintPaperHandlingvà ánh xạ duplex hiển thịSetPdfPrintPaperHandlingDevMode - Thêm
Demo\Delphi\SecurityAudit, một sample rủi ro bề mặt chỉ đọc liệt kê quyền, đính kèm, JavaScript tài liệu, liên kết URI / Launch, web link, chữ ký, trạng thái XFA và khả năng helper V8 / XFA - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.5
Version 1.39.4
- Thêm
Demo\CBuilder\ImageToPDFvàDemo\Lazarus\ImageToPDF, hoàn thiện ma trận sample ImageToPDF trên Delphi, C++Builder và Lazarus - Các sample mới trình diễn chọn nhiều ảnh, xem trước ảnh đã chọn, một trang PDF cho mỗi ảnh, định cỡ trang A4 portrait / landscape, co giãn ảnh ở giữa, tiến trình theo từng ảnh và mở PDF đã tạo sau khi lưu
- Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.4
Version 1.39.3
- Thêm
Demo\CBuilder\BatchExport, mang workflow xuất hàng loạt PDF sang JPG sang C++Builder bên cạnh các sample Delphi và Lazarus hiện có - Sample trình diễn
LoadCustomDocument,IPdfCancellationTokenSource, đầu vàoTFileStreamdạng stream, tiến trình theo từng tệp và từng trang, xử lý hủy, đầu vào DPI / chất lượng / mật khẩu, và mở thư mục đầu ra sau khi hoàn tất - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.3
Version 1.39.2
- Thêm
Demo\Delphi\WatermarkStamp, một sample workflow Form XObject có thể chạy được, tạo một PDF đích và PDF stamp dùng lại, rồi áp dụng watermark căn giữa, stamp góc trên phải và nhãn số trang trên mọi trang - Sample trình diễn
CreateXObjectFromPage,InsertFormObjectFromXObject,TPdfMatrixvàFPDFPageObj_SetMatrixmà không thêm API thư viện mới - Cập nhật
Docs\en-us\Examples.htmlđể dùng mẫuTPdfMatrix.Handlehiện hành khi truyền ma trận choFPDFPageObj_SetMatrix - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.2
Version 1.39.1
- Thêm
Demo\Delphi\ViewerInteractionLab, một sampleTPdfViewtập trung cho chế độ hiển thị, chế độ khít, màu trang, xoay, chọn văn bản của người dùng, hành động clipboard và phản hồi tọa độDeviceToPage - Thêm
Demo\CBuilder\StandardsLab/Demo\Lazarus\StandardsLabđể người dùng Lazarus có thể chạy workflow xác thực PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R và PDF/VT cùng đầu ra marker - Liệt kê các unit standards trong
Lib\37.0\PDFiumPas.dprojvàLib\FPC\PDFiumLaz.lpkvà sửa build demo DelphiSplitViewbằng cách loại bỏ importWinapi.ShellAPItrùng lặp - Sửa các chặn batch-build demo Delphi trong
BatchExport,PDFViewer,MultiPageViewervàSplitViewmà không thay đổi hành vi runtime của chúng - Sửa khả năng tương thích batch-build demo C++Builder trong
PDFViewervàMultiPageViewerbằng cách thaynullptrbằngNULLcho chế độ project hiện tại - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.1
Version 1.39.0
- Thêm
Demo\Delphi\StandardsLab, một sample workflow standards có thể chạy được, tải hoặc tạo PDF, chạyValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfRvàValidatePdfVT, và hiển thị mức tuân thủ phát hiện được, trạng thái pass/fail và số lượng issue trong một lưới - Các nút lưu của StandardsLab gọi
SaveAsPdfA,SaveAsPdfUa,SaveAsPdfE,SaveAsPdfX,SaveAsPdfRvàSaveAsPdfVT, làm cho đầu ra marker chuẩn PDF hiển thị được mà không cần viết harness tùy chỉnh - Cập nhật
TPdf.AboutInfo, metadata gói Lazarus và metadata phiên bản trình cài đặt để báo 1.39.0
Version 1.38.0
TPdfViewlớp phủ tìm kiếm và chọn văn bản giờ dùng pha trộn alpha thật thay vì vẽ mask logic, giữ nguyên nội dung trang bên dưới phần tô sáng- Thêm
SetPdfPrintPaperHandlingDevModeđể ánh xạTPrintPaperHandlingvào các giá trịDEVMODE.dmDuplexcủa Windows:DMDUP_SIMPLEX,DMDUP_HORIZONTALvàDMDUP_VERTICAL TPdfView.SmoothScrollgiờ tạo hoạt ảnh cho các lệnh thanh cuộn dòng / trang theo các đoạn do timer điều khiển; theo dõi thumb vẫn tức thì- Cập nhật
TPdf.AboutInfovà metadata phiên bản trình cài đặt để báo 1.38.0
Version 1.37.0
TPdfgiờ sở hữu một render lock theo từng instance để tuần tự hóa các đườngRenderPage,RenderTile,RenderPageProgressive, tải lại trang và dỡ tài liệu. Render do worker điều khiển qua component dùng chung giờ trở nên thực tế, trong khi ứng dụng vẫn phải phối hợp việc thay đổi và vòng đời tài liệu- Sửa wrapper bitmap zero-copy để từ chối bố cục DIB
TBitmapbottom-up và rơi về buffer do PDFium sở hữu trước khi copy ra, loại bỏ các lỗi corruption stride / access violation trong test render VCL - Siết hành vi chọn của
TPdfView:AllowUserTextSelectionchỉ chặn đầu vào người dùng, các API chọn ở mức mã vẫn vẽ, vàSelectAllđi theo spread đang hiển thị thực tế để trang bìa không còn chọn sang trang 2. Test Delphi, Lazarus và C++Builder đã được mở rộng tương ứng - Cập nhật
TPdf.AboutInfovà metadata phiên bản trình cài đặt để báo 1.37.0
Version 1.36.0
- Kích hoạt khả năng chọn văn bản cho người dùng cuối trong
TPdfView— thuộc tínhAllowUserTextSelectionđược dành sẵn từ v1.17.0 nay điều khiển một luồng kéo chọn hoàn chỉnh. Nhấp chuột trái vào một ký tự văn bản sẽ vào chế độ chọn (hit-test tự động); nhấp chuột trái vào vùng trống vẫn tiếp tục kéo pan như trước. Widget form-fill vẫn có ưu tiên, nên nhấp vào một form field vẫn đặt focus vào field thay vì bắt đầu một vùng chọn - Nhấp đúp chọn từ, nhấp ba lần chọn dòng,
Ctrl+Achọn trang hiện tại (cả hai trang trong các chế độ hiển thị trải trang), vàCtrl+Csao chép vùng chọn vào clipboard của Windows dưới dạngCF_UNICODETEXT Shift+Left/Shift+Rightmở rộng vùng chọn từng ký tự một (tràn sang trang kề bên ở chế độ trải trang);Shift+Home/Shift+Endmở rộng tới mép dòng hiển thị bằng cách dùng chiều cao hộp của ký tự gốc làm ngưỡng dung sai cho cụm dòng, nên các dòng có cỡ chữ lẫn nhau vẫn được gom cụm đúng- Di chuột qua văn bản sẽ đổi con trỏ thành
crIBeam; di chuột ra khỏi văn bản sẽ khôi phục con trỏ mặc định. Trong khi đang kéo chọn văn bản, kéo vào vùng chết rộng 20 pixel ở bất kỳ mép nào của viewer sẽ tự cuộn trang (nhịp 50 ms, 16 px / nhịp, bị giới hạn theo cùng ranh giới mà đường dẫn pan dùng) để vùng chọn có thể mở rộng ra ngoài khung nhìn hiện tại mà không cần thả chuột trước - Chọn qua nhiều trang hoạt động trong các chế độ hiển thị trải trang (
dmTwoPageContinuous,dmTwoPageContinuousWithCover): một cú kéo bắt đầu ở trang trái và kết thúc ở trang phải sẽ chọn một dải liên tục phủ cả hai trang.SelectedTextnối các lát cắt theo từng trang bằng CR/LF để văn bản sau round-trip đọc như nội dung nhiều dòng bình thường - Thuộc tính published mới
SelectionColor(mặc địnhclHighlight, màu chọn hệ thống của Windows) — độc lập vớiHighlightColorvốn tô kết quả tìm kiếm màu vàng. Highlight tìm kiếm và một vùng chọn kéo trực tiếp có thể hiển thị đồng thời trên màn hình mà không xung đột màu - Sự kiện published mới
OnSelectionChangechạy mỗi khi các dải đã hiện thực của vùng chọn thực sự thay đổi — không bao giờ khi áp lại cùng một trạng thái, nên ứng dụng host có thể nối thẳng vào text của status bar hoặc trạng thái bật của nút mà không cần khử rung - API công khai mới trên
TPdfView:HasSelection,SelectionCharCount,SelectedText,ClearSelection,SelectAll,CopySelectionToClipboard. Đây là các điểm vào ở mức mã và luôn hoạt động bất kểAllowUserTextSelection— cờ này chỉ chặn đầu vào của người dùng (mouse, Ctrl+C, Ctrl+A, Shift+arrows), nên các host kiểu kiosk có thể tắt chọn do người dùng điều khiển mà vẫn xây được các nút toolbar "Select All / Copy" gọi cùng API đó - Menu popup chuột phải mặc định
Copy/复制sẽ được tự động gắn vào khi host chưa gánPopupMenuriêng — kiểu chuẩn "select text, right-click, copy" hoạt động ngay. Nhãn được chọn giữa English và Chinese theoSysLocale.PriLangID; host cần bản địa hóa đầy đủ (hoặc một menu phong phú hơn) chỉ cần gánPopupMenuriêng và menu mặc định sẽ bị ẩn đi - Vùng chọn sẽ tự động bị xóa khi chuyển qua
SetPdf,SetPageNumber,SetActive(False), và các trạng tháiDisplayMode, vớiOnSelectionChangechỉ chạy đúng một lần khi vùng chọn trước đó không rỗng. Phân hệ form-fill vẫn giữ ưu tiên — trong lúc một field của form đang được chỉnh sửa, mọi phím tắt chọn văn bản sẽ nhường lại để field nhậnCtrl+C/Ctrl+A/Shift+arrowscho vùng chọn của chính nó - Mở rộng bộ regression của Delphi và Lazarus lên 202 case mỗi bộ, và bộ C++Builder lên 159 case, bao phủ giá trị mặc định, round-trip, hành vi public API, xóa khi đổi trạng thái, kéo chuột (hit-text / hit-blank), click so với drag, chuyển con trỏ IBeam, nhấp đúp chọn từ, nhấp ba lần chọn dòng, phím tắt bàn phím, gắn / hoãn / nhãn popup mặc định, và chọn qua trang ở chế độ trải trang — bao gồm kiểm tra round-trip CR/LF của clipboard
Version 1.35.0
- Thêm hỗ trợ chèn marker PDF/VT (ISO 16612-2:2010): TPdf.SaveAsPdfVT nâng tài liệu hiện tại thành tệp tuân thủ PDF/VT-1 hoặc PDF/VT-2 (phân nhóm PDF cho in biến đổi và in giao dịch). PDF/VT được xây trên PDF/X-4 - ISO 16612-2 §6.2.1 yêu cầu mọi tệp PDF/VT-1 cũng phải tuân thủ PDF/X-4 - nên injector ghi đầy đủ bộ marker PDF/X-4 (XMP
pdfxid:GTS_PDFXVersion = "PDF/X-4", Info/GTS_PDFXVersion (PDF/X-4)và/Trapped, catalog/OutputIntentstham chiếu một OutputIntent dictionary với ICC profile nhúng) cùng với các thuộc tính riêng của PDF/VT - Phần chèn riêng cho PDF/VT bao gồm XMP
pdfvtid:GTS_PDFVTVersion(= "PDF/VT-1" hoặc "PDF/VT-2" theo §6.3 Table 2) vàpdfvtid:GTS_PDFVTModDate(được đồng bộ vớixmp:ModifyDatetheo §6.3 NOTE 1), cộng với mô tả pdfaExtension:schemas khai báo cả namespace pdfxid và pdfvtid (NPES URIhttp://www.npes.org/pdfx/ns/id/vàhttp://www.npes.org/pdfvt/ns/id/). Trailer mang mảng/ID - Thêm TPdf.SaveAsPdfVTToStream cho đầu ra PDF/VT trong bộ nhớ, và rút gọn tùy chọn mặc định
TPdf.SaveAsPdfVT(FileName)tạo PDF/VT-1 với OutputIntent sRGB IEC61966-2.1 đi kèm (3144 bytes, cùng profile với SaveAsPdfA / SaveAsPdfX) và/Trapped /False - Thêm TPdf.ValidatePdfVT: kiểm tra một PDF đang mở về các marker tuân thủ PDF/VT (sự hiện diện của XMP
pdfvtid:GTS_PDFVTVersionvàGTS_PDFVTModDate, giá trịpdfvtid:GTS_PDFVTModDatetrùng vớixmp:ModifyDate, sự hiện diện của định danh nềnpdfxid:GTS_PDFXVersion, sự có mặt của catalog/DPartRoottheo §6.5,/OutputIntentsvới/DestOutputProfile, trailer /ID, trạng thái mã hóa, vàxmp:CreateDate/ModifyDate) rồi trả về TPdfVTValidationResult với mức tuân thủ phát hiện được và tập issue tìm thấy - Thêm thuộc tính TPdf.PdfVTConformance: trả về mức tuân thủ của tài liệu đang mở (pvc1, pvc2, pvcNone hoặc pvcUnknown) mà không cần gọi ValidatePdfVT tường minh
- Các kiểu mới được xuất trong unit mới FPdfPdfvt: TPdfVTConformance (pvcUnknown/None/1/2), TPdfVTTrappedState (ptvUnspecified/True/False/Unknown), TPdfVTValidationResult, TPdfVTValidationIssue, TPdfVTSaveOptions
- Document Part Hierarchy (
DPartRoot/DParttheo cây §6.5) là cấu trúc ở mức ứng dụng phụ thuộc vào ánh xạ recipient / page-range của workflow in dữ liệu biến đổi. SaveAsPdfVT KHÔNG tự sinh cây DPart - ValidatePdfVT sẽ bộc lộ một/DPartRootbị thiếu dưới dạngpvviMissingDPartRootđể bên gọi có thể đưa tệp PDF/VT qua một bước dựng DPart riêng. Các yêu cầu PDF/X-4 ở mức nội dung (nhúng font, transparency, màu được ICC quản lý, cấm OPI / JavaScript / Reference XObject, v.v.) vẫn là trách nhiệm của tác giả tài liệu và pipeline render của PDFium - Cập nhật chuỗi TPdf.AboutInfo để báo phiên bản sản phẩm hiện tại
Version 1.34.0
- Thêm hỗ trợ chèn marker PDF/R-1 (ISO 23504-1:2020): TPdf.SaveAsPdfR nâng tài liệu hiện tại thành tệp tuân thủ PDF/R-1 (phân nhóm PDF cho ảnh raster dùng cho tài liệu quét) bằng cách hậu xử lý PDF cơ sở với một bản cập nhật tăng dần. Phần chèn bao gồm các yêu cầu ở mức định dạng tệp có thể thêm bằng hậu xử lý - comment nhận dạng phiên bản
%PDF-raster-1.0duy nhất được ghi giữa trailer dictionary và từ khóa startxref (§5), catalog dictionary được rút gọn còn danh sách trắng §6.3 (chỉ còn Version / ViewerPreferences / PageLayout / PageMode / AcroForm / Metadata), Document Information Dictionary rút còn danh sách trắng §6.4.3 (chỉ còn Creator / Producer / CreationDate / ModDate), luồng XMP /Metadata của catalog mang bốn mục Table 1 §6.4.4 (xmp:CreatorTool / pdf:Producer / xmp:CreateDate / xmp:ModifyDate), và mảng trailer /ID - Thêm TPdf.SaveAsPdfRToStream cho đầu ra PDF/R trong bộ nhớ, và rút gọn tùy chọn mặc định
TPdf.SaveAsPdfR(FileName)cho trường hợp thường dùng - Thêm TPdf.ValidatePdfR: kiểm tra một PDF đang mở về các marker tuân thủ PDF/R-1 (comment footer
%PDF-raster-x.y, phiên bản header, vắng mặt /Type /ObjStm, tuân thủ danh sách trắng của catalog, tuân thủ danh sách trắng của Info dictionary, có luồng XMP metadata, trailer /ID) rồi trả về TPdfRValidationResult với mức tuân thủ phát hiện được và tập issue tìm thấy - Thêm thuộc tính TPdf.PdfRConformance: trả về mức tuân thủ của tài liệu đang mở (prc1, prcNone hoặc prcUnknown) mà không cần gọi ValidatePdfR tường minh
- Các kiểu mới được xuất trong unit mới FPdfPdfr: TPdfRConformance, TPdfRValidationResult, TPdfRValidationIssue, TPdfRSaveOptions.
TPdfRSaveOptions.Defaultđặt StripInfoOptionalEntries và StripCatalogOptionalEntries thành True, nên injector mặc định tạo một catalog và Info dictionary tuân thủ §6.3 / §6.4.3; bên gọi có thể đặt chúng thành False để giữ lại các entry nguồn (đầu ra khi đó sẽ không thỏa các điều khoản PDF/R đó, nhưng các marker khác vẫn được giữ) - Các yêu cầu ở mức nội dung vẫn là trách nhiệm của PDF nguồn: cấu trúc Contents theo từng trang (§6.5.1), dạng MediaBox
[0 0 w h](§6.5.3), hạn chế filter (§6.2.2 - chỉ FlateDecode, CCITTFaxDecode bitonal, DCTDecode 8-bit gray/RGB), không có object stream (§6.2.4), và bố cục strip theo §6.6. Những thứ này không thể áp đặt bằng hậu xử lý - về mặt cấu trúc PDF/R là một tập con chặt hơn nhiều so với các chuẩn PDF/x khác và đòi hỏi tạo byte nguồn cho đúng. ValidatePdfR bộc lộ các vấn đề ở mức định dạng tệp mà unit này có thể phát hiện; hãy ghép với trình xác thực PDF/R của TWAIN Working Group để kiểm tra đầy đủ ở mức nội dung - Cập nhật chuỗi TPdf.AboutInfo để báo phiên bản sản phẩm hiện tại
Version 1.33.0
- Thêm hỗ trợ chèn marker PDF/X (họ ISO 15930): TPdf.SaveAsPdfX nâng tài liệu hiện tại thành tệp tuân thủ PDF/X-1a:2001, PDF/X-3:2002 hoặc PDF/X-4 bằng cách hậu xử lý PDF cơ sở với một bản cập nhật tăng dần. Phần chèn bao gồm các yêu cầu ở mức định dạng tệp có thể thêm bằng hậu xử lý - luồng metadata XMP mang
pdfxid:GTS_PDFXVersion(vàpdfxid:GTS_PDFXConformancecho PDF/X-1a / PDF/X-3) cùng mô tả pdfaExtension:schemas khớp, Document Information Dictionary được ghi lại với các mục/GTS_PDFXVersion,/GTS_PDFXConformancevà/Trapped, catalog cập nhật với/OutputIntents [N 0 R]tham chiếu một OutputIntent dictionary có/S /GTS_PDFXvà ICC profile nhúng, và mảng trailer/ID - Thêm TPdf.SaveAsPdfXToStream cho đầu ra PDF/X trong bộ nhớ, và rút gọn tùy chọn mặc định
TPdf.SaveAsPdfX(FileName)để tạo PDF/X-4 với OutputIntent sRGB IEC61966-2.1 đi kèm (3144 bytes, giống hệt profile dùng bởi SaveAsPdfA) - Thêm TPdf.ValidatePdfX: kiểm tra một PDF đang mở về các marker tuân thủ PDF/X (định danh XMP pdfxid và sự trùng khớp với giá trị trong Info dictionary, mô tả schema mở rộng pdfxid, mảng /OutputIntents với /DestOutputProfile, sự có mặt của Title, trailer /ID, trạng thái mã hóa, sự có mặt của xmp:CreateDate / xmp:ModifyDate) rồi trả về TPdfXValidationResult với mức phát hiện được và tập issue tìm thấy
- Thêm thuộc tính TPdf.PdfXConformance: trả về mức tuân thủ của tài liệu đang mở (pxc1a, pxc3, pxc4, pxcNone hoặc pxcUnknown) mà không cần gọi ValidatePdfX tường minh. Chuỗi phiên bản XMP được phân tích để phân biệt ba mức tuân thủ
- Các kiểu mới được xuất trong unit mới FPdfPdfx: TPdfXConformance (pxcUnknown/None/1a/3/4), TPdfXTrappedState (ptUnspecified/True/False/Unknown), TPdfXValidationResult, TPdfXValidationIssue, TPdfXSaveOptions.
TPdfXSaveOptions.Defaultnhắm PDF/X-4 với OutputIntent sRGB và/Trapped /False; bên gọi có thể ghi đèConformance, cung cấp blobIccProfileDataCMYK cho workflow in thương mại, hoặc đổiOutputCondition/OutputConditionIdentifier/RegistryNameđể trỏ vào một mục registry đặc tính ICC cụ thể (ví dụ FOGRA39, GRACoL2006_Coated1v2) - Các yêu cầu ở mức nội dung (mọi font đều được nhúng, không JavaScript, không annotation hiển thị, cấm OPI, quy tắc transparency cho PDF/X-1a / PDF/X-3, v.v.) vẫn là trách nhiệm của tác giả tài liệu và pipeline render của PDFium. Ghép ValidatePdfX với công cụ preflight như callas pdfaPilot hoặc Ghent PDF Workgroup Output Suite để xác minh tuân thủ đầy đủ
- Cập nhật chuỗi TPdf.AboutInfo để báo phiên bản sản phẩm hiện tại
Version 1.32.0
- Thêm hỗ trợ chèn marker PDF/E-1 (ISO 24517-1:2008): TPdf.SaveAsPdfE nâng tài liệu hiện tại thành tệp tuân thủ PDF/E-1 bằng cách hậu xử lý PDF cơ sở với một bản cập nhật tăng dần. Phần chèn bao gồm các yêu cầu ở mức định dạng tệp có thể thêm bằng hậu xử lý - luồng metadata XMP mang
pdfe:ISO_PDFEVersion = "PDF/E-1"cùng mô tả pdfaExtension:schemas khớp, Document Information Dictionary được ghi lại với mục bắt buộc/ISO_PDFEVersion (PDF/E-1)theo §5, các khối nối Info-XMP kế thừa từ ISO 19005-1 §6.7 qua §13.1 (dc:title / dc:creator / dc:description / pdf:Producer / pdf:Keywords / xmp:CreateDate / xmp:ModifyDate / xmp:MetadataDate / xmp:CreatorTool), và mảng trailer/IDbắt buộc theo §6.2 - Thêm TPdf.SaveAsPdfEToStream cho đầu ra PDF/E trong bộ nhớ và rút gọn tùy chọn mặc định
TPdf.SaveAsPdfE(FileName)cho trường hợp thường dùng - Thêm TPdf.ValidatePdfE: kiểm tra một PDF đang mở về các marker tuân thủ PDF/E-1 (sự có mặt của XMP pdfe:ISO_PDFEVersion và trùng khớp với giá trị trong Info dictionary, mô tả schema mở rộng pdfe, mục Info dictionary /ISO_PDFEVersion, trailer /ID, sự có mặt của xmp:CreateDate / xmp:ModifyDate) rồi trả về kết quả có cấu trúc với mức tuân thủ phát hiện được và tập issue tìm thấy
- Thêm thuộc tính TPdf.PdfEConformance: trả về mức tuân thủ của tài liệu đang mở (pec1, pecNone hoặc pecUnknown) mà không cần gọi ValidatePdfE tường minh
- Các kiểu mới được xuất trong unit mới FPdfPdfe: TPdfEConformance, TPdfEValidationResult, TPdfEValidationIssue, TPdfESaveOptions
- Việc ghi lại lại Info dictionary là lần đầu trong đường hậu xử lý PDF/x của PDFium Delphi Component - nó ghi lại object Info hiện có với cùng số object (nên subsection xref / tham chiếu trailer /Info vẫn hợp lệ) và tự tạo một Info dictionary mới khi trailer nguồn không có mục /Info. Bản thân PDFium luôn phát ra một Info dictionary trong mọi output SaveAs, nên trường hợp thường gặp là đường ghi lại
- Các yêu cầu ở mức nội dung (nhúng font, ToUnicode CMap, XObject / ExtGState keys / XFA forms bị cấm, v.v.) vẫn là trách nhiệm của tác giả tài liệu - SaveAsPdfE chỉ gắn marker ở mức định dạng tệp nhưng không thay đổi nội dung trang hay xóa các tính năng bị cấm
- Cập nhật chuỗi TPdf.AboutInfo để báo phiên bản sản phẩm hiện tại
Version 1.31.0
- Thêm hỗ trợ chèn marker PDF/UA-1 (ISO 14289-1:2014): TPdf.SaveAsPdfUa nâng tài liệu hiện tại thành tệp tuân thủ PDF/UA-1 bằng cách hậu xử lý PDF cơ sở với một bản cập nhật tăng dần. Phần chèn bao gồm các yêu cầu ở mức định dạng tệp có thể thực thi bằng hậu xử lý - luồng metadata XMP mang
pdfuaid:part = 1cùng mô tả pdfaExtension:schemas khớp,dc:titlebắt buộc, catalog/MarkInfo << /Marked true /Suspects false >>và/ViewerPreferences << /DisplayDocTitle true >>(chỉ khi nguồn không có), catalog/Lang(khi bên gọi cung cấp thẻ BCP 47), và mảng trailer/ID - Thêm TPdf.SaveAsPdfUaToStream cho đầu ra PDF/UA trong bộ nhớ, và rút gọn tùy chọn mặc định
TPdf.SaveAsPdfUa(FileName)cho trường hợp thường dùng - Thêm TPdf.ValidatePdfUa: kiểm tra một PDF đang mở về các marker tuân thủ PDF/UA-1 (sự tồn tại của StructTreeRoot, /Lang, /MarkInfo /Marked true với /Suspects = false, /ViewerPreferences /DisplayDocTitle true, định danh XMP pdfuaid:part, sự có mặt của dc:title, trailer /ID, trạng thái mã hóa) rồi trả về kết quả có cấu trúc với mức tuân thủ phát hiện được và tập issue tìm thấy
- Thêm thuộc tính TPdf.PdfUaConformance: trả về mức tuân thủ của tài liệu đang mở (puc1, pucNone hoặc pucUnknown) mà không cần gọi ValidatePdfUa tường minh
- Các kiểu mới được xuất trong unit mới FPdfPdfua: TPdfUaConformance, TPdfUaValidationResult, TPdfUaValidationIssue, TPdfUaSaveOptions
- Các trường Title / Author / Subject / Keywords / Creator / Producer / CreationDate / ModDate / DocumentId / InstanceId / Language để trống trong TPdfUaSaveOptions sẽ được tự điền từ FPDF_GetMetaText / FPDF_GetFileIdentifier / FPDFCatalog_GetLanguage, nên các bên gọi hiện có có thể lưu chỉ bằng một dòng
- Các yêu cầu ở mức nội dung (độ hoàn chỉnh gắn thẻ StructTreeRoot, alt text của Figure, ToUnicode CMap, nhúng font, v.v.) vẫn là trách nhiệm của tác giả tài liệu - SaveAsPdfUa chỉ gắn marker ở mức định dạng tệp nhưng không thay đổi nội dung trang hay tự bịa tag. ValidatePdfUa bộc lộ việc thiếu StructTreeRoot dưới dạng
pvuaiMissingStructTreeRootđể bên gọi có thể chuyển tài liệu chưa gắn thẻ qua một pipeline gắn thẻ riêng - Cập nhật chuỗi TPdf.AboutInfo để báo phiên bản sản phẩm hiện tại
Version 1.30.0
- Đầu ra PDF/A-1b giờ đáp ứng yêu cầu ISO 19005-1 (với Cor.1:2007) cho tính tương đương giữa Document Information Dictionary và XMP: mọi mục trong Info dictionary mà PDFium ghi vào PDF gốc đều được phản chiếu vào gói XMP, bao gồm Title (dc:title), Author (dc:creator), Subject (dc:description theo Cor.1), Keywords (pdf:Keywords), Creator (xmp:CreatorTool), Producer (pdf:Producer), CreationDate (xmp:CreateDate) và ModDate (xmp:ModifyDate). xmp:MetadataDate cũng được phát ra
- Trailer của tài liệu PDF/A giờ luôn chứa mảng /ID (yêu cầu cứng của ISO 19005-1 6.1.3). Khi TPdf.SaveAsPdfA xử lý một tài liệu mà nguồn đã có file identifier, các ID thường trực và thay đổi dài 16 byte hiện có sẽ được dùng lại; nếu không, một ID dự phòng quyết định được sẽ được suy ra từ các byte nguồn
- XMP được chèn giờ nhúng mô tả schema extension pdfaid mà ISO 19005-1 6.7.8 (đã được Cor.1 thay thế) yêu cầu - pdfaid được xem là schema extension so với XMP Specification 2004, nên mọi tệp tuân thủ phải khai báo tên thuộc tính, kiểu giá trị và danh mục của nó trong container pdfaExtension:schemas
- TPdfASaveOptions có thêm năm trường tùy chọn mới: Producer, CreationDate, ModDate (chuỗi ngày PDF theo dạng “D:YYYYMMDDHHmmSSOHH'mm'”), DocumentId và InstanceId (chuỗi byte 16 byte cho mảng trailer /ID). TPdf.SaveAsPdfA / SaveAsPdfAToStream tự điền các trường còn thiếu từ FPDF_GetMetaText và FPDF_GetFileIdentifier, nên các bên gọi hiện có vẫn hoạt động mà không cần đổi
- TPdf.ValidatePdfA / TPdf.PdfAConformance giờ báo ba issue bổ sung: pvaiMissingTrailerId (không có /ID trong trailer), pvaiMissingXmpDates (thiếu xmp:CreateDate hoặc xmp:ModifyDate) và pvaiMissingExtensionSchema (thiếu mô tả schema extension pdfaid)
- Các ký tự không phải ASCII trong Title, Author, Subject, Keywords, Creator và Producer giờ được mã hóa thành UTF-8 trong gói XMP (XMP Specification yêu cầu UTF-8), giữ nguyên vòng lặp metadata đa ngôn ngữ qua SaveAsPdfA
- Cập nhật chuỗi TPdf.AboutInfo để báo phiên bản sản phẩm hiện tại
Version 1.29.0
- Làm mới các DLL PDFium đi kèm (Win32 và Win64, cả bản dựng standard và V8) lên snapshot upstream ngày 2026-05-22, nhận các sửa lỗi upstream cho đường crash FPDFText_SetText / FPDFText_SetCharcodes và nhiều hardening nội bộ khác từ dự án PDFium
- Bộc lộ cờ lưu FPDF_SUBSET_NEW_FONTS mới của PDFium trong FPdfPageOps.pas, cho phép bên gọi FPDF_SaveAsCopy yêu cầu tự động tạo subset cho các file font nhúng của các text object mới thêm. Các hằng FPDF_INCREMENTAL, FPDF_NO_INCREMENTAL và FPDF_REMOVE_SECURITY hiện được định nghĩa bằng dạng dịch bit của upstream (giá trị số cũ 3 vẫn được giữ dưới tên FPDF_REMOVE_SECURITY_DEPRECATED để tương thích nhị phân)
- Thêm enum FPDF_FONT_BACKEND_TYPE (FREETYPE / FONTATIONS) và trường m_FontLibraryType tương ứng trên FPDF_LIBRARY_CONFIG trong FPdfView.pas, để các ứng dụng khởi tạo PDFium với renderer Skia giờ có thể chọn font backend ngay lúc khởi động
- Cập nhật chữ ký TFPDFPage_InsertObject để khớp upstream: hàm C giờ trả về FPDF_BOOL (TRUE khi thành công, FALSE nếu page_object là NULL hoặc chuyển quyền sở hữu thất bại) thay vì void. Các bên gọi PDFium Delphi Component hiện có vẫn biên dịch nguyên vì Delphi / FPC cho phép bỏ qua giá trị trả về của hàm
- Sửa chuỗi TPdf.AboutInfo để báo đúng phiên bản sản phẩm hiện tại (trước đó bị kẹt ở v1.27.0 từ bản phát hành chỉ-docs v1.28.0)
Version 1.28.0
- Substantially expanded the in-page documentation across the entire API reference: every property, method, event, and global function entry now carries a 3-paragraph Mô tả, a Ghi chú list, a multi-line Delphi Ví dụ, and a richer Xem thêm block — covering 200+ previously thin pages including all TPdf counters, metadata getters, font and character accessors, page-level properties, indexed records, document-level methods, and the full TPdfView state / display / event surface
- Tinh chỉnh bố cục trợ giúp để khớp baseline hình ảnh losLab dùng trong tham chiếu HotXLS: khớp kích thước h1/h2, gom style lưới điều hướng API vào StyleSheet dùng chung, và bỏ các ghi đè CSS inline theo từng trang trên Navigation.html
- Tài liệu giờ đi kèm một helper script (Docs\Build-Expand-Entries.ps1) tạo lại phần làm giàu trang entry từ một bảng dữ liệu duy nhất để bảo trì lặp lại được
Version 1.27.0
- Thêm hỗ trợ tạo PDF/A-1b: TPdf.SaveAsPdfA lưu bất kỳ tài liệu đang mở nào thành tệp tuân thủ PDF/A-1b bằng cách hậu xử lý PDF cơ sở với một bản cập nhật tăng dần chèn luồng metadata XMP, một sRGB ICC OutputIntent và catalog tài liệu đã cập nhật - tất cả mà không cần thêm API DLL. Hoạt động trên mọi nền tảng được PDFium Delphi Component hỗ trợ
- Thêm TPdf.SaveAsPdfAToStream cho đầu ra PDF/A trong bộ nhớ
- Thêm TPdf.ValidatePdfA: kiểm tra một PDF đang mở về tính tuân thủ PDF/A (marker XMP pdfaid, OutputIntent với ICC profile nhúng, mã hóa) và trả về kết quả có cấu trúc với mức tuân thủ phát hiện được cùng một tập các issue cụ thể tìm thấy
- Thêm thuộc tính TPdf.PdfAConformance: trả về mức tuân thủ của tài liệu đang mở (pac1b, pac1a, pac2b, pac3b, pacNone hoặc pacUnknown) mà không cần gọi ValidatePdfA tường minh
- Các kiểu mới được xuất: TPdfAConformance, TPdfAValidationResult, TPdfAValidationIssue, TPdfASaveOptions (trong unit mới FPdfPdfa.pas)
- SaveAsPdfA hỗ trợ ICC profile tùy chỉnh qua TPdfASaveOptions.IccProfileData; khi để trống thì profile sRGB IEC61966-2.1 dựng sẵn (HP/Microsoft, 3144 bytes) sẽ được dùng tự động
- Replaced the monolithic HTML reference with a restructured web help system: 302 individual API entry pages (one per property, method, event, and global function) covering TPdf and TPdfView, each with a full description, parameter table, Delphi code example, and Xem thêm links
- Thêm Navigation.html: một index điều hướng API trên một trang, tổ chức thành sáu phần (property / method / event của TPdf, property / method / event của TPdfView, các global function) với lưới flex 5 cột để quét nhanh
- Đã dựng lại TPdf.html và TPdfView.html thành các trang tổng quan component gọn hơn, giữ lại các mục tham chiếu kiểu (Kiểu, Constants, Global Variables) và liên kết ra từng trang entry riêng cho mọi member
- Thêm tìm kiếm toàn văn do Search.js cung cấp với so khớp tăng dần phía client trên toàn bộ 312 trang đã được lập chỉ mục
- Cập nhật toàn bộ thanh điều hướng trên site để trỏ tới Navigation.html
Version 1.26.0
- Thêm Demo/Lazarus/BatchExport, bản port LCL của demo Delphi BatchExport v1.14.0. Cùng bộ tính năng: xuất hàng loạt PDF -> JPG với tiến trình tổng theo từng tệp, tiến trình hiện tại theo từng trang, đầu vào DPI / chất lượng / mật khẩu, và một batch có thể hủy hợp tác được dựa trên IPdfCancellationToken. Thư mục đầu ra được mở trong trình quản lý tệp của nền tảng khi việc trích xuất hoàn tất thành công
Version 1.25.0
- Thêm tái sử dụng trang Form XObject vào TPdf, mở đường cho workflow watermark, phủ template và “stamp một trang lên nhiều trang”: CreateXObjectFromPage tạo một handle dùng lại từ bất kỳ trang nào của tài liệu khác; InsertFormObjectFromXObject chèn MỘT bản sao của trang được bọc vào trang hiện tại. Hàm trả về FPDF_PAGEOBJECT đã chèn để bên gọi có thể đặt vị trí / co giãn / xoay nó bằng FPDFPageObj_SetMatrix và các helper TPdfMatrix v1.9.0
- Lớp Pascal TPdfXObject mới bọc handle FPDF_XOBJECT của PDFium và tự đóng nó trong destructor, loại bỏ thao tác FPDF_CloseXObject thủ công
- Mở rộng bộ regression Delphi và Lazarus lên 147 case mỗi bộ, và bộ C++Builder lên 123 case, bao phủ hợp đồng tạo handle và chèn page-object
Version 1.24.0
- Thêm TPdf.RenderPageProgressive - biến thể của RenderPage có thể hủy, điều khiển vòng lặp render tăng dần của PDFium và thăm dò IPdfCancellationToken v1.7.0 giữa các vòng lặp, nên các lần render DPI cao kéo dài có thể dừng giữa trang thay vì chặn bên gọi cho tới khi hoàn tất
- Trả về giá trị TPdfProgressiveStatus: prsDone, prsCancelled hoặc prsFailed. Truyền AToken = nil để render cho tới khi hoàn tất mà không bao giờ tạm dừng (không có khả năng prsCancelled)
- Dùng cùng đường đi nhanh zero-copy đã giới thiệu ở v1.21.0 - PDFium render trực tiếp vào DIB của TBitmap đích. Cùng fallback cũ đó được áp dụng khi DIB không thể được bọc
- Mở rộng bộ regression Delphi và Lazarus lên 145 case mỗi bộ, và bộ C++Builder lên 121 case, bao phủ trường hợp token nil (hoàn tất), token bị hủy trước (prsCancelled), và tương đương từng pixel với RenderPage đồng bộ trên một token đang sống
Version 1.23.0
- Thêm sáu method TPdfView mới bộc lộ cho ứng dụng khả năng chọn văn bản trong form-widget và Undo/Redo của PDFium: GetSelectedFormText trả về văn bản hiện đang được chọn trong form widget đang focus; SelectAllFormText chọn mọi ký tự; FormUndo / FormRedo / FormCanUndo / FormCanRedo điều khiển lịch sử chỉnh sửa của widget đang focus. Các API PDFium nền đã được bind nhưng chưa có điểm vào mức cao. Cả sáu đều thoát sớm an toàn khi view không hoạt động hoặc tài liệu không có widget AcroForm đang focus
- Mở rộng bộ regression Delphi và Lazarus lên 142 case mỗi bộ, và bộ C++Builder lên 119 case, bao phủ hợp đồng không-form-không-focus cho mọi method mới
Version 1.22.0
- Thêm wrapper ghép trang vào TPdf: ImportPagesByIndex nhận một mảng chỉ mục bắt đầu từ 0 để sao chép các trang cụ thể từ tài liệu nguồn; ImportNPagesToOne trả về một TPdf mới tinh mà các trang của nó là các bản ghép N-up từ tài liệu này; MovePages sắp xếp lại trang tại chỗ. Các API PDFium nền đã được bind nhưng chưa có điểm vào thân thiện với Pascal
- ImportPagesByIndex chấp nhận mảng rỗng để nhập mọi trang nguồn (tương đương truyền nil ở mức C ABI)
- Mở rộng bộ regression Delphi và Lazarus lên 136 case mỗi bộ, và bộ C++Builder lên 115 case, bao phủ nhập một phần, nhập toàn bộ tài liệu, đổi thứ tự trang và ghép N-up
Version 1.21.0
- Cải thiện hiệu năng render bằng cách chuyển TPdf.RenderPage / TPdf.RenderTile (và các helper TPdfView tương ứng) sang đường ra zero-copy. PDFium giờ ghi trực tiếp vào buffer DIB của TBitmap đích thay vì vào buffer nội bộ rồi copy từng dòng, tiết kiệm một lần copy bộ nhớ kích thước width x height x 4 byte cho mỗi lần render. Cải thiện này rõ nhất ở DPI cao (panel thumbnail, xuất chất lượng in, xuất hàng loạt)
- Đường theo từng scanline cũ vẫn được giữ làm fallback an toàn cho trường hợp hiếm khi DIB đích không thể được bọc (kích thước cực đoan, stride bất thường, OOM). Hành vi giữa hai đường là giống hệt từng byte, chỉ là fallback chậm hơn
- Mở rộng bộ regression Delphi và Lazarus lên 132 case mỗi bộ, và bộ C++Builder lên 112 case, bao phủ nâng cấp caller-bitmap pf32bit, vòng lặp kín kích thước và một test sanity stride cho bitmap lớn
Version 1.20.0
- Thêm tô sáng kết quả tìm kiếm vào TPdfView: HighlightSearchText(Text, MatchCase, MatchWholeWord) quét trang đang hiển thị và trả về số khớp tìm được, vẽ một mask HighlightColor lên mỗi khớp trong mọi lần redraw. ClearHighlight xóa phần tô sáng; chuyển view sang trang khác sẽ tự động xóa vì các khớp chỉ gắn với từng trang
- HighlightColor mặc định là clYellow và được public để ứng dụng có thể chỉnh theme phần tô sáng cho khớp với bảng màu UI của mình
- Mở rộng bộ regression Delphi và Lazarus lên 129 case mỗi bộ, và bộ C++Builder lên 109 case, bao phủ màu mặc định, vòng lặp kín màu, các “khớp từ trên fixture thật” với chuỗi sample.pdf, và hợp đồng “thiếu từ thì trả về không khớp”
Version 1.19.0
- Thêm thuộc tính FitMode cho TPdfView với bốn giá trị: pfmNone (zoom thủ công), pfmActualSize (100%), pfmFitPage (toàn bộ trang vừa viewport), và pfmFitWidth (chiều rộng trang khớp chiều rộng viewport). Chế độ fit đang hoạt động được áp dụng lại tự động khi Resize và khi trang hiện tại thay đổi, nên các tài liệu dài có kích thước trang lẫn lộn vẫn luôn nằm gọn khung
- Đặt Zoom trực tiếp sẽ hủy chế độ fit đang hoạt động (FitMode trở về pfmNone), khớp với quy ước trình xem PDF chuẩn là nhập một giá trị zoom thì thoát khỏi Fit Page / Fit Width
- Mặc định là pfmNone nên các ứng dụng hiện có vẫn giữ hành vi zoom tường minh của chúng
- Mở rộng bộ regression Delphi và Lazarus lên 124 case mỗi bộ, và bộ C++Builder lên 106 case, bao phủ giá trị mặc định, vòng lặp kín chế độ, fit-page tạo ra zoom thực trên tài liệu đã nạp, và việc zoom thủ công hủy fit-mode
Version 1.18.0
- Thêm thuộc tính PageColor cho TPdfView, tách nền trang PDF đã render khỏi Color của control bao quanh. Mặc định là clWhite, nên trang PDF giờ render như giấy trắng bất kể theme của ứng dụng host. Trình xem dark-mode giờ có thể giữ vùng cuộn tối trong khi vẫn để trang PDF thật màu trắng (hoặc bất kỳ màu nào ứng dụng chọn)
- Thay đổi hành vi: các ứng dụng trước đây đặt TPdfView.Color để đổi màu trang PDF nên chuyển sang đặt PageColor. Trải nghiệm mặc định được cải thiện cho trường hợp phổ biến (trang trắng trên nền control có theme) mà không cần đổi code
- Mở rộng bộ regression Delphi và Lazarus lên 120 case mỗi bộ, và bộ C++Builder lên 103 case, bao phủ giá trị mặc định và vòng lặp kín màu
Version 1.17.0
- Thêm mới user-input lock-down toggles to TPdfView so applications embedding the viewer in kiosks, preview panes, or read-only contexts can disable navigation gestures without subclassing: AllowUserPageChange controls the new PgUp / PgDn / Ctrl+Trang chủ / Ctrl+End keyboard shortcuts; ChangePageOnMouseScrolling controls the new wheel-up / wheel-down page jumps; AllowUserTextSelection is reserved for the future mouse-drag text-selection path. All three default to True so existing applications upgrade with no behavioral change
- Điều hướng trang bằng bánh xe chuột bỏ qua Ctrl+wheel để ứng dụng có thể giữ Ctrl+wheel cho zoom
- Mở rộng bộ regression Delphi và Lazarus lên 118 case mỗi bộ, và bộ C++Builder lên 101 case, bao phủ các giá trị mặc định và vòng lặp kín toggle
Version 1.16.2
- Mở rộng phạm vi regression của TPdfView cho các lần nhấp annotation link khi trang viewer khác với trang TPdf liên quan, dùng một đường nhấp chuột headless thật trên Delphi, Lazarus và C++Builder
- Bộ Delphi và Lazarus giờ chạy 114 case mỗi bộ, còn C++Builder giờ chạy 99 case
Version 1.16.1
- Sửa xử lý nhấp link của TPdfView để các hành động annotation và web-link tự động dùng trang đang được viewer hiển thị, ngay cả khi component TPdf liên quan đang đứng ở một trang khác
- Gia cố TPdfThumbnailView để chống các tham chiếu Pdf treo khi component TPdf được liên kết bị hủy
- Thêm regression cho vòng đời tham chiếu thumbnail; bộ Delphi và Lazarus giờ chạy 113 case mỗi bộ, còn C++Builder giờ chạy 98 case
- Đồng bộ README, tài liệu test, nội dung tìm kiếm / chỉ mục HTML Help và output gói C++ được tạo ra với các cập nhật tích hợp từ v1.7.0 đến v1.16.0
Version 1.16.0
- Thêm demo Delphi PrintDialog mới (Demo/Delphi/PrintDialog) tập trung vào in N-up (1 / 2 / 4 / 9 trang mỗi tờ) với lọc trang lẻ / chẵn, render grayscale và viền ô tùy chọn dày 1 pixel. Đây là một mẫu nhỏ được chủ ý tạo ra để đi cùng demo PrintPDF hiện có, vốn đã bao phủ preview, file gần đây, zoom và scaling
Version 1.15.0
- Thêm component TPdfThumbnailView mới (unit FPdfThumbnail) render một thumbnail mỗi trang theo từng hàng trong một panel bên có thể cuộn, với tô sáng khi hover và khi chọn cùng điều hướng nhấp để đi tới. Được thiết kế để đặt cạnh TPdfView để người dùng cuối có thể duyệt một tài liệu dài theo từng trang
- Component được đăng ký trên tab palette losLab cùng với TPdf và TPdfView; các property chính: Pdf, CurrentPageIndex, ThumbnailWidth, ThumbnailHeight, TextColor, HoverColor, SelectionColor, BorderColor và event OnPageClick
- Mở rộng bộ regression Delphi và Lazarus lên 112 case mỗi bộ, và bộ C++Builder lên 97 case, bao phủ giá trị mặc định, vòng lặp kín kích thước thumbnail, chặn giá trị cực trị, vòng lặp kín màu và gán trình xử lý event
Version 1.14.0
- Thêm demo Delphi BatchExport mới (Demo/Delphi/BatchExport) minh họa cách chuyển nhiều tệp PDF sang JPG trong một lượt bằng TPdf.LoadCustomDocument cho tải dạng stream, IPdfCancellationToken cho hủy hợp tác và thanh tiến trình tổng theo từng tệp + theo từng trang. Demo dùng một instance TPdf cho mỗi tệp (bản thân PDFium không an toàn cho đa luồng) và mở thư mục đầu ra trong Explorer khi trích xuất hoàn tất thành công
Version 1.13.0
- Thêm lớp phủ UI render bất đồng bộ vào TPdfView thông qua ba property mới: AsyncRendering, LoadingText và LoadingColor. Khi AsyncRendering là True, đường vẽ một trang sẽ chồng một chỉ báo nhỏ “Loading...” lên trang đã render để các ứng dụng tự dùng worker riêng cho các lần render dài có cùng một tín hiệu trực quan nhất quán
- Giá trị mặc định giữ nguyên hành vi hiện có: AsyncRendering là False, nên các ứng dụng không bật tính năng này sẽ không thấy thay đổi trực quan
- Tài liệu làm rõ rằng bản thân PDFium không an toàn cho đa luồng - nếu thật sự chuyển render sang worker thì bên gọi phải giữ một TPdf cho mỗi worker; demo batch-export sắp tới sẽ thể hiện mẫu đó
- Mở rộng bộ regression Delphi và Lazarus lên 106 case mỗi bộ, và bộ C++Builder lên 93 case, bao phủ các giá trị mặc định và vòng lặp kín của ba property
Version 1.12.0
- Thêm xử lý liên kết theo nhấp chuột vào TPdfView. Property LinkOptions mới điều khiển hành vi tự động cho bốn kiểu hành động link PDF: goto (nhảy trang), URI (ShellExecute), launch (ShellExecute) và GotoR nhúng (reserved). Mặc định bật loAutoGoto và loAutoOpenURI; loAutoLaunch và loAutoEmbeddedGoto vẫn tắt để một cú nhấp lạc không thể chạy chương trình tùy ý
- Thêm các event OnAnnotationLinkClick và OnWebLinkClick, phát ra trước mọi hành động tự động và cho phép ứng dụng kiểm tra link, đánh dấu nó là Handled hoặc chuyển hướng nó (ví dụ sang một hộp thoại bảo mật)
- Việc phát hiện nhấp link chỉ chạy khi cử chỉ là nhấp chứ không phải kéo, dùng một anchor MouseDown mới để các cử chỉ pan vẫn đi qua đường cuộn sẵn có mà không đổi
- Mở rộng bộ regression Delphi và Lazarus lên 102 case mỗi bộ, và bộ C++Builder lên 91 case, bao phủ LinkOptions mặc định, vòng lặp kín của set và gán trình xử lý event
Version 1.11.0
- Thêm chút hoàn thiện hình ảnh cho TPdfView: các property PageShadowSize, PageShadowColor và PageBorderColor vẽ một bóng đổ tùy chọn dưới khung trang và một viền dày một pixel bao quanh nó. Giá trị mặc định giữ nguyên diện mạo phẳng trước đây (PageShadowSize = 0; viền được vẽ bằng clBlack mặc định nhưng hòa vào nền trắng mặc định cho tới khi bên gọi đổi màu)
- Thêm property SmoothScroll như một cờ tùy chọn cho hoạt ảnh cuộn tăng dần trong tương lai; hiện tại property này vẫn vòng lặp kín được và đã được nối để ứng dụng có thể lưu lại tùy chọn, trong khi phần render vẫn dùng hành vi cuộn tức thì sẵn có
- Mở rộng bộ regression Delphi và Lazarus lên 98 case mỗi bộ, và bộ C++Builder lên 89 case, bao phủ các giá trị mặc định, vòng lặp kín của property và chặn giá trị shadow âm
Version 1.10.0
- Thêm chèn ảnh trực tiếp thông qua các overload TPdf.AddImage và TPdfView.AddImage mới nhận либо đường dẫn tệp hoặc TBitmap, bên cạnh AddPicture dựa trên TPicture sẵn có. AddImage(FileName) nhận ra mọi định dạng đã đăng ký với unit đồ họa VCL hoặc LCL (BMP, PNG qua unit PngImage, JPG, v.v.) và đi qua cùng pipeline như AddPicture nên hành vi là giống hệt
- AddImage(TBitmap) bỏ qua lớp trung gian TPicture, giúp đơn giản hóa các bên gọi đã có sẵn một TBitmap từ công việc render hoặc tạo batch
- Mở rộng bộ regression Delphi và Lazarus lên 92 case mỗi bộ, và bộ C++Builder lên 84 case, bao phủ chèn bitmap, biên page-object, từ chối bitmap nil và nạp file BMP
Version 1.9.0
- Đã thêm hỗ trợ ma trận biến đổi mức cao qua lớp TPdfMatrix mới trong unit FPdfMatrix. TPdfMatrix bao bọc FS_MATRIX của PDFium bằng API OO cho Translate, Scale, Rotate, HorizontalFlip, VerticalFlip, CentralFlip, Skew, và Multiply, phù hợp để ghép các biến đổi trước khi chuyển chúng cho FPDFPageObj_SetMatrix và các API PDFium tương tự
- TPdfMatrix.Multiply chụp đúng sáu phần tử ma trận trước khi tính các giá trị hàng mới, sửa một vấn đề tiềm ẩn nơi các triển khai Pascal thay thế ghi đè các phần tử sớm hơn trong cùng một lần gọi và tạo kết quả sai cho mọi phép ghép ngoài dịch chuyển thuần túy
- Đã mở rộng các bộ hồi quy Delphi và Lazarus lên 88 ca mỗi bộ, và bộ C++Builder lên 81 ca, bao phủ trạng thái identity, reset, translate / scale / flip, thứ tự ghép sau phép nhân, và trường hợp hồi quy Multiply
Version 1.8.0
- Đã thêm tải stream theo nhu cầu thông qua phương thức TPdf.LoadCustomDocument(AStream, AOwnsStream) mới và lớp trợ giúp TPdfStreamAdapter, được hậu thuẫn bởi FPDF_LoadCustomDocument của PDFium. PDFium giờ chỉ đọc các block từ TStream được cung cấp khi cần, nên các PDF rất lớn hoặc từ xa không còn cần bản sao trong bộ nhớ ngay từ đầu
- Đã thêm sở hữu stream tùy chọn: truyền AOwnsStream = True giao vòng đời của TStream cho TPdf, để nó giải phóng stream khi UnloadDocument chạy
- Đã mở rộng các bộ hồi quy Delphi và Lazarus lên 79 ca mỗi bộ, và bộ C++Builder lên 75 ca, bao phủ tải stream qua TFileStream, dọn dẹp stream được sở hữu, và hợp đồng stream do bên ngoài sở hữu vẫn sống sót sau khi unload
Version 1.7.0
- Đã thêm các primitive hủy async hợp tác trong unit FPdfAsync mới, bộc lộ IPdfCancellationToken / IPdfCancellationTokenSource và singleton PdfNoCancellationToken có thể tái dùng để các workflow render và export dài có thể hỗ trợ ngữ nghĩa hủy sạch từ UI
- Đã thêm helper TPdfFuture<T> nhẹ chạy worker trên luồng nền và post envelope TPdfFutureResult<T> trở lại luồng chính, phân biệt các trường hợp thành công, hủy và lỗi
- Đã mở rộng các bộ hồi quy Delphi và Lazarus lên 76 ca mỗi bộ, và bộ C++Builder lên 73 ca, với bao phủ chung cho trạng thái hủy, hủy idempotent, fan-out callback và đăng ký sau hủy
Version 1.6.10
- Đã thêm quyền truy cập mức cao TPdf.PrintPageRanges vào phạm vi trang in của tùy chọn trình xem PDF, trả về các phạm vi trang one-based cho mã ứng dụng
- Đã thêm TPdf.SetFormFieldFlags / SetFormFieldFlagsAt và các helper TPdfView tương ứng để ứng dụng có thể cập nhật cờ trường AcroForm qua API công khai, bao gồm bao phủ cờ password và multi-select
- Đã siết chặt bao phủ ABI binding PDFium cho FPDF_DWORD kích thước Windows, callback FPDF_FILEACCESS, và các trường slot nhúng V8
Version 1.6.9
- Đã thêm các binding render Skia mức thấp cho các API FPDF_RenderPageSkia và FPDF_FFLDrawSkia mới được xuất trong các DLL PDFium standard và V8 đi kèm
- Đã mở rộng các kiểm tra bao phủ binding công khai để tải DLL standard và V8 giờ xác minh các điểm vào render Skia bên cạnh các probe năng lực V8/XFA hiện có
Version 1.6.8
- Đã thêm TPdf.SetTextPositions và TPdfSingleArray để đặt vị trí theo từng ký tự trên các đối tượng văn bản hiện có thông qua API FPDFText_SetPositions mới được xuất
- Đã nâng FPDFText_SetPositions lên thành binding bắt buộc cho các DLL PDFium đi kèm hiện tại, đồng thời xác nhận các điểm vào render Skia vẫn chưa có vì các DLL đó chưa xuất chúng
- Đã mở rộng các bộ hồi quy Delphi, C++Builder và Lazarus lên 65 ca mỗi bộ với bao phủ vị trí văn bản
Version 1.6.7
- Thêm khả năng TPdf truy cập ở mức cao vào các hành động name-tree JavaScript của tài liệu, trả về tên hành động và script qua JavaScriptAction và JavaScriptActions
- Thêm TPdf.FileIdentifier để đọc các ID trailer thường trực và thay đổi dưới dạng TBytes nhị phân mà không có byte kết thúc của PDFium
- Thêm TPdf.PageBox, GetPageBox và SetPageBox cho MediaBox, CropBox, BleedBox, TrimBox và ArtBox trên trang hiện tại
- Xác nhận các DLL PDFium đi kèm hiện tại chỉ để các điểm vào render Skia là không dùng được tại runtime vì những export đó không có mặt
- Mở rộng bộ regression Delphi, C++Builder và Lazarus lên 64 case mỗi bộ, bao phủ JavaScript tài liệu, ID trailer và page-box
Version 1.6.6
- Thêm hỗ trợ runtime cho DLL PDFium có V8 đi kèm. Đặt EnableV8Engine trước khi nạp giờ sẽ chọn pdfium.v8.dll từ cây DLLs\Win32 hoặc DLLs\Win64 và bộc lộ các binding chỉ-V8/XFA khi DLL được nạp cung cấp chúng
- Thêm V8FeaturesAvailable, XfaBStrHelpersAvailable, GetRecommendedV8Flags, và các binding tùy chọn mức thấp cho FPDF_BStr_*, FPDF_GetRecommendedV8Flags và FPDF_GetArrayBufferAllocatorSharedInstance
- Làm cho FPDFText_SetPositions trở thành tùy chọn để PDFium Delphi Component vẫn nạp được với các DLL PDFium không export trình đặt vị trí văn bản thử nghiệm này
- Mở rộng bộ regression Delphi, C++Builder và Lazarus lên 61 case mỗi bộ, bao phủ khả năng của cả DLL standard và DLL V8