Loaded PDF to PDF/A-4 Raster Conversion

HPDFArchivalConversion tạo một tài liệu PDF/A-4 mới từ nội dung trang hiển thị của một tài liệu THotPDF đã nạp, dùng rendering gốc nghiêm ngặt và một hồ sơ sRGB ICC được cung cấp

Mỗi trang đầu ra chứa một ảnh raster RGB nén không mất dữ liệu ở DPI được yêu cầu, với kích thước hiển thị, crop, xoay, và UserUnit gốc được phản chiếu vào hình học trang đầu ra

Các điểm vào

function HPDFConvertLoadedToPDFA4Raster(Source: THotPDF;
  Destination: TStream; const SRGBProfile: TBytes;
  const Options: THPDFArchivalConversionOptions;
  out Report: THPDFArchivalConversionReport): Boolean;

function HPDFConvertLoadedToPDFA4RasterFile(Source: THotPDF;
  const TargetFileName: string; const SRGBProfile: TBytes;
  const Options: THPDFArchivalConversionOptions;
  out Report: THPDFArchivalConversionReport): Boolean;

Hãy nạp nguồn trước và giữ mọi input stream do caller sở hữu tồn tại đến khi tài liệu nguồn bị hủy

Dùng điểm vào tệp cho việc công bố lưu trữ thông thường: nó thăm dò target hiện có để phát hiện alias nguồn trước khi tạo một tệp tạm độc quyền trong thư mục target, xác thực toàn bộ chuyển đổi, flush tệp, rồi thay thế target bằng MoveFileEx với MOVEFILE_REPLACE_EXISTING và MOVEFILE_WRITE_THROUGH

Các lỗi chuyển đổi, rendering, xác thực, hủy, và công bố đều giữ nguyên tệp target hiện có và xóa đầu ra tạm

Điểm vào stream đòi hỏi một destination rỗng, seek được, ở vị trí zero, và từ chối các alias đã biết của input qua IsLoadedSourceStreamAlias; nó chỉ công bố bytes sau khi toàn bộ đầu ra đã dàn xong vượt qua xác thực gốc

Lỗi ghi destination kích hoạt một lần reset nỗ lực tối đa về stream rỗng, nhưng một thiết bị tùy ý hoặc custom stream có thể từ chối reset đó và giữ lại phần ghi dở; hãy dùng điểm vào tệp khi việc công bố tệp buộc phải nguyên tử

Tùy chọn và chặn tài nguyên

Tùy chọnMặc địnhÝ nghĩa
DPI150Độ phân giải vật lý yêu cầu, khoảng chấp nhận 36 đến 1200
MaxPages1000Số trang nguồn đã nạp tối đa
MaxPixelsPerPage40,000,000Số pixel trang tối đa và số pixel ảnh nguồn riêng lẻ tối đa
MaxTotalPixels500,000,000Số pixel raster đầu ra tích lũy tối đa
MaxRasterBytes256 MiBBộ nhớ cấp phát raster tối đa cho một trang hoặc ảnh nguồn, kiểm tra bảo thủ với bốn byte mỗi pixel
MaxOutputBytes256 MiBKích thước PDF đã dàn tối đa, thực thi trước khi cấp phát stream và ghi
MaxDecodedStreamBytes64 MiBChặn từng chuỗi filter, preflight nội dung gộp của từng trang, từng callback đọc stream gốc, từng stream ảnh nguồn đã mã hóa, và trình xác thực đầu ra gốc
MaxTotalDecodedBytes256 MiBChặn công việc decoder gốc đã lọc bổ sung trong suốt chuyển đổi, preflight nội dung gộp qua các trang, và các callback đọc stream gốc tích lũy qua các trang
MaxInputObjects200,000Số indirect object đã nạp tối đa
CancellationTokennilToken mượn được kiểm tra trước khi làm việc, trong rendering và decode gốc, và trước khi công bố
CheckpointnilCallback đồng bộ mượn được gọi với sender nil tại các checkpoint chuyển đổi và tài nguyên gốc; không được re-enter vào tài liệu nguồn

Các giới hạn decode đếm công việc decoder và có thể tính phí cùng một stream đã lọc thêm lần nữa trong preflight, biên dịch display-list, và rendering; việc tăng ngân sách là một quyết định tường minh của caller

Preflight pixel bao phủ cả độ phân giải vật lý yêu cầu lẫn DPI số nguyên của renderer gốc sau khi áp UserUnit; đơn vị rất nhỏ có thể đòi thêm pixel raster, và kích thước trang lẻ có thể gây resampling dưới mức pixel khi ảnh được ánh xạ ngược về trang vật lý

Các chặn chuyển đổi áp dụng sau khi nạp nguồn; hãy cấu hình giới hạn tài nguyên riêng của bộ nạp khi tiếp nhận input không đáng tin

