Ghi chú phát hành PDFiumPas
Lịch sử phiên bản cho các tính năng người dùng thấy của PDFiumPas, 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: 2.57.0; Ngày phát hành:
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à các điểm đến hiện để lộ trạng thái mở, số lượng con cháu, mục tiêu hành động, chế độ xem điểm đến, và tối đa bốn tham số xem
Metadata,GrantedPermissions,UserGrantedPermissions,HasPermission, vàUserHasPermissioncung cấp các ả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 một trang được yêu cầu mà không thay đổi trang đang hoạt, và kết quả dấu thời gian RFC 3161 để lộ chính sách, thời điểm tạo, và chi tiết nonce
Thay đổi (Changed)
- Các đường dẫn bookmark, JavaScript, metadata, điểm đến, và hình thu nhỏ sử dụng bộ đệm hai lượt đã được xác thực, tăng trưởng tập hợp hình học, và duyệt an toàn chu trình
- Hậu xử lý lưu hiện phân giải catalog đang hoạt, cây trang, và open action thông qua bản sửa đổi xref hiện tại, lưu vào bộ nhớ đệm các luồng đối tượng đã giải mã, và quét các từ điển PDF với ranh giới từ vựng
- Phân tích PDF dùng chung hiện áp dụng các tiêu đề đối tượng chính xác, thế hệ, khóa từ điển, độ dài luồng, hình học predictor, phạm vi số nguyên, và ranh giới chú thích, literal-string, và hexadecimal-string
- Xác thực phản hồi RFC 3161 hiện gắn kết cả nonce lẫn SHA-256
messageImprint, yêu cầu một signer có cấu trúc hợp lệ, và áp dụng các quy tắc DER length, OID, INTEGER, và GeneralizedTime nghiêm ngặt
Sửa lỗi (Fixed)
- Tài liệu tăng đôi không còn chọn các catalog trùng lặp không hoạt động hoặc hậu tố tham chiếu sai định dạng khi thêm một open action mặc định
- Các timestamp token có DER length dạng dài nay giữ lại toàn bộ token đã mã hóa, trong khi thứ tự trường tùy chọn CMS sai định dạng và các tập hợp signer rỗng bị từ chối
- Các bản build Delphi sạch nay ghi các trường nonce seed PAdES thông qua các bản sao byte an toàn căn chỉnh và truyền các byte phản hồi XFA với kiểu con trỏ native chính xác
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 bản demo
PDFViewervàMultiPageViewerhỗ trợEnter,F3, đặt lại ngữ cảnh khi đổi tùy chọn và dùngEscđể hủy tìm kiếm hoặc in - In tuân theo góc xoay hiện tại và chọn hướng dọc hoặc ngang
- Các demo
ViewerInteractionLabhỗ trợCtrl+A,Ctrl+C,Enter,F3vàEsc
Đã sửa (Fixed)
- Hủy in trong C++Builder và Lazarus dừng công việc máy in và các vòng lặp lồng nhau
- Nút Cancel của
MultiPageViewerDelphi đã nối với trình xử lý
Version 2.26.0
Đã thay đổi (Changed)
TPdf.GetObjectBitmap,TPdf.GetBitmap,TPdf.GetThumbnailvà các phiên bảnTPdfViewlấy khóa kết xuất quanhFPDFImageObj_GetBitmap/FPDFPage_GetThumbnailAsBitmapTPdf.RenderPageThumbnailtôn trọng/Rotatevà tính lại cho trang/Rotate 90và270
Đã sửa (Fixed)
TPdfView.GetCharacterRectanglekhởi tạo hình chữ nhật bằng 0 khiFPDFText_GetCharBoxlỗi và trả vềRect(0,0,0,0)GetLinkAnnotationsdùngsize-1cho đường dẫn URI và tệp
Version 2.25.0
Đã thay đổi (Changed)
TPdf.AddText,SetText,AddPathvàInsertFormObjectFromXObjectvô hiệu hóa trang văn bản đã lưu và chú thích liên kết trước khi tạo lại nội dungTPdfView.RenderPage(HDC, ...)lấy khóa kết xuất và che ngoại lệ FPU/SSE- Bản demo
PrintPDFgọiPrinter.Abortkhi hủy
Đã sửa (Fixed)
TPdf.GetCharactervàGetCharcodetrả về U+FFFD cho điểm mã trên U+FFFFGetWebLinksgiới hạn giá trị âm củaFPDFLink_CountRectsvề 0TPdf.DestroyxóaPasswordkhỏi bộ nhớ
Version 2.24.0
Đã thêm (Added)
TPdf.DeletePagevà thao tác tệp đính kèm kiểm tra chỉ mục và phát sinhEPdfErrorkhi ngoài phạm vi
Đã sửa (Fixed)
- Các tay cầm đối tượng trang được hủy khi có ngoại lệ
TPdf.UnloadPagehủy tay cầmFPathbị bỏTPdf.InsertFormObjectFromXObjectgọiUpdatePagesau khi chèn
Version 2.23.0
Đã sửa (Fixed)
- Xác thực
/BaseStatechấp nhận/OFFbên cạnh/ON - Xác thực
/Intentchấp nhận/Designvà mảng[/View /Design] - Phát hiện Measure địa không gian nhận
/Subtype /GEOmà không cần/Type /Measure
Version 2.22.0
Đã thay đổi (Changed)
- Tính toán thu phóng của
TPdfViewdùngClientWidth/ClientHeightthay choWidth/Heightđể vừa vùng hiển thị AddSignatureTimestampToCmsphát sinhExceptioncho trường CMS SignerInfo không đọc được
Đã sửa (Fixed)
- Tay cầm khóa riêng CNG trong
ResolveWinSignerđược giải phóng bằngNCryptFreeObject EcDsaP1363ToDertừ chối nửarhoặcstoàn số 0 và không tạoINTEGER 0
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)
- Phiên bản mới nhất: 2.21.2; Ngày phát hành:
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ả các ví dụ trình xem Delphi, C++Builder và Lazarus bây giờ có thể mở PDF được truyền làm đối số dòng lệnh đầu tiên, và các ví dụ
MultiPageViewercủa C++Builder và Lazarus cung cấp các phím tắt rõ ràng cho chọn tất cả và sao chép
Đã sửa (Fixed)
- Phiên bản mới nhất: 2.21.3; Ngày phát hành:
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峄璦 (Fixed)
- X谩c th峄眂 phi锚n b岷 PDF r玫 r脿ng hi峄噉 tu芒n theo chu峄梚 hi峄噓 膽铆nh classic, hybrid ho岷穋 xref-stream 膽ang ho岷 膽峄檔g, bao g峄搈 c岷?c谩c m峄 膽峄慽 t瓢峄g n茅n, do 膽贸 c谩c 膽峄慽 t瓢峄g b峄?th岷?ch峄? gi岷 ph贸ng v脿 kh么ng 膽瓢峄 tham chi岷縰 kh么ng c貌n g芒y ra l峄梚 phi锚n b岷 t铆nh n膬ng gi岷?/li>
Version 2.19.0
膼茫 thay 膽峄昳 (Changed)
- Phiên bản mới nhất: 2.21.4; Ngày phát hành:
膼茫 s峄璦 (Fixed)
- C++Builder
CJKTextLabhi峄噉 膽o l瓢峄漬g v膬n b岷 th么ng qua c谩c h脿m ch峄塶h s峄璦 PDFium 膽瓢峄 xu岷, v脿MergePDFtr谩nh qu谩 t岷 th么ng 膽i峄噋 VCL m啤 h峄? kh么i ph峄 c谩c b岷 d峄眓g RAD Studio 37 s岷h s岷?/li>
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峄璦 (Fixed)
- Vi峄嘽 k媒 PAdES hi峄噉 ph芒n gi岷 c谩c tham chi岷縰 gi谩n ti岷縫
/Annots,/AcroFormv脿/Fieldsc峄 trang 膽岷 ti锚n theo to脿n b峄?ti锚u 膽峄?膽峄慽 t瓢峄g (ISO 32000-1 搂7.5.3) v脿 theo s峄?th岷?h峄?th峄眂 t岷?c峄 tham chi岷縰; vi峄嘽 t矛m ki岷縨 chu峄梚 con thu岷 t煤y tr瓢峄沜 膽芒y 膽茫 kh峄沺 v峄沬 m峄檛 s峄?膽峄慽 t瓢峄g b锚n trong s峄?d脿i h啤n (ph芒n gi岷5 0 Rth脿nh15 0 obj) v脿 th岷?h峄?膽瓢峄 m茫 h贸a c峄﹏g 膽茫 b峄?s贸t c谩c 膽峄慽 t瓢峄g c贸gen>0, l脿m h峄弉g c谩c m岷g tr瓢峄漬g ch峄?k媒 ho岷穋 t峄?ch峄慽 t脿i li峄噓 h峄 l峄?/li> - Khi catalog, trang 膽岷 ti锚n,
/Annots,/AcroFormho岷穋/Fieldsn岷眒 b锚n trong m峄檛 d貌ng 膽峄慽 t瓢峄g, vi峄嘽 k媒 hi峄噉 s岷?th峄?l岷 tr锚n b岷 sao 膽茫 m峄?r峄檔g tr瓢峄沜 khi b谩o th岷 b岷 thay v矛 t峄?ch峄慽 t脿i li峄噓 ngay l岷璸 t峄ヽ
Version 2.18.0
膼茫 th锚m (Added)
ReadPdfVersionInfob谩o c谩o phi锚n b岷 ti锚u 膽峄? phi锚n b岷 l玫i hi峄噓 d峄g, ghi 膽猫 catalog v脿 m峄ヽ 膽峄?m峄?r峄檔g nh脿 ph谩t tri峄僴 Adobe t峄?m峄檛 d貌ng PDF
膼茫 thay 膽峄昳 (Changed)
- Phiên bản mới nhất: 2.21.12; Ngày phát hành:
- Vi峄嘽 l瓢u theo 膽瓢峄漬g d岷玭 t峄噋 hi峄噉 ghi v脿o m峄檛 t峄噋 t岷 th峄漣 c霉ng c岷 v脿 ch峄?thay th岷?膽铆ch sau khi t岷 c岷?c谩c ki峄僲 tra n茅n, chu岷﹏ h贸a v脿 phi锚n b岷 膽峄乽 th脿nh c么ng
膼茫 s峄璦 (Fixed)
- 膼岷 ra PDF 1.3 hi峄噉 mang theo t脿i nguy锚n
/ProcSet膽岷 膽峄?theo y锚u c岷 v脿 lo岷 b峄?c谩c kh贸a 膽峄?trong su峄憈 PDF 1.4 khi ch煤ng ch峄?l岷穚 l岷 c谩c gi谩 tr峄?tr岷g th谩i 膽峄?h峄峚 ban 膽岷 c峄 PDF 1.3 - C谩c t峄噋 hybrid-reference, xref-stream v脿 d貌ng 膽峄慽 t瓢峄g kh么ng c貌n b峄?ghi 膽猫 b峄焛 tr矛nh n茅n classic-xref, ng膬n c谩c m峄 膽峄慽 t瓢峄g n茅n b峄?lo岷 b峄?/li>
- C谩c t锚n gi峄憂g v峄沬 膽峄?trong su峄憈 ho岷穋 c谩c kh贸a t铆nh n膬ng catalog b锚n trong chu峄梚, ch煤 th铆ch ho岷穋 b岷 膽峄?t脿i nguy锚n kh么ng li锚n quan kh么ng c貌n g芒y ra l峄梚 phi锚n b岷 m峄 ti锚u gi岷?/li>
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峄璦 (Fixed)
- Tr锚n Free Pascal, c谩c chu峄梚 v膬n b岷 c贸 膽岷 v脿o kh么ng ph岷 l脿 UTF-8 h峄 l峄?s岷?膽瓢峄 m峄?r峄檔g t峄玭g byte d瓢峄沬 d岷g Latin-1 v脿 膽瓢峄 ghi d瓢峄沬 d岷g c谩c chu峄梚 hex UTF-16BE; c谩c byte cao th么 tr瓢峄沜 膽芒y b峄?r貌 r峄?v脿o m峄檛 chu峄梚 v膬n b岷 (literal string), v峄憂 kh么ng ph岷 l脿 ki峄僽 m茫 h贸a chu峄梚 v膬n b岷 PDF 1.7 h峄 l峄?/li>
- Vi峄嘽 gi岷 m茫 d貌ng hi峄噉 nh岷璶 di峄噉 d峄?li峄噓 deflate th么 kh么ng c贸 tr矛nh b峄峜 zlib RFC 1950 (m峄檛 l峄梚 ph峄?bi岷縩 c峄 c谩c tr矛nh ghi b峄?h峄弉g) v脿 gi岷 n茅n n贸 峄?ch岷?膽峄?th么, do 膽贸 c谩c qu茅t tu芒n th峄?kh么ng c貌n 芒m th岷 b峄?s贸t c谩c d貌ng nh瓢 v岷瓂
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峄璦 (Fixed)
- Vi峄嘽 x贸a tr峄憂g th芒n d貌ng 膽瓢峄 s峄?d峄g b峄焛 c谩c qu茅t tu芒n th峄?hi峄噉 y锚u c岷 t峄?kh贸a
streamph岷 膽瓢峄 theo sau b峄焛 m峄檛 k岷縯 th煤c d貌ng (ISO 32000-1 搂7.3.8.1); t峄?n脿y b锚n trong m峄檛 chu峄梚 v膬n b岷 (literal string) nh瓢(downstream)tr瓢峄沜 膽芒y 膽茫 x贸a tr峄憂g to脿n b峄?c岷 tr煤c theo sau cho 膽岷縩endstreamti岷縫 theo, che gi岷 c谩c vi ph岷 th峄眂 t岷?kh峄廼 c谩c ki峄僲 tra c岷 byte - C谩c qu茅t t铆nh n膬ng b峄?c岷 c峄 PDF/X v脿 PDF/E b峄?sung vi峄嘽 x贸a tr峄憂g c谩c chu峄梚 v膬n b岷 v脿 ch煤 th铆ch (搂7.2.2), do 膽贸 m峄檛 gi谩 tr峄?nh瓢
/Title (see /JavaScript docs)ho岷穋 m峄檛 token c贸 ch煤 th铆ch kh么ng c貌n t岷 ra ph谩t hi峄噉JavaScript,AcroFormho岷穋LZWDecodegi岷?/li>
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峄璦 (Fixed)
- N茅n d貌ng cho ph茅p chuy峄僴 c谩c t脿i li峄噓 cross-reference-stream (c谩c t峄噋 PDF 1.5+ kh么ng c贸 t峄?kh贸a
trailerclassic) 膽i qua m脿 kh么ng thay 膽峄昳; 膽瓢峄漬g d岷玭 d峄眓g l岷 tr瓢峄沜 膽芒y 膽茫 ph芒n t铆ch c煤 ph谩p saistartxrefth脿nh v峄?tr铆 b岷g v脿 t峄昻g h峄 m峄檛 trailer ph峄弉g 膽o谩n, c贸 th峄?t岷 ra m峄檛 t峄噋 kh么ng th峄?m峄?/li> - Tr矛nh n茅n b峄?qua c谩c d貌ng si锚u d峄?li峄噓 XMP 膽峄?t脿i li峄噓 PDF/A gi峄?l岷 d貌ng si锚u d峄?li峄噓 kh么ng l峄峜 b岷痶 bu峄檆 c峄 n贸 (ISO 19005-1 搂6.7.2), v脿 膽峄?c谩c d貌ng t峄噋 b锚n ngo脿i (
/Fv峄沬/FFilter) nguy锚n v岷筺 - B岷g tham chi岷縰 ch茅o 膽瓢峄 d峄眓g l岷 th峄眂 hi峄噉 qu茅t m峄檛 b岷 sao 膽茫 lo岷 b峄?d貌ng c峄 t脿i li峄噓, do 膽贸 n峄檌 dung d貌ng nh峄?ph芒n kh么ng c貌n c贸 th峄?l脿m gi岷?ti锚u 膽峄?膽峄慽 t瓢峄g ho岷穋 l脿m ph矛nh b岷g; gi谩 tr峄?
/Sizec峄 trailer 膽瓢峄 d峄眓g l岷 hi峄噉 ph岷 谩nh 膽煤ng b岷g th峄眂 t岷?v脿 s峄?膽峄慽 t瓢峄g b峄?gi峄沬 h岷 峄?tr岷 Ph峄?l峄 C - Vi峄嘽 膽峄媙h v峄?b岷g tham chi岷縰 ch茅o g峄慶 ch岷 nh岷璶 c谩c k岷縯 th煤c d貌ng ch峄?c贸 CR (ISO 32000-1 搂7.5.1) v脿 kh么ng c貌n kh峄沺 v峄沬 c谩c ch峄?c谩i
xrefb锚n trongstartxref; vi峄嘽 qu茅t t峄?kh贸a d貌ng c贸 th锚m b峄?b岷 v峄?膽u么iendstreamgi峄憂g nh瓢 c谩c n啤i kh谩c v脿 hi峄噉 ti岷縩 qua c谩c th芒n d貌ng b峄?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峄璦 (Fixed)
- Tr矛nh qu茅t t峄?膽i峄僴 hi峄噉 b峄?qua c谩c chu峄梚 v膬n b岷, chu峄梚 hex v脿 ch煤 th铆ch trong khi c芒n b岷眓g
<</>>(ISO 32000-1 搂7.2.2), do 膽贸 c谩c t峄?膽i峄僴 ch峄゛ gi谩 tr峄?nh瓢(A >> B)ho岷穋 chu峄梚 hex n岷眒 s谩t d岷 ph芒n c谩ch 膽贸ng kh么ng c貌n b峄?c岷痶 ng岷痭 trong khi ph芒n t铆ch c煤 ph谩p trailer, catalog v脿 qu茅t tu芒n th峄?/li> - Vi峄嘽 tr铆ch xu岷 chu峄梚 v膬n b岷 hi峄噉 gi岷 m茫 t岷璸 h峄 tho谩t (escape) 膽岷 膽峄?c峄 搂7.3.4.2 B岷g 3 鈥?
\n \r \t \b \f, octal\ddd, c谩c d貌ng ti岷縫 n峄慽 v脿 chu岷﹏ h贸a EOL kh么ng tho谩t 鈥?thay v矛 sao ch茅p ch峄?c谩i tho谩t nguy锚n v膬n, kh么i ph峄 so s谩nh ch铆nh x谩c c峄/Producer,/GTS_PDFXVersionv脿/ISO_PDFEVersion膽峄慽 v峄沬 c谩c tr矛nh ghi s峄?d峄g tho谩t octal - C谩c chu峄梚 v膬n b岷 膽瓢峄 ghi b峄焛 tr矛nh ti锚m 膽i峄僲 膽谩nh d岷 hi峄噉 tho谩t CR, LF v脿 c谩c k媒 t峄?膽i峄乽 khi峄僴 kh谩c 膽峄?c谩c gi谩 tr峄?s峄憂g s贸t qua qu谩 tr矛nh chu岷﹏ h贸a k岷縯 th煤c d貌ng 峄?ph铆a ng瓢峄漣 膽峄峜 theo t峄玭g 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峄璦 (Fixed)
TPdf.SignPadesv脿SignPadesByteshi峄噉 膽i峄乶 ng瓢峄 t岷 c岷?b峄憂 tr瓢峄漬g/ByteRangec峄 t峄?膽i峄僴 ch峄?k媒; tr瓢峄沜 膽芒y ba tr瓢峄漬g cu峄慽 c霉ng gi峄?nguy锚n 峄?v峄?tr铆 gi峄?ch峄?b岷眓g kh么ng, do 膽贸 c谩c ch峄?k媒 膽瓢峄 t岷 ra khai b谩o m峄檛 ph岷 vi byte tr峄憂g v脿 th岷 b岷 khi x谩c minh trong c谩c tr矛nh x谩c th峄眂 tu芒n th峄?/li>- C谩c t峄?膽i峄僴 Document Time-stamp c峄 PAdES B-LTA nh岷璶 膽瓢峄 c霉ng m峄檛 hi峄噓 ch峄塶h 膽i峄乶 ng瓢峄
/ByteRange ValidatePadesCompliancehi峄噉 ch岷 nh岷璶 b峄?c峄 ch峄?k媒 ti锚u chu岷﹏ n啤i kho岷g tr峄憂g ph岷 vi byte ch峄゛ gi谩 tr峄?hex/Contents, v脿 ki峄僲 tra xem ph芒n 膽o岷 ph岷 vi th峄?hai k岷縯 th煤c ch铆nh x谩c 峄?cu峄慽 t峄噋; tr瓢峄沜 膽芒y ch峄?c谩c ph岷 vi kh么ng c贸 kho岷g tr峄憂g m峄沬 v瓢峄 qua ki峄僲 tra 膽峄?bao ph峄?/li>
Version 2.14.0
膼茫 th锚m (Added)
TPdf.ExportXFDFtu岷 t峄?h贸a t峄玭g gi谩 tr峄?tr瓢峄漬g bi峄僽 m岷玼 v脿 ch煤 th铆ch tr锚n t岷 c岷?c谩c trang th脿nh m峄檛 t脿i li峄噓 XFDF (ISO 19444-1), ph谩t ra<fields>cho c谩c gi谩 tr峄?bi峄僽 m岷玼 ph芒n c岷 v脿<annots>cho t岷 c岷?c谩c ki峄僽 ph峄?ch煤 th铆ch 膽瓢峄 h峄?tr峄?(text, highlight, underline, strikeout, squiggly, line, circle, square, caret, polygon, polyline, stamp, ink, freetext, fileattachment, sound, link, redact)TPdf.ImportXFDF膽峄峜 m峄檛 t脿i li峄噓 XFDF ng瓢峄 tr峄?l岷 PDF 膽茫 t岷, t岷 l岷 c谩c ch煤 th铆ch tr锚n c谩c trang t瓢啤ng 峄﹏g v脿 谩p d峄g gi谩 tr峄?tr瓢峄漬g v脿o ch煤 th铆ch widget c峄 ch煤ng- B岷 ghi
TPdfAnnotationnh岷璶 th锚m c谩c tr瓢峄漬gName(NM),Subject,ModificationDate(M),CreationDate,Icon,Opacity(CA), 膽i峄僲 cu峄慽 d貌ng, 膽峄塶h 膽a gi谩c/膽瓢峄漬g 膽a 膽o岷 v脿 c谩c tr瓢峄漬g c峄?ch峄?danh s谩ch m峄眂 膽峄?chu tr矛nh kh峄?h峄搃 XFDF b岷 to脿n si锚u d峄?li峄噓 ch煤 th铆ch 膽岷 膽峄?/li> - M岷玼
XfdfLabm峄沬 trong b峄?demo Delphi, C++Builder v脿 Lazarus minh h峄峚 chu tr矛nh kh峄?h峄搃 xu岷/nh岷璸
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 s峄?ki峄噉 host m峄沬 gi煤p 膽瓢a ra c谩c th么ng tin m脿 form-fill callback v2.13.0 tr瓢峄沜 膽芒y 膽茫 nu峄憈 m岷:
OnXfaUriAction,OnXfaPageCountChanged,OnXfaFocusChange,OnXfaEmail,OnXfaHttpRequest,OnXfaOpenFile,OnJavaScriptBeep,OnJavaScriptPrint,OnJavaScriptMail,OnJavaScriptSubmitForm; m峄峣 s峄?ki峄噉 膽峄乽 m岷穋 膽峄媙h 峄?h脿nh vi no-op hi峄噉 c贸 khi ch瓢a 膽瓢峄 g谩n, v矛 th岷?c谩c host hi峄噉 t岷 kh么ng b峄?岷h h瓢峄焠g - Thu峄檆 t铆nh ch峄?膽峄峜
TPdf.XfaFormPacketstr岷?v峄?岷h ch峄 nhanh m峄檛 l岷 c峄 t岷 c岷?c谩c g贸i XFA (TXfaPacketList), ho脿n thi峄噉 c谩c ki峄僽TXfaPacket/TXfaPacketList膽茫 khai b谩o tr瓢峄沜 膽芒y nh瓢ng ch瓢a 膽瓢峄 d霉ng - C谩c m茫 l峄梚 PDFium d脿nh ri锚ng cho XFA
FPDF_ERR_XFALOAD/FPDF_ERR_XFALAYOUThi峄噉 膽瓢峄 li锚n k岷縯 v脿 膽瓢a ra quaLastPdfError, thay th岷?cho l峄梚 "Unknown error" chung 膽峄慽 v峄沬 c谩c l峄梚 t岷/b峄?c峄 XFA
膼茫 thay 膽峄昳 (Changed)
FFI_DoURIActionWithKeyboardModifierhi峄噉 tham v岷OnXfaUriActiontr瓢峄沜 khi th峄眂 thi shell m峄檛 URI t峄?tr瓢峄漬g XFA, trao quy峄乶 ph峄?quy岷縯 cho host (b岷 m岷璽: m峄檛 tr瓢峄漬g XFA 膽峄檆 h岷 tr瓢峄沜 膽芒y c贸 th峄?kh峄焛 ch岷 c谩c URL t霉y 媒 v么 膽i峄乽 ki峄噉); c谩c tr矛nh x峄?l媒 ch瓢a 膽瓢峄 g谩n s岷?b岷 to脿n m岷穋 膽峄媙hShellExecuteWtr瓢峄沜 膽贸DecodeFormFieldTypehi峄噉 膽峄媙h tuy岷縩 c谩c lo岷 tr瓢峄漬g XFA quaIsXfaFormFieldthay v矛 c岷 tr煤c case 8 nh谩nh r玫 r脿ng, gi峄?cho enum 膽峄搉g b峄?v峄沬 c谩c gi谩 tr峄?FPDF_FORMFIELD_XFA_*theo offset th峄?t峄?/li>
膼茫 s峄璦 (Fixed)
ValidatePdfAhi峄噉 b谩o c谩o c谩c khi岷縰 n岷 PDF/A-1 s峄?d峄g d貌ng tham chi岷縰 ch茅o PDF 1.5 ho岷穋 d貌ng 膽峄慽 t瓢峄g v峄沬 v岷 膽峄?m峄沬pvaiPdfA1Pdf15Structure, trong khi v岷玭 ti岷縫 t峄 cho ph茅p c谩c d貌ng 膽峄慽 t瓢峄g 膽峄慽 v峄沬 PDF/A-2 v脿 PDF/A-3
Version 2.13.0
膼茫 th锚m (Added)
- H峄?tr峄?th峄漣 gian ch岷 XFA (XML Forms Architecture) 膽岷 膽峄?
TPdf.InitializeFormFillhi峄噉 k岷縯 n峄慽 t岷 c岷?14 callbackFPDF_FORMFILLINFOphi锚n b岷 2 (FFI_DisplayCaret,FFI_GotoURL,FFI_PageEvent,FFI_PopupMenu,FFI_OpenFile,FFI_EmailTo,FFI_UploadTo,FFI_GetPlatform,FFI_GetLanguage,FFI_DownloadFromURL,FFI_PostRequestURL,FFI_PutRequestURL,FFI_OnFocusChange,FFI_DoURIActionWithKeyboardModifier) v脿 膽铆nh k猫mIPDF_JsPlatform膽峄?pdfium.dllh峄?tr峄?XFA c贸 th峄?k岷縯 xu岷 v脿 vi岷縯 script cho c谩c bi峄僽 m岷玼 XFA 膽峄檔g - 膼啤n v峄?
Lib\FPdfXfa.pasm峄沬 khai b谩o c谩c h岷眓g s峄?XFA (FXFA_PAGEVIEWEVENT_*,FXFA_MENU_*,FXFA_SAVEAS_*,FPDF_FORMFIELD_XFA_*) v脿 ki峄僽TXfaPacket/TXfaSaveFormattr瓢峄沜 膽芒y ch峄?膽瓢峄 tham chi岷縰 trong ch煤 th铆ch - Tr矛nh 膽峄峜 g贸i t末nh XFA tr锚n
TPdf:GetXfaPacketCount/GetXfaPacketName/GetXfaPacketContent/GetXfaPacketByNamec霉ng v峄沬GetXfaTemplate/GetXfaDatasets/GetXfaConfigtr铆ch xu岷 g贸i XFAtemplate,datasetsv脿configd瓢峄沬 d岷g XML th么 m脿 kh么ng c岷 m么i tr瓢峄漬g ch岷 h峄?tr峄?XFA 鈥?h峄痷 铆ch cho ki峄僲 to谩n tu芒n th峄?v脿 di chuy峄僴 d峄?li峄噓 - D貌 t矛m kh岷?n膬ng:
XfaFeaturesAvailableto脿n c峄, v脿 theo t峄玭g t脿i li峄噓TPdf.XfaRuntimeAvailable(li峄噓FPDF_LoadXFAc贸 th峄眂 s峄?th脿nh c么ng) v脿TPdf.XfaStaticReadable(li峄噓 c谩c xu岷 b岷 c峄 tr矛nh 膽峄峜 g贸i c贸 膽瓢峄 ph芒n gi岷) TPdfFormFieldType膽瓢峄 m峄?r峄檔g v峄沬fiXfa,fiXfaCheckBox,fiXfaComboBox,fiXfaImageField,fiXfaListBox,fiXfaPushButton,fiXfaSignature,fiXfaTextField, v峄沬DecodeFormFieldType谩nh x岷?c谩c gi谩 tr峄?FPDF_FORMFIELD_XFA_*m峄沬- C谩c s峄?ki峄噉 host JavaScript tr锚n
TPdf:OnJavaScriptAlert,OnJavaScriptResponse,OnXfaGotoUrlv脿OnXfaRuntimeMissingcho ph茅p host t霉y ch峄塶h c谩c h峄檖 tho岷 JS v脿 膽i峄乽 h瓢峄沶g XFA, ho岷穋 ph岷 峄﹏g khi t脿i li峄噓 XFA kh么ng th峄?ch岷 c么ng c峄?/li> - M岷玼 Delphi
XfaLabm峄沬 minh h峄峚 ph谩t hi峄噉 XFA, tr铆ch xu岷 g贸i, d貌 t矛m kh岷?n膬ng v脿 膽瓢峄漬g d岷玭 d峄?ph貌ng khi thi岷縰 m么i tr瓢峄漬g ch岷
膼茫 thay 膽峄昳 (Changed)
TPdf.LoadDocumenthi峄噉 qu茅t tr瓢峄沜 膽岷 v脿o 膽峄?t矛m 膽i峄僲 膽谩nh d岷 XFA (/XFAtrong t峄?膽i峄僴 AcroForm, ho岷穋 catalog/NeedsRendering) v脿, khi t矛m th岷, t峄?膽峄檔g ch峄峮pdfium.v8.dllb岷眓g c谩ch 膽岷穞EnableV8Engine := Truetr瓢峄沜 khi th瓢 vi峄噉 singleton 膽瓢峄 t岷 l岷 膽岷; m峄檛 khipdfium.dllth么ng th瓢峄漬g 膽茫 膽瓢峄 t岷, ti岷縩 tr矛nh kh么ng th峄?chuy峄僴 膽峄昳, n锚nOnXfaRuntimeMissings岷?b谩o hi峄噓 tr瓢峄漬g h峄 膽贸TPdf.GetPageCounthi峄噉 ph岷 谩nh s峄?trang m脿 c么ng c峄?XFA b谩o c谩o quaFFI_PageEventsau khi ph芒n trang 膽峄檔g, thay v峄?ch峄?c贸 c芒y trang PDF t末nh- Khi t脿i li峄噓 XFA 膽瓢峄 m峄?nh瓢ng m么i tr瓢峄漬g ch岷 kh么ng kh岷?d峄g,
InitializeFormFillhi峄噉 ghimversion=1v脿xfa_disabled=1thay v矛 y锚u c岷 phi锚n b岷 2 v峄沬 c谩c callback kh么ng 膽瓢峄 g谩n, 膽i峄乽 m脿 tr瓢峄沜 膽芒y c贸 nguy c啤 g芒y ra gi岷 tham chi岷縰 con tr峄?callback x岷
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峄璦 (Fixed)
ValidatePdfACompliancehi峄噉 gi岷 m茫 c谩c token t锚n PDF 膽茫 tho谩t tr瓢峄沜 khi kh峄沺 v峄沬 JavaScript, LZWDecode, Type1 v脿 c谩c t锚n b峄?c岷 li锚n quan, do 膽贸 c谩c t锚n b峄?che gi岷 nh瓢ng gi峄憂g h峄噒 nhau v峄?m岷穞 ng峄?ngh末a 膽瓢峄 b谩o c谩o ch铆nh x谩c- C谩c ki峄僲 tra h矛nh 岷h n峄檌 tuy岷縩 PDF/A hi峄噉 t峄?ch峄慽 gi谩 tr峄?
/Filterv脿/Fs峄?d峄g/LZWDecode, vi岷縯 t岷痶/LZW, ho岷穋/Crypt, bao g峄搈 c岷?d岷g m岷g v脿 d岷g t锚n 膽茫 tho谩t - X谩c th峄眂 PDF/A hi峄噉 b谩o c谩o c谩c d貌ng si锚u d峄?li峄噓 c贸 b峄?l峄峜 d貌ng b峄?c岷, h峄?s啤 ICC c峄 OutputIntent c贸 s峄?l瓢峄g th脿nh ph岷
/Nb峄?thi岷縰 ho岷穋 kh么ng nh岷 qu谩n, v脿 c谩c 膽岷穋 t岷?t峄噋 nh煤ng PDF/A-3 c贸/AFRelationshipb峄?thi岷縰 ho岷穋 kh么ng h峄 l峄?/li>
Version 2.12.0
膼茫 th锚m (Added)
- C谩c y锚u c岷 HTTP TSA hi峄噉 thi岷縯 l岷璸 th峄漣 gian ch峄?(timeout) 30 gi芒y r玫 r脿ng cho t峄玭g giai 膽o岷 (resolve/connect/send/receive) qua
WinHttpSetTimeouts, do 膽贸 m峄檛 c啤 quan c岷 d岷 th峄漣 gian (timestamp authority) ch岷璵 ho岷穋 kh么ng th峄?ti岷縫 c岷璶 kh么ng th峄?l脿m treo lu峄搉g k媒 v么 h岷 thay v矛 ph峄?thu峄檆 v脿o c谩c m岷穋 膽峄媙h ng岷 膽峄媙h c峄 WinHttp - Vi峄嘽 l岷 nonce tr锚n m峄梚 y锚u c岷 cho c谩c y锚u c岷 d岷 th峄漣 gian PAdES B-T / B-LTA khi tr矛nh g峄峣 b峄?qua
TPadesSignOptions.Nonce: ph茅p g岷璸 SHA-256 c峄 b峄?膽岷縨 膽啤n 膽i峄噓 + 膽峄搉g h峄?t瓢峄漬g +GetTickCount64+ id ti岷縩 tr矛nh thay th岷?cho ph瓢啤ng 谩n d峄?ph貌ngc峄?膽峄媙h tr瓢峄沜 膽贸, do 膽贸 hai y锚u c岷 膽瓢峄 ph谩t h脿nh trong c霉ng m峄檛 mili gi芒y kh么ng c貌n s峄?d峄g l岷 c霉ng m峄檛 nonce ch峄憂g ph谩t l岷 PdfInflatehi峄噉 gi峄沬 h岷 膽岷 ra gi岷 n茅n 峄?m峄ヽ 256 MiB 膽峄?ng膬n d貌ng n茅n zlib l脿m c岷 ki峄噒 b峄?nh峄?膽峄慽 v峄沬 膽岷 v脿o 膽峄檆 h岷 ho岷穋 b峄?h峄弉g (m峄檛 “zlib bomb”); gi峄沬 h岷 n脿y l脿 h脿o ph贸ng 膽峄慽 v峄沬 b岷 k峄?d貌ng PDF th峄眂 t岷?n脿o
膼茫 thay 膽峄昳 (Changed)
- Tr峄檔 l峄沺 ph峄?
TPdfView(l脿m n峄昳 b岷璽 t矛m ki岷縨, l峄盿 ch峄峮 v膬n b岷, t峄?膽ang 膽峄峜, l峄盿 ch峄峮 tr岷 r峄檔g) kh么ng c貌n s峄?d峄gGetPixel/SetPixelVtr锚n t峄玭g pixel; h矛nh ch峄?nh岷璽 hi峄噉 膽瓢峄 tr峄檔 th么ng qua m峄檛TBitmapngo脿i m脿n h矛nh 32-bpp v脿ScanLinetrong m峄檛 l瓢峄 duy nh岷, lo岷 b峄?h脿ng ng脿n l岷 chuy峄僴 膽峄昳 h岷 nh芒n GDI cho m峄梚 l岷 v岷?v脿 gi煤p c谩c l峄盿 ch峄峮 l峄沶 ph岷 h峄搃 nhanh ch贸ng FPdfAsn1.TDerReader.ReadIntegerhi峄噉 t峄?ch峄慽 c谩c tr瓢峄漬g INTEGER d脿i h啤n 8 byte (v脿 c谩c s峄?芒m 8 byte c贸 bit d岷 y锚u c岷shl >= 64), tr岷?v峄?0 thay v矛 t铆nh to谩n gi谩 tr峄?sai th么ng qua h脿nh vi d峄媍h bit kh么ng x谩c 膽峄媙h tr锚n 膽岷 v脿o ASN.1 c峄 CMS/PAdESParseTimeStampRespkh么ng c貌n ph岷 h峄搃 l岷 nonce y锚u c岷 d瓢峄沬 d岷gTPadesTimestamp.Nonce; cho 膽岷縩 khi tr矛nh duy峄噒 TSTInfo x谩c minh nonce 膽瓢峄 tr岷?v峄?ho岷 膽峄檔g, tr瓢峄漬g n脿y s岷?峄?m峄ヽ 0 膽峄?b谩o hi峄噓 “not verified” thay v矛 mang l岷 cho tr矛nh g峄峣 s峄?tin c岷瓂 gi岷?t岷 r岷眓g ph岷 h峄搃 d岷 th峄漣 gian l脿 m峄沬
膼茫 s峄璦 (Fixed)
PointsToPixels膽茫 tr岷?v峄?膽岷 v脿o c峄 n贸 kh么ng thay 膽峄昳 cho m峄梚 DPI: s峄?chia l脿PointsPerInch(h岷眓g s峄?72) thay v矛 s峄?72 tr峄眂 ti岷縫, l脿m s峄 膽峄?c么ng th峄ヽ th脿nhResult := Points; b岷 k峄?tr矛nh g峄峣 b锚n ngo脿i n脿o th峄眂 hi峄噉 膽峄媙h k铆ch th瓢峄沜 t峄?points→device-pixel th么ng qua helper n脿y hi峄噉 nh岷璶 膽瓢峄 gi谩 tr峄?ch铆nh x谩cPoints × PixelsPerInch / 72PdfMaxObjNum膽茫 膽岷縨 thi岷縰 tr锚n c谩c t脿i li峄噓 s峄?d峄g d貌ng 膽峄慽 t瓢峄g (PDF 1.5+ ObjStm): c谩c 膽峄慽 t瓢峄g 膽瓢峄 n茅n b锚n trong m峄檛/ObjStmkh么ng mang nh茫nN 0 obj, do 膽贸 vi峄嘽 qu茅t byte th么 膽茫 b峄?s贸t ch煤ng, v脿 c谩c tr矛nh ti锚m c岷 ph谩tMaxObj+1cho c谩c 膽峄慽 t瓢峄g m峄沬 s岷?va ch岷 v峄沬 c谩c th脿nh vi锚n ObjStm 岷﹏ v脿 芒m th岷 l脿m h峄弉g t峄噋; vi峄嘽 qu茅t hi峄噉 m峄?r峄檔g c谩c d貌ng 膽峄慽 t瓢峄g tr瓢峄沜 膽峄?m峄峣 s峄?膽峄慽 t瓢峄g 膽峄乽 hi峄僴 th峄?/li>InjectPdfAMarkerskh么ng c貌n gi岷?m岷 khi岷縰 n岷 tu芒n th峄?PDF/A tr锚n t脿i li峄噓 膽瓢峄 m茫 h贸a: PDF/A (ISO 19005-1 §7.1) c岷 m茫 h贸a, v脿 tr矛nh ti锚m tr瓢峄沜 膽芒y sao ch茅p ngu峄搉 qua v峄沬 c谩c 膽i峄僲 膽谩nh d岷 m岷穋 d霉 ngay l岷 x谩c th峄眂 ti岷縫 theo s岷?t峄?ch峄慽 n贸; khiHasEncrypt膽瓢峄 膽岷穞, ngu峄搉 hi峄噉 膽瓢峄 chuy峄僴 qua m脿 kh么ng 膽峄昳; 膽瓢峄漬g d岷玭TPdf.SaveAsPdfAth么ng th瓢峄漬g 膽茫 t瓢峄沜 b峄?m茫 h贸a (saRemoveSecurity) tr瓢峄沜 khi ti锚m, v矛 v岷瓂 膽i峄乽 n脿y ch峄?岷h h瓢峄焠g 膽岷縩 c谩c tr矛nh g峄峣 tr峄眂 ti岷縫PdfReadStreamByteshi峄噉 t峄?ch峄慽 m峄檛/Lengthl峄沶 h啤n to脿n b峄?t峄噋 tr瓢峄沜 khi c岷 ph谩t b峄?膽峄噈 k岷縯 qu岷? 膽贸ng m峄檛 膽瓢峄漬g d岷玭 c岷 ph谩t s峄沵 tr锚n m峄檛 膽峄?d脿i gi谩n ti岷縫 b峄?h峄弉g ho岷穋 膽峄檆 h岷
Version 2.11.0
膼茫 th锚m (Added)
- B岷 ghi
FPDF_FILEHANDLERc峄 PDFium hi峄噉 khai b谩o s谩u callback c峄 n贸 (Release,GetSize,ReadBlock,WriteBlock,Flush,Truncate) d瓢峄沬 d岷g c谩c tr瓢峄漬g th峄眂 thay v矛 ch煤 th铆ch, kh峄沺 v峄沬 b峄?c峄 ti锚u 膽峄?C; c谩c callback chuy峄僴 t峄噋 XFA FFI (FFI_OpenFile/FFI_EmailTo/FFI_UploadTo/FFI_DownloadFromURL) tr岷?v峄?ho岷穋 ti锚u th峄?PFPDF_FILEHANDLERv岷玭 ch瓢a 膽瓢峄 tri峄僴 khai trong l峄沺 form-fill Pascal, nh瓢ng ki峄僽 n脿y hi峄噉 膽茫 ch铆nh x谩c v峄?m岷穞 c岷 tr煤c cho b岷 k峄?膽瓢峄漬g d岷玭 submit/upload XFA n脿o trong t瓢啤ng lai - Vi峄嘽 t岷 v脿 h峄 t岷 th瓢 vi峄噉 PDFium (
LoadLibrary/UnloadLibrary) hi峄噉 膽瓢峄 tu岷 t峄?h贸a b峄焛 m峄檛 critical section to脿n c峄 c峄 ti岷縩 tr矛nh, do 膽贸 hai lu峄搉g l脿m vi峄嘽TPdfFuture<T>(ho岷穋 m峄檛 lu峄搉g l脿m vi峄嘽 ch岷 膽ua v峄沬 lu峄搉g ch铆nh) kh么ng th峄?c霉ng quan s谩t th岷PDFiumLibrary=0v脿 li锚n k岷縯 k茅p, ho岷穋 gi岷 ph贸ng DLL trong khi m峄檛 lu峄搉g kh谩c 膽ang 峄?gi峄痑 qu谩 tr矛nh li锚n k岷縯 - Ph岷
initialization/finalizationhi峄噉 g峄峣UnloadLibrarykhi h峄 t岷 unit, 膽岷 b岷FPDF_DestroyLibrarych岷 (n峄慽 lu峄搉g l脿m vi峄嘽, h峄 b峄?c么 l岷璸 V8, th谩o d峄?font/b峄?膽峄噈) thay v矛 d峄盿 v脿o h峄?膽i峄乽 h脿nh 膽峄?thu h峄搃 DLL
膼茫 thay 膽峄昳 (Changed)
TPdf.SetActivehi峄噉 nu峄憈 b岷 k峄?ngo岷 l峄?n脿o trong qu谩 tr矛nh t岷 (tr瓢峄沜 膽芒y ch峄?c贸EPdfError), do 膽贸 m峄檛 l峄梚 d貌ng ho岷穋 vi ph岷 truy c岷璸 trong qu谩 tr矛nh thi岷縯 l岷璸 bi峄僽 m岷玼/trang s岷?膽峄?l岷Active=Falsethay v矛 m峄檛 th脿nh ph岷 膽瓢峄 t岷 m峄檛 ph岷 v峄沬 tr岷g th谩i kh么ng x谩c 膽峄媙h- M茫 h贸a k媒 t峄?nh岷 qu谩n cho c谩c 膽峄慽 s峄?kh贸a si锚u d峄?li峄噓 PDFium:
TPdf.GetMetaTexthi峄噉 s峄?d峄g c霉ng m峄檛 s峄?ph芒n t谩ch FPCAnsiString/ DelphiUTF8Encodenh瓢GetViewerPreferencev脿 c谩c 膽瓢峄漬g d岷玭 t岷, thay v矛 m峄檛 茅p ki峄僽AnsiString(Tag)膽啤n thu岷 - Kh峄?tr霉ng l岷穚 c谩c helper
BytesToAnsi,AnsiToBytes,WriteBytesv脿WriteStr:FPdfCompresshi峄噉 nh岷璸 ch煤ng t峄?FPdfPdfCommon(c谩c b铆 danhWriteBytesToStream/WriteAnsiToStreamc峄 n贸 膽茫 膽瓢峄 thu h峄搃) v脿 n岷 ch峄搉gBytesToAnsiba 膽峄慽 s峄?d瓢 th峄玜 trongFPdfPdfa膽茫 b峄?lo岷 b峄?FPdfAsn1gi峄?b岷 sao c峄 b峄?c峄 n贸 theo thi岷縯 k岷?膽峄?gi峄?cho l峄沺 m岷璽 m茫 膽峄檆 l岷璸 v峄沬 unit l峄沺 tu芒n th峄?/li>
膼茫 s峄璦 (Fixed)
- R貌 r峄?t脿i nguy锚n trong
TPdf.LoadDocument(t峄噋, b峄?nh峄?TBytes,TMemoryStream, d貌ng t霉y ch峄塶h) v脿TPdf.CreateDocument: n岷縰InitializeFormFillho岷穋ReloadPageph谩t sinh sau khiFPDF_LoadDocument/FPDF_CreateNewDocumentth脿nh c么ng, handleFPDF_DOCUMENTg峄慶 b峄?r貌 r峄?v矛FActivev岷玭 l脿 False t岷 th峄漣 膽i峄僲 膽贸; m峄梚 膽瓢峄漬g d岷玭 hi峄噉 bao b峄峜 thi岷縯 l岷璸 h岷璾 t岷 trongtry/exceptv脿 膽贸ng t脿i li峄噓 khi th岷 b岷, 膽峄?l岷 th脿nh ph岷 kh么ng ho岷 膽峄檔g m峄檛 c谩ch s岷h s岷?/li> - Ch岷﹏ 膽o谩n t岷 PDFium DLL th芒n thi峄噉 h啤n:
CheckLoadLibraryph谩t hi峄噉ERROR_BAD_EXE_FORMAT(193) v脿 b谩o c谩o s峄?kh么ng kh峄沺 ki岷縩 tr煤c 32/64-bit tr峄?膽岷縩 b岷 d峄眓gDLLs/Win32ho岷穋DLLs/Win64t瓢啤ng 峄﹏g, thay v矛 ch峄?truy峄乶 膽岷 l峄梚 H膼H chung;CheckGetProcAddresshi峄噉 tuy锚n b峄?r岷眓gpdfium.dll膽瓢峄 tri峄僴 khai c农 h啤n li锚n k岷縯 khi thi岷縰 m峄檛 xu岷 b岷 b岷痶 bu峄檆, thay v矛 v膬n b岷 H膼H "procedure not found" thu岷 t煤y
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)
- Tính nhất quán giữa các tiêu chuẩn:
TPdf.ValidatePdfUacó thêm hai kiểm tra được chuyển cổng từ trình xác thực PDF/A;pvuaiAnnotationFlagsViolation(§7.18.1) gắn cờ một chú thích không được miễn trừ mang cờ Hidden / Invisible / NoView, điều này phá vỡ luồng đọc của công nghệ hỗ trợ;pvuaiActionTargetMissing(§7.18.5) gắn cờ một hành động GoToR / URI / SubmitForm thiếu khóa mục tiêu bắt buộc (/F+/D, /URI, /F), khiến liên kết không thể sử dụng bởi AT
Đã sửa (Fixed)
- Hợp nhất cây cấu trúc đa trang: vòng lặp tích lũy
AllElemstrongTPdf.ValidatePdfUahiện thiết lập lại ParentIndex của mỗi phần tử từ mảng cục bộ của trang sang mảng đã hợp nhất; nếu không có điều này, các phần tử con của trang 2 sẽ giữ một chỉ mục cục bộ của trang trỏ vào phân đoạn của trang 1, âm thầm làm hỏng mọi kiểm tra phụ thuộc vào ParentIndex (cấu trúc bảng/danh sách, số lượng H-child §7.4.4, EnclosingTable) - Phân tích cú pháp RoleMap:
PdfReadRoleMapPairskhông còn chấm dứt toàn bộ việc quét khóa/giá trị khi một giá trị là một tham chiếu gián tiếp (N 0 R) hoặc một mảng ([...]) — cả hai đều là các dạng RoleMap hợp lệ theo ISO 32000-1 14.8.5.1; giờ đây nó chỉ bỏ qua mục đó (Continue) thay vì ngắt vòng lặp (Break), loại bỏ các báo động giảpvuaiRoleMapUnresolvedtrên các kiểu được ánh xạ sau một mục gián tiếp/mảng
Đã thay đổi (Changed)
FPdfPreflightReport: 18 hoạt độngTPdfUaValidationIssuegiá trị trước đây rơi vào danh mục và khuyến nghị chung “thiếu điểm đánh dấu” giờ đây mang các danh mục chính xác (Cấu trúc / Nội dung / Siêu dữ liệu / Bảo mật) và các khuyến nghị cụ thể cho từng điều khoản; đồng thời đã sửa lỗi đánh máy puaNone / pua1 → pucNone / puc1 trongPDFSpecComplianceMatrix.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)
- Đợt rà soát
TPdf.ValidatePdfUalượt thứ hai đã đóng sáu khoảng trống ISO 14289-1 được phát hiện qua việc xem xét từng điều khoản và quét lại các API gốc Pdfium đã được bọc nhưng chưa được sử dụng bởi luồng PDF/UA;pvuaiHeadingFormatInvalid(§7.4.3) gắn cờ các thẻ tiêu đề do người dùng định nghĩa bắt đầu bằng H nhưng mang ký tự phân tách, khoảng trắng hoặc chữ số La Mã thay vì các chữ số Ả Rập thuần túy;pvuaiMissingDocumentOutline(§7.17, nên có) gắn cờ một tài liệu nhiều trang không mang sơ đồ dấu trang (tài liệu một trang được miễn trừ);pvuaiStructElementLangInvalid(§7.2) gắn cờ một giá trị/Langcủa structure element không phải là thẻ BCP 47 hợp lệ;pvuaiWidgetMissingPrintField(§7.14 / §7.18.4) gắn cờ một structure element Widget thiếu chủ sở hữu thuộc tính PrintField;pvuaiLinkNotInStructureTree(§7.18.5) gắn cờ một tài liệu có các chú thích /Subtype /Link không được hiển thị dưới dạng các structure element Link;pvuaiPdfiumAnnotationMissingContentsvàpvuaiPdfiumLinkMissingContents(§7.18.1 / §7.18.5) thêm một quét chú thích mô hình đối tượng Pdfium chính xác để miễn trừ cho các chú thích ẩn, nằm ngoài crop-box, Popup và Widget — loại bỏ các báo động giả của phép phân tích heuristic cấp độ byte vốn không thể đọc cờ /F hoặc /Rect
Version 1.93.0
Đã thêm (Added)
TPdf.ValidatePdfUahiệ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, mô phỏng kiến trúc vòng 7 của PDF/A: nó duyệt qua các đối tượng văn bản của mỗi trang thông quaFPDFTextObj_GetFont→FPDFFont_GetIsEmbedded(pvuaiPdfiumFontNotEmbedded, §7.21.4) và quét từng ký tự thông quaFPDFText_HasUnicodeMapError(pvuaiPdfiumUnicodeMapError, §7.21.7) vàFPDFText_GetUnicode(pvuaiPdfiumNotDefGlyph, §7.21.8) — chính xác hơn các 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 hoặc không xuất hiện /ToUnicode nào; lượt duyệt này ngắt sớm ở ba cấp độ: vòng lặp trang thoát khi cả ba lỗi lớp Pdfium đều đã được thiết lập, vòng lặp trên từng đối tượng thoát ở font không nhúng đầu tiên, và quét ký tự bỏ qua lượt kiểm tra .notdef khi UnicodeMapError đã xảy ra; PDF/UA là trình xác thực tiêu chuẩn PDF cuối cùng chưa có lớp mô hình đối tượng 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)
- Hiệu năng lớp mô hình đối tượng Pdfium của
TPdf.ValidatePdfA: lượt duyệt trang/đối tượng hiện ngắt sớm ở ba cấp độ — vòng lặp trang thoát khi tất cả các lỗi lớp Pdfium thích hợp đã được tìm thấy, vòng lặp trên từng đối tượng thoát khi cả hai lỗi trên từng đối tượng (nhúng font + độ trong suốt) được thiết lập, và quét ký tự trang văn bản bỏ qua lượt kiểm tra .notdef khiUnicodeMapErrorđã xảy ra; các kiểm tra tính khả dụng APIAssigned()và các cờ tuân thủ được lưu vào các biến boolean cục bộ một lần trước vòng lặp thay vì được đánh giá lại trên mỗi trang/đối tượng/ký tự; trên một tài liệu lớn không tuân thủ, lượt duyệt hiện có thể dừng sau trang đầu tiên thay vì quét tất cả các trang; trên một tài liệu tuân thủ, chi phí phụ trội trên mỗi trang sẽ thấp hơn (không có các lệnh gọiAssignedlặp lại)
Version 1.88.0
Đã thêm (Added)
ValidatePdfXcó thêm tám giá trịTPdfXValidationIssuecấp nội dung mới bao gồm các hạn chế trao đổi in ấn mà PDF/X áp đặt ngoài các điểm đánh dấu định dạng tệp:pvxiLzwForbidden(/LZWDecode),pvxiJavaScriptForbidden(/JavaScript),pvxiFormFieldsForbidden(/AcroForm / /XFA),pvxiAdditionalActions(/AA),pvxiEmbeddedFilesForbidden(/EmbeddedFiles / /FileAttachment),pvxiOpiForbidden(/OPI / /Alternates),pvxiMissingTrimBox(không có /TrimBox trên bất kỳ trang nào), vàpvxiTrappedNotSet(/Trapped vắng mặt hoặc /Unknown); trình xác thực PDF/X trước đây chỉ kiểm tra các điểm đánh dấu XMP/OutputIntent; đây là lượt kiểm tra cấp nội dung đầu tiên của nó; các helper dùng chungPdfStructureBytes/PdfHasName/PdfCountNameđã được thêm vàoFPdfPdfCommonso tất cả các đơn vị tuân thủ có thể sử dụng chúng
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 (Thêm mới)
- Thêm
TPdf.MeasureTextvàTPdf.MeasureTextWidth: đo chiều rộng và chiều cao kết xuất của văn bản theo font và cỡ chữ đã cho mà không thêm nội dung vào trang (đơn vị người dùng PDF, 1 đơn vị = 1/72 inch), cho phép tính toán bố cục và tự động xuống dòng bổ sung choAddText; được cung cấp qua unit độc lậpFPdfMeasuredưới dạng class helper
Đã thay đổi (Thay đổi)
- Demo
Demo\Delphi\MergePDF,Demo\CBuilder\MergePDF,Demo\Lazarus\MergePDFđược nâng cấp cho cả ba IDE: phạm vi trang theo từng tệp, đường dẫn đầu ra tùy chọn, loại bỏ trùng lặp, nhật ký thực thi, nút hủy, tóm tắt kết quả hợp nhất; bookmark và metadata lấy từ tệp nguồn đầu tiên - Demo CreatePDF nay bao gồm tùy chọn Văn bản Châu Âu cho văn bản có dấu tiếng Séc/Pháp/Đức/Tây Ban Nha/Bồ Đào Nha/Ba Lan/Thổ Nhĩ Kỳ, kiểm tra lựa chọn font và xử lý Unicode (EuropeanText trước đây đã được tích hợp vào)
- Đã xóa
ExtractTextPagesvàEuropeanText: tính năng trích xuất từng trang được bao phủ bởi các tùy chọn phạm vi trang/dấu phân cách trongExtractText; tính năng kết xuất đa ngôn ngữ của EuropeanText đã được tích hợp vào CreatePDF
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 PDFiumPas đượ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 PDFiumPas đượ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 PDFiumPas - 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 PDFiumPas 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 PDFiumPas 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 để PDFiumPas 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
Version 1.6.5
- Thêm kiểm tra cây cấu trúc Tagged PDF qua TPdf.StructureElements và TPdfView.StructureElements, bao gồm loại phần tử, tiêu đề, alternate text, actual text, expansion text, ngôn ngữ, ID nội dung được đánh dấu, số lượng con và số lượng thuộc tính
- Thêm chọn chế độ in PDFium của Windows qua TPdfPrintMode và SetPdfPrintMode, bao phủ các chế độ in EMF, text-only, PostScript, pass-through, image-mask và Type 42
- Thêm các binding mức thấp cho những public export còn lại của DLL PDFium standard, bao phủ hành động JavaScript, cờ form annotation / màu font, trạng thái hoạt động của page-object, chèn theo chỉ mục, giá trị float của content-mark, dữ liệu ICC profile của ảnh, xóa form-object và vị trí văn bản
- Mở rộng bộ regression Delphi, C++Builder và Lazarus lên 59 case mỗi bộ, bao phủ cây cấu trúc Tagged PDF, chế độ in và binding public export
Version 1.6.4
- Cập nhật các demo Delphi, C++Builder và Lazarus để tự động mở PDF đã tạo, văn bản / ảnh đã xuất và thư mục đầu ra batch sau khi tạo thành công
Version 1.6.3
- Đã mở rộng các bộ hồi quy Delphi, C++Builder và Lazarus đã căn chỉnh lên 56 ca mỗi bộ với bao phủ GUI của TPdfView cho các trợ giúp fit-zoom, vòng lặp round-trip tọa độ device/page, kiểm tra va chạm ký tự và pan chuột qua các control viewer cửa sổ ẩn
- Các fixture TPdfView giờ dùng kích thước viewer tường minh và các lớp con chỉ dùng cho kiểm thử để chạm tới các handler chuột được bảo vệ trong khi vẫn giữ cho các bộ chạy hoàn toàn headless
Version 1.6.2
- Đã sửa TPdf.AddPage(0, ...) để trang đầu tiên được chèn trở thành trang hiện hoạt ngay lập tức. Mã mẫu hiện có vẫn hoạt động, trong khi PageNumber giờ báo một trang một-based hợp lệ sau khi chèn
- Đã đồng bộ phiên bản package Lazarus và mở rộng các bộ hồi quy Delphi, C++Builder và Lazarus đã căn chỉnh lên 52 ca mỗi bộ
Version 1.6.1
- Đã sửa một yêu cầu phiên bản tối thiểu sai trong trình kiểm tra tuân thủ phiên bản PDF của v1.6.0: SetState action được phân loại lại từ PDF 1.5 xuống PDF 1.2, khớp với PDF 1.2 Reference 6.9.9. Các mục tiêu SaveAs PDF 1.3 / 1.4 có chứa SetState action giờ lưu đúng thay vì bị từ chối
- Đã thêm các kiểm tra từ vựng PDF 1.2 tương ứng theo cùng mục đặc tả: Sound, Movie, và NOP actions cùng color space Separation giờ bị chặn khi phiên bản mục tiêu chọn cũ hơn PDF 1.2
- Đã mở rộng các bộ hồi quy Delphi, C++Builder và Lazarus lên 50 ca mỗi bộ bằng cách thêm một kiểm thử chấp nhận PDF 1.4 SetState dương để cố định ranh giới đã sửa
Version 1.6.0
- Hardened explicit PDF 1.0 through PDF 1.7 SaveAs targets with a full version-feature validator that covers the entire PDF 1.1 through ISO 32000-1 feature timeline. The validator now blocks saves that contain dictionary entries, filter names, annotation subtypes, action types, fonts, color spaces, or encryption parameters introduced after the chosen target version. Ví dụ: JBIG2Decode (1.4+), MarkInfo / Tagged PDF (1.4+), OutputIntents (1.4+), ICCBased / DeviceN / BleedBox / TrimBox / ArtBox / StructTreeRoot (1.3+), Polygon / PolyLine / Caret / Screen / Watermark / Redact annotations, AES and AES-256 encryption (CFM AESV2 / AESV3), Perms / Legal / Requirements / NeedsRendering catalog entries, and version-gated actions such as JavaScript, Trans, SetState, Rendition, GoToE, GoTo3DView are all rejected when the target PDF version cannot represent them
Version 1.5.13
- Đã mở rộng các bộ hồi quy Delphi, C++Builder và Lazarus lên 49 ca mỗi bộ, thêm bao phủ trực tiếp cho việc từ chối ICCBased color spaces, Tagged PDF MarkInfo, Polygon annotations, AES (V2) encryption, và Redact annotations đối với các mục tiêu PDF 1.2 / 1.3 / 1.4 / 1.5 / 1.6 tương ứng
Version 1.5.12
- Đã sửa xử lý sau SaveAs cho các lần ghi lại incremental catalog. PDFiumPas giờ xác thực indirect object lặp lại mới nhất, nên các ghi đè /Version catalog hiện có được thay thế đúng cách khi lưu sang phiên bản PDF mục tiêu cũ hơn rõ ràng
- Đã mở rộng các bộ hồi quy Delphi, C++Builder và Lazarus lên 44 ca mỗi bộ, thêm bao phủ trực tiếp cho việc thay thế /Version catalog lỗi thời, chuẩn hóa phiên bản catalog PDF 1.4, và từ chối các tính năng transparency và portable-collection khi phiên bản PDF mục tiêu đã chọn không thể biểu diễn chúng
Version 1.5.11
- Đã siết chặt đầu ra SaveAs theo phiên bản cho các mục tiêu PDF 1.3, 1.4, 1.5, 1.6 và 1.7 rõ ràng. PDFiumPas giờ chuẩn hóa các dấu phiên bản catalog, giữ OpenAction Fit Height mặc định an toàn theo phiên bản, và từ chối các tính năng PDF mới hơn khi phiên bản mục tiêu đã chọn không thể biểu diễn chúng
- Đã thêm bao phủ hồi quy Delphi, C++Builder và Lazarus lưu rồi nạp lại các file PDF 1.3 đến 1.7 rõ ràng, xác minh header cuối, OpenAction Fit Height mặc định và phiên bản PDF được báo cáo
Version 1.5.10
- Đã chuyển từ tùy chọn B của đặc tả sang tùy chọn C bằng cách thêm các bài kiểm thử smoke TPdfView trong cả ba bộ IDE (Tests.PdfView). Mỗi bộ dựng một TForm cha ẩn (qua TForm.CreateNew ở phía Pascal và
new TForm(NULL, 0)ở phía C++Builder), gắn một TPdfView, đặt Active := True, rồi xác minh bề mặt vòng lặp cho PageCount, giá trị mặc định của PageNumber, Zoom, Rotation, DisplayMode, và rằng View.Text khớp với TPdf.Text nền tảng. Mỗi bộ IDE giờ chạy 39 ca
Version 1.5.9
- Đã chuyển từ tùy chọn A của đặc tả sang tùy chọn B bằng cách thêm các bài kiểm thử render smoke trong cả ba bộ IDE. Mỗi bộ Tests.Render gọi TPdf.RenderPage trên sample.pdf và xác minh ba tín hiệu bền vững thay vì checksum byte-by-byte: bitmap trả về khớp chính xác kích thước pixel yêu cầu; các kích thước yêu cầu khác nhau (200x100, 64x256) tạo bitmap khớp; và trang được render có ít nhất 95% nền trắng với tối thiểu 50 (Lazarus: 20) pixel không trắng đánh dấu văn bản khử răng cưa. Mỗi bộ IDE giờ chạy 33 ca
Version 1.5.8
- Đã khép lại các nhóm kế hoạch kiểm thử A(2) gốc bằng cách thêm bảy hồi quy nữa cho mỗi IDE: TPdf.CreateAnnotation dựng một anHighlight annotation kèm vòng lặp SaveAs/LoadDocument, đường đọc AcroForm trên Demo/Delphi/FormFill/cmp_fill_out_and_merge_forms.pdf (FormType là ftAcroForm, FormFieldCount > 0, FlattenAllPages đưa số trường về 0), và bao phủ đường đọc yên lặng cho Bookmarks, LinkAnnotationCount, và WebLinkCount trên một tài liệu không có các tính năng đó. Mỗi bộ IDE giờ chạy 30 ca
Version 1.5.7
- Đã mở rộng các bộ Delphi (DUnitX), Lazarus (FPCUnit) và C++Builder (GoogleTest) với bảy hồi quy mới cho mỗi IDE: PdfVersion, PageRotation, tra cứu chuỗi con TPdf.FindFirst / FindNext, đối chiếu CharacterOrigin / CharacterRectangle với origin của AddText, đăng ký CreateAttachment kèm vòng lặp SaveAs/LoadDocument, và một vòng lặp AddText văn bản có dấu xác minh rằng đường nhúng TrueType châu Âu từ v1.3.0 giữ nguyên các mã điểm Latin-1 bổ sung
Version 1.5.6
- Các PDF đã lưu giờ nhận một hành động mở Fit Height mặc định ở trang đầu khi không có OpenAction nào sẵn có, để trình đọc PDF ban đầu hiển thị tài liệu được tạo ở mức zoom theo chiều cao trang
- Đã thêm bao phủ hồi quy Delphi, Lazarus và C++Builder cho OpenAction được tạo và thiết lập Fit Height
Version 1.5.5
- Đã thêm kiểm thử hồi quy trên các bộ Delphi (DUnitX), Lazarus (FPCUnit) và C++Builder (GoogleTest) cho bề mặt API kiểm tra ký tự và phông theo chỉ số (TPdf.FontBaseName, FontFamilyName, FontWeight, FontItalicAngle, FontData, FontIsEmbedded, CharacterFontWeight, CharacterAngle). Bộ Lazarus cố ý bỏ qua FontData, vì hiện tại nó gây truy cập vi phạm bên trong FPDFFont_GetFontData dưới FPC
Version 1.5.4
- Đã thêm một demo C++Builder Attachment được chuyển từ mẫu Delphi, bao gồm tạo PDF, thêm, liệt kê, trích xuất, xóa và lưu tệp đính kèm nhúng với hiển thị subtype MIME
Version 1.5.3
- Đã bộc lộ phép tính trang spread làm nền cho các chế độ hai trang của TPdfView dưới dạng trợ giúp cấp unit ComputeSpreadPages(DisplayMode, PageNumber, PageCount, out LeftPageNo, out RightPageNo). Hành vi không đổi; trợ giúp này khiến quy tắc nhận thức trang bìa có thể kiểm thử độc lập mà không cần khởi tạo viewer
- Đã thêm năm kiểm thử hồi quy trên các bộ Delphi (DUnitX), Lazarus (FPCUnit) và C++Builder (GoogleTest) bao phủ tài liệu rỗng, ghép cặp hai trang chuẩn, trang bìa đứng riêng trong dmTwoPageContinuousWithCover, các cặp sau trang bìa và hành vi ghim trang cuối / ngoài phạm vi
Version 1.5.2
- Đã thêm hỗ trợ ngôn ngữ tài liệu qua TPdf.Language, ánh xạ tới mục /Lang của catalog PDF
- Đã thêm truy cập subtype MIME của tệp đính kèm với TPdf.AttachmentType
- Đã thêm anRedact vào TPdfAnnotationSubtype và thêm các trợ giúp loại bỏ đối tượng trang cho TPdf và TPdfView
- Đã cập nhật các demo viewer và attachment để hiển thị thông tin ngôn ngữ và kiểu tệp đính kèm mới khi có
Version 1.5.1
- Đã thêm dmTwoPageContinuousWithCover cho TPdfView để bố cục trình xem có thể hiển thị trang đầu tiên riêng rồi tiếp tục bằng các spread hai trang
- Đã cập nhật các demo MultiPageViewer của Delphi, C++Builder và Lazarus để lộ chế độ hiển thị hai trang có nhận thức trang bìa
Version 1.5.0
- Đã thêm các bộ kiểm thử tự động cấp smoke cho Delphi (DUnitX), Lazarus (FPCUnit) và C++Builder (GoogleTest). Ba bộ này dùng chung một file PDF fixture trong Tests\TestData và chạy cùng bảy ca mỗi bộ, bao gồm tải tài liệu, thông tin trang, trích xuất văn bản, metadata, vòng lặp lưu, kiểm tra tiêu đề PDF và thuộc tính Compressed
Version 1.4.3
- Enhanced the FontThuộc tính demo to show both TPdfView and TPdf font metadata APIs, including font handles, font data size, and character metrics
- Thêm mới indexed TPdfView character and font inspection properties and updated the FontThuộc tính demo to query text-object font metadata
Version 1.4.2
- Đã thêm các thuộc tính kiểm tra chỉ số ký tự và phông vào TPdf để phân tích văn bản mà không cần trình xem. Các thuộc tính theo chỉ số ký tự (CharacterAngle, CharacterFontSize, CharacterFontWeight) truy vấn số liệu theo từng ký tự từ luồng văn bản của trang hiện tại. Các thuộc tính theo chỉ số đối tượng trang (FontAscent, FontBaseName, FontData, FontDescent, FontFamilyName, FontHandle, FontIsEmbedded, FontItalicAngle, FontWeight) truy vấn metadata phông cho bất kỳ đối tượng văn bản nào trên trang hiện tại
- Các đối tượng trang không phải văn bản trả về giá trị an toàn bằng 0 hoặc rỗng cho mọi thuộc tính Font* thay vì phát sinh lỗi, giúp việc duyệt mọi đối tượng trang và chỉ kiểm tra các đối tượng văn bản trở nên đơn giản
- FontBaseName đọc trực tiếp tên phông cơ sở PostScript thay vì rơi về tên họ phông, cho định danh chính xác hơn đối với phông nhúng
Version 1.4.1
- Đã thêm các bản C++Builder và Lazarus của demo EuropeanText để tất cả các họ IDE được hỗ trợ có thể xác minh việc tạo văn bản châu Âu có dấu bằng phông TrueType hệ thống
- Đã thêm các bản C++Builder và Lazarus của demo FormFill, gồm file PDF biểu mẫu mẫu, chỉnh sửa trường, tái tạo appearance, lưu sau điền và lưu sau làm phẳng
Version 1.4.0
- Đã thêm hỗ trợ Lazarus / Free Pascal: package PDFiumLaz mới cung cấp cùng các thành phần TPdf, TPdfView và các thành phần liên quan dưới widget set LCL, mở rộng thư viện sang IDE Lazarus và trình biên dịch Free Pascal bên cạnh các package Delphi và C++Builder hiện có
- Đã thêm các bản Lazarus của các demo để lập trình viên Lazarus có thể khám phá mọi tính năng bằng các ví dụ chạy được
- Đã sửa lỗi biên dịch Lazarus nơi các định nghĩa điều kiện của Free Pascal bị đánh giá cùng với các kiểm tra phiên bản trình biên dịch Delphi, khiến các bản dựng FPC cố gắng phân giải tên unit dành riêng cho Delphi và thất bại
Version 1.3.1
- Đã tài liệu hóa quy trình làm phẳng biểu mẫu trong bộ trợ giúp: GenerateFormAppearances, FlattenPage, FlattenAllPages và các hằng FLAT_* / FLATTEN_* liên quan giờ đã được bao phủ trong TPdf, TPdfView, tài liệu API, ma trận tính năng và các ví dụ lập trình
- Đã sửa bảng kiến trúc trong trang tổng quan để nó liệt kê đúng các unit binding thực sự được phát hành trong thư mục Lib
Version 1.3.0
- Đã cải thiện hỗ trợ ký tự châu Âu khi tạo PDF. TPdf.AddText giờ tải và lưu đệm phông TrueType hệ thống khớp trước khi tạo đối tượng văn bản, giữ nguyên các ký tự có dấu từ Czech, French, German, Spanish, Portuguese, Polish và Turkish mà các phông chuẩn dựng sẵn của PDFium không thể biểu diễn
- Các ứng dụng trước đây tạo dấu hỏi hoặc glyph thay thế cho văn bản Latin không phải ASCII giờ sẽ hiển thị đúng mà không cần đổi mã nào. Đã thêm demo EuropeanText để minh họa tính năng
Version 1.2.0
- Đã thêm làm mới appearance của AcroForm vào TPdf: gọi GenerateFormAppearances sau khi sửa giá trị FormField[] sẽ cập nhật giao diện widget để giá trị đã điền hiển thị trong các trình đọc PDF chuẩn mà không cần một phiên chỉnh sửa tương tác
- Đã thêm các trợ giúp làm phẳng biểu mẫu cho TPdf (FlattenPage / FlattenAllPages) và TPdfView (FlattenPage cho trang hiện tại). Làm phẳng sẽ nhúng vĩnh viễn các giá trị trường đã điền như nội dung trang thông thường và loại bỏ lớp biểu mẫu tương tác, tạo ra tài liệu tĩnh hiển thị nhất quán trên mọi trình xem
- Đã thêm Demo\Delphi\FormFill để minh họa quy trình điền và lưu cùng điền và làm phẳng với một PDF AcroForm mẫu
Version 1.1.2
- Đã thêm nén stream PDF khi lưu. Thuộc tính TPdf.Compressed mới (mặc định bật) sẽ ghi lại các content stream chưa nén thành FlateDecode-compressed streams khi lưu, giảm đáng kể kích thước file cho các PDF được tạo bằng chương trình. Ứng dụng cần đầu ra không nén có thể đặt Compressed thành False trước khi gọi SaveAs
Version 1.1.1
- Các bản dựng package Win64 không còn bao gồm unit đăng ký ở thời gian thiết kế, ngăn lỗi khi package Win64 được triển khai trong ngữ cảnh chỉ chạy
- Bộ nạp DLL PDFium giờ tìm thư mục con của ứng dụng Win32 hoặc Win64 trước, dùng tên chuẩn pdfium.dll và pdfium.v8.dll, rồi mới rơi về thư mục phẳng của ứng dụng và thư mục hệ thống Windows. Điều này khớp với bố cục DLL đi kèm package thành phần, giúp cài đặt dễ dàng hơn
Version 1.1.0
- Đã sửa lỗi cắt hiển thị trong chế độ hai trang của TPdfView: nội dung trang tràn qua khe giữa vì các ô trang trái và phải cùng dùng một hình cắt. Mỗi ô giờ cắt riêng nên nội dung luôn nằm trong ranh giới trang
- Đã cải thiện thông báo lỗi của demo Delphi khi không tìm thấy DLL PDFium, cung cấp nhắc nhở rõ ràng hơn với tên DLL và vị trí dự kiến