본문으로 건너뛰기

프로젝트 PDF 파일

px.ProjectPdfFiles는 Host가 지정한 프로젝트 폴더에 PDF 기록과 선택적인 로컬 원본 복사본을 저장합니다. 프런트엔드 없이 사용할 수 있습니다. 폴더 선택과 접근 권한 확인은 Host 책임이며, 이 API가 계정 권한을 부여하지는 않습니다.

python
from pipelinexlab import px

pdf_files = px.ProjectPdfFiles("./my-project", workspace="workspace", project="project")
current = pdf_files.read("reference")
snapshot = pdf_files.import_pdf(
    "reference", "/other-folder/design.pdf",
    expected_revision=current["revision"] if current else None,
)
project_copy = pdf_files.open_pdf("reference")

import_pdf는 원본을 프로젝트의 pdf/<sha256>.pdf로 복사합니다. 외부 파일 경로는 기록하지 않습니다. 원본을 이동하거나 삭제해도 프로젝트 복사본으로 다시 열 수 있습니다. open_pdf는 크기와 SHA-256을 확인합니다. 파일은 최대 128 MiB이며, 복사 도중의 임시 파일은 성공·실패 시 정리합니다. 다른 내용으로 교체한 이전 복사본의 자동 정리는 아직 제공하지 않습니다.

웹에서는 원본을 보내지 않고 다음처럼 기록만 저장합니다.

python
snapshot = pdf_files.remember(
    "reference", name="design.pdf", content_ref="sha256:" + "a" * 64,
    size=1024, expected_revision=None,
)
records = pdf_files.list()

위 digest와 크기는 사용 예시입니다. 실제 Host는 선택한 파일에서 계산한 값을 전달합니다. remember는 원본을 검증하거나 PDF 파싱 성공을 보증하지 않습니다. 재열기는 기기에서 PDF를 다시 선택해야 합니다. 클라우드 원본 저장은 추후 기능입니다.

read(key)는 없으면 None, 있으면 {"value": ..., "revision": ..., "updatedAt": ...}를 반환합니다. list()는 같은 형식의 기록 목록입니다. rememberimport_pdf는 생성 시 expected_revision=None, 교체 시 읽은 revision을 요구합니다. 동일한 요청의 재시도는 같은 결과를 반환하고, 다른 내용의 오래된 수정은 거부합니다. 동일한 key를 사용하면 가상 파일 항목이 중복되지 않습니다. import_pdf의 선택적 name은 표시 이름만 지정합니다.

Core가 검증하는 기록은 schemaVersion: 1, kind: "project-pdf-reference", Project scope, 안정적인 key, name, contentRef, size, storage입니다. storagereselect 또는 project-copy입니다. revision은 정규화한 기록의 digest입니다. updatedAt은 저장소가 기록한 변경 시각(Unix 초)이며 동일한 요청의 재시도로 바뀌지 않습니다. 메타데이터는 프로젝트 폴더의 .pxpdf.sqlite3에 저장되며, 다른 Project scope로 같은 저장소를 열면 거부합니다. 이후 클라우드 저장을 추가해도 가상 파일 key와 원본의 내용 digest는 별개로 유지합니다.

개발 서버의 Report는 현재 Report key 하나를 PDF 기록 key로 사용합니다. 그 화면에서 PDF를 다시 선택하면 기존 기록을 교체합니다. PX 홈의 해당 프로젝트에서 이 기록을 열면 PDF 재선택 안내로 이동합니다. 이 개발 연결은 일반 계정용 Project Catalog 쓰기 권한이나 Desktop Launcher 연결을 대신하지 않습니다.

메서드 목록

px.ProjectPdfFiles

python
px.ProjectPdfFiles(directory, *, workspace, project)

pdf_files.read

python
pdf_files.read(key)

pdf_files.list

python
pdf_files.list()

pdf_files.remember

python
pdf_files.remember(key, *, name, content_ref, size, expected_revision)

pdf_files.import_pdf

python
pdf_files.import_pdf(key, path, *, expected_revision, name=None)

pdf_files.open_pdf

python
pdf_files.open_pdf(key)