Đồ thị object của nguồn được giữ lại, trong khi read cache và thống kê decode có thể được điền; các thiết lập rendering, token hủy, backend, và ngân sách decode được khôi phục cả khi thành công lẫn thất bại

Hãy dành quyền truy cập độc quyền cho converter trên tài liệu nguồn của nó trong lúc nó tạm thời áp các thiết lập này

Rendering và màu sắc

Mọi trang phải dựng mà không có chẩn đoán fallback gốc, chẩn đoán bị bỏ rơi, hay lỗi thiếu tài nguyên; nội dung không được hỗ trợ sẽ từ chối phép chuyển đổi thay vì công bố một trang chưa đầy đủ

Tham số ICC phải mô tả sRGB với biểu diễn matrix/TRC được nhận dạng, các primary chuẩn D50-adapted, và hàm transfer IEC sRGB; các profile RGB không liên quan, profile CMYK, profile hỏng, và profile dựa trên LUT đều bị từ chối

Đầu ra khai báo một OutputIntent sRGB và metadata XMP PDF/A-4; workflow ICC proof hoặc output tùy chỉnh đã cấu hình sẵn trên nguồn sẽ bị từ chối vì các thiết lập image-decoder của nó không thể được diễn giải lại một cách an toàn thành sRGB

Build FPC đòi hỏi codec bridge gốc của nó với LittleCMS khả dụng, và từ chối chuyển đổi khi backend quản lý màu này bị thiếu

Các stream ảnh JPEG và JPX, kể cả inline image đã mã hóa, được kiểm tra kích thước codestream thực tế trước khi decode pixel gốc và phải khớp với image dictionary của PDF

JPEG chấp nhận các header baseline 8-bit có chặn, extended sequential, và progressive; JPX chấp nhận header J2K SIZ có chặn và các hộp JP2 độ dài thông thường với tối đa bốn component và độ chính xác component tối đa 16 bit

Codec đã mã hóa có thêm ngân sách làm việc bảo thủ 64 byte mỗi pixel nguồn, và metadata tile JPX bị chặn bởi cả MaxInputObjects lẫn 1024 byte mỗi tile trong MaxRasterBytes; ngân sách raster mặc định 256 MiB vì thế cho phép tối đa 4,194,304 pixel nguồn đã mã hóa, và caller có thể tăng tường minh cho các ảnh lớn hơn

Chuyển đổi JBIG2 bị từ chối vì các cấp phát vùng và ký hiệu nội bộ của nó không thể bị chặn từ header API sẵn có; codec ảnh nonterminal, hộp JP2 độ dài mở rộng, wrapper không được hỗ trợ, và stream codec mang DecodeParms cũng bị từ chối

Các tham số fax CCITT phải giữ nguyên kích thước ảnh dương đã khai báo; các override DecodeParms.Columns và Rows khác với dictionary, kể cả Rows=0 chưa biết, bị từ chối trước khi decode gốc

Các kiểm tra này chặn các dạng header và cấp phát đã biết mà converter này chấp nhận, và không hứa hẹn một sandbox bộ nhớ tiến trình đầy đủ cho mọi decoder gốc

Mất mát thông tin và chất lượng

THPDFArchivalConversionReport cung cấp trạng thái thành công và hủy, số trang nguồn và đã dựng, pixel raster, byte đầu ra, số chú thích/form/attachment bị xóa, một chẩn đoán thất bại, và các phát hiện xác thực gốc

FailureKind phân biệt afkNone, afkConversion, afkBudget, và afkCancelled; lỗi ngân sách converter có kiểu còn cung cấp BudgetMetric, BudgetObserved, và BudgetLimit

Một exception tại checkpoint dừng chuyển đổi và được báo qua kết quả thất bại gốc; wrapper cần nhóm exception callback gốc phải giữ lại nó trước khi converter bắt lấy

archive.pdfa4.raster — operation JSON và C ABI đòi hỏi chấp nhận mất mát thông tin tường minh, giữ nguyên handle nguồn, giao nộp PDF đã xác thực cùng báo cáo mất mát, và áp các trần ngân sách job bảo thủ

Kiểm chứng tuân thủ

Converter nạp lại đầu ra đã dàn của nó và yêu cầu ValidatePDFA4 với profile PDF/A-4 cơ sở trước khi công bố; trình xác thực gốc bao phủ tập quy tắc có chặn đã được ghi tài liệu của nó chứ không phải bằng chứng cho mọi yêu cầu của ISO 19005-4

Nghiệm thu độc lập có thể dùng veraPDF với --flavour 4; fixture hồi quy chứa văn bản không nhúng font, transparency, một ảnh RGB, một link, một signature widget, và một attachment đã vượt qua veraPDF 1.30.2 mà không có quy tắc hay kiểm tra nào thất bại

Chạy Tests/Delphi/Run-HotPDFArchivalTests.bat cho bộ hồi quy phi GUI chuyên biệt