Editable Diagnostic Documents and Repair
SaveLoadedDocumentDiagnostic tạo đầu ra đã giải nén, xác định để kiểm tra và chỉnh sửa văn bản có kiểm soát, trong khi RepairDiagnosticDocument biến tệp đã chỉnh sửa trở lại thành một PDF hợp lệ về cấu trúc
Quy trình khứ hồi
- Nạp một tài liệu và gọi
SaveLoadedDocumentDiagnostic - Chỉnh sửa dictionary đối tượng hoặc byte stream không nén mà không cố duy trì
/Length, hàng xref, hoặcstartxrefthủ công - Gọi
RepairDiagnosticDocumentvới các tùy chọn có giới hạn - Kiểm tra
THPDFDiagnosticRepairReportvà chỉ dùng đích đã sửa khi phương thức trả vềTrue
Hợp đồng sửa chữa
- Nguồn phải bắt đầu bằng một tiêu đề PDF và mang dấu
%QDF-1.0do HotPDF phát ra - Đối tượng gián tiếp đã xác thực được sao chép theo thứ tự vật lý mà không mã hóa lại chuỗi, dictionary, hoặc payload stream
- Các giá trị
/Lengthcủa stream ở dạng trực tiếp, gián tiếp, bị thiếu hoặc đã lỗi thời đều được thay bằng độ dài payload đo được - Một bảng xref cổ điển, trailer canonical, và offset
startxrefchính xác được dựng lại từ các vị trí đầu ra đo được - Trailer giữ các giá trị
/Info,/ID, và/Encrypthợp lệ và ràng buộc/Rootvới Catalog đã xác thực duy nhất - Đích được ghi qua một tệp tạm cùng cấp và thay thế đường dẫn được yêu cầu chỉ sau khi mọi kiểm tra thành công
Từ chối nghiêm ngặt
Việc sửa chữa thất bại an toàn cho số đối tượng trùng lặp, nhiều hoặc thiếu đối tượng Catalog, tham chiếu trailer hỏng, byte không phải chú thích giữa các đối tượng, ngữ pháp đối tượng không hợp lệ, giới hạn đối tượng hoặc đầu vào, offset xref cổ điển rộng hơn mười chữ số, và lỗi xác thực tải lại nghiêm ngặt
Dấu bên trong đối tượng đã xác thực được bỏ qua, nên văn bản giống đối tượng trong chuỗi và payload stream đã mã hóa không trở thành mục xref
Hiệu năng có giới hạn
Bộ quét đọc các cửa sổ 1 MiB với một phần mang ngắn, sao chép các dải đối tượng trực tiếp giữa các stream tệp, và chỉ giữ siêu dữ liệu đối tượng đã xác thực cùng các thăm dò dictionary có giới hạn
MaxInputBytes, MaxObjectCount, và MaxObjectNumber giới hạn việc quét, siêu dữ liệu được giữ, và hàng xref được phát ra trước khi đầu ra được xuất bản
Ví dụ Pascal
var
Options: THPDFDiagnosticRepairOptions;
Report: THPDFDiagnosticRepairReport;
begin
Options := THPDFDiagnosticRepairOptions.Default;
Options.MaxInputBytes := Int64(16) * 1024 * 1024 * 1024;
if not THotPDF.RepairDiagnosticDocument(
'edited-diagnostic.pdf',
'repaired.pdf',
Options,
Report
) then
raise Exception.Create(string(Report.Diagnostic));
end;