번역 PDF 보존
client.retain_translated_pdf는 호출자가 제공한 PDF 파일과 검증된 출처 기록을 현재 Project에 함께 보존합니다. 원본 PDF, DocumentAnalysis, DocumentTranslation은 먼저 같은 Project에 보존돼 있어야 합니다.
from pathlib import Path
from pipelinexlab import px
client.retain_document(source_ref, source=source_report)
client.retain_document(analysis)
client.retain_document(translation)
translated_pdf = px.DocumentTranslatedPdf.from_wire(renderer_provenance)
reference = client.retain_translated_pdf(translated_pdf, pdf=Path("translated.pdf"))reference는 출처 기록의 content_ref입니다. PDF bytes의 식별자는 출처 값의 pdfContentRef입니다. 파일을 호출 시점에 읽고 현재 연결의 제한된 업로드 경로로 보냅니다. 현재 전송 상한은 파일당 32 MiB이며, 협상된 제한이 더 작으면 그 제한을 사용합니다. Runtime은 파일 크기·digest·PDF 헤더와 정확한 원본/분석/번역 관계를 검증합니다. 이 검증은 PDF 전체 구문의 적합성이나 번역·렌더링 품질을 인증하지 않습니다.
같은 바이트와 출처를 다시 보존하면 같은 참조를 반환합니다. 같은 PDF가 원본과 출력에 동시에 사용되거나 여러 출처 기록이 같은 PDF를 가리켜도 파일을 별도 역할별로 복제하지 않습니다. 기존 원본 Report 출처도 덮어쓰지 않습니다. 생성 PDF는 별도의 임시 Report를 만들지 않고 보존할 수 있습니다.
현재 연결이 직접 업로드한 정확한 ref/size만 받습니다. 다른 연결·Project에서 알아낸 digest는 업로드 증명이 아닙니다. 실패 시 업로드 증명은 같은 연결의 재시도를 위해 유지하고 성공 시 소비합니다. 다시 호출할 때 SDK는 파일을 다시 업로드합니다. 현재 Project 권한과 부모 참조를 검증한 뒤 PDF·출처·참조 연결·보존 등록을 한 transaction에서 확정합니다.
이 작업은 Report를 변경하거나 검토 승인·엔진 실행을 수행하지 않습니다. 현재 standalone Desktop Local 권한 경로를 사용하며 managed Host 권한을 임의로 만들어 주지 않습니다.
보존 뒤 출처 기록의 canonical bytes를 Report attachment로 명시적으로 추가하면 export_documents가 선택된 기록과 원본·분석·번역·출력 PDF를 함께 내보냅니다. 원본 attachment나 로컬 파일을 지워도 보존된 관계를 유지합니다. 문서 보존과 이동을 참고하세요.
실제 렌더링 결과 연결
SDK 저장소의 sdk/python/examples/reviewed_translation_pdf.py는 기존 API를 조합하는 예제입니다. 완료된 Analysis·Translation 작업을 읽고, 정확한 번역 결과가 accepted인지 확인한 뒤 모든 번역 구간을 대상 언어의 논리 순서대로 별도 Report에 작성합니다. 원본 Report는 수정하지 않습니다.
from reviewed_translation_pdf import export_reviewed_translation
# 번역문을 실제로 검토한 뒤에만 승인합니다. 예제는 대신 승인하지 않습니다.
translation = client.document_job_result("translation_job")
client.review_document_job(
"translation_job", result_ref=translation.content_ref, decision="accepted"
)
layout_report, translated_pdf = export_reviewed_translation(
client,
analysis_job_ref="analysis_job",
translation_job_ref="translation_job",
report_key="translated_layout",
title="검토한 번역 PDF",
directory="translated-output",
)예제 파일을 위 코드와 같은 디렉터리에 둡니다. 원본 PDF는 해당 Project에 먼저 보존돼 있어야 합니다. 새 출력 디렉터리와 새 Report key를 사용합니다. 원본의 표·도면 배치를 복원하는 기능은 아니며, 검토한 번역 구간을 일반 문단으로 배치합니다.
plan_pages()와 export_pdf()가 반환한 실제 배치·프로파일·저장 revision을 비교하고, 실제 PDF bytes의 digest·크기를 확인해 출처 기록을 만듭니다. 두 호출 사이에 페이지 설정이 바뀌면 출처를 보존하지 않고 거절합니다. 이 경우 검사할 Report와 PDF 파일은 남습니다. PdfExport.sha256은 이미 sha256:<hex> 전체 참조이므로 접두사를 추가하지 않습니다.
layout.json의 정확한 UTF-8 파일 bytes를 해시한 값이 layoutDigest이며, 이 파일의 JSON 직렬화 방식은 Core canonical JSON을 재구현한다는 뜻이 아닙니다. render-profile.json에는 Runtime이 답한 실제 프로파일과 그 digest가 담깁니다. 현재 번들 Report 프리셋은 ko-KR입니다. 이 예제의 한국어 PDF 출력 검증과 다국어 결과 모델의 지원 범위를 구분해야 합니다.
PDF를 보존한 뒤 다른 Project로 이동하려면 별도 출력 목록 Report에 translated-pdf.json, layout.json, render-profile.json을 attachment로 저장하고 export_documents()를 호출합니다. 선택한 출처 기록의 원본·분석·번역·PDF는 보존 관계로, 두 렌더 자료는 명시적인 attachment로 함께 이동합니다. digest만 저장했다고 렌더 자료 파일까지 자동으로 보존되는 것은 아닙니다.
이 예제는 이미 완료된 작업의 결과를 사용합니다. OCR·번역 모델 설치, 자동 PDF 작업 예약, managed Host 권한 연결이나 모든 언어의 렌더링 품질을 제공하지 않습니다.