BI/ID/EI 인라인 이미지를 재사용 가능한 이미지 XObject로 추출하고 각 인라인 블록을 /ImN Do 연산자로 바꾸어 문서를 다시 씁니다function SaveAsInlineImagesExternalised(Stream: TStream; const Options: TPdfInlineImageExternaliseOptions; out Report: TPdfInlineImageExternaliseReport; AllowSignedDocument: Boolean = False): Boolean;
function SaveAsInlineImagesExternalised(const FileName: string; const Options: TPdfInlineImageExternaliseOptions; out Report: TPdfInlineImageExternaliseReport; AllowSignedDocument: Boolean = False): Boolean;
각 페이지 콘텐츠 스트림을 디코딩하여 인라인 이미지를 검사하고, 모든 BI/ID/EI 블록을 새 이미지 XObject 간접 객체로 추출합니다
인라인 이미지 사전 축약 표기(/W, /H, /BPC, /CS, /F, 색공간과 필터 값 축약)는 완전한 이미지 XObject 이름으로 확장되므로 추출된 객체는 표준을 준수합니다
콘텐츠 스트림의 인라인 블록은 /ImN Do로 교체되고, 페이지의 /Resources /XObject 사전이 새 참조로 갱신되며, 다시 쓴 콘텐츠 스트림은 Flate 압축됩니다
기존 객체의 객체 번호와 세대는 안정적으로 유지되고, 새 이미지 XObject와 콘텐츠 스트림은 추가됩니다
TPdfInlineImageExternaliseOptions.SkipUnsafePages는 인라인 이미지 경계를 확정할 수 없는 페이지를 저장 중단 대신 변경하지 않은 채로 둡니다TPdfInlineImageExternaliseReport는 외부화, 건너뜀, 실패 개수와 생성된 XObject 개수를 보고합니다/Resources가 있거나 콘텐츠를 해석할 수 없는 페이지는 건너뜁니다AllowSignedDocument를 명시적으로 활성화하지 않는 한 거부됩니다. 전체 다시 쓰기는 기존 서명 바이트 범위를 무효화하기 때문입니다
Options.SkipUnsafePages:= True;
Pdf.SaveAsInlineImagesExternalised('externalised.pdf', Options, Report);
WriteLn('externalised ', Report.ExternalisedCount, ' inline images');