네이티브 Linux C ABI

HotPDFLinuxABI.lpr는 네이티브 x86_64 ELF 공유 라이브러리 libhotpdf.so.1을 빌드하며, SONAME은 libhotpdf.so.1이고 공개 심볼은 HOTPDF_1.0에 할당됩니다

이 라이브러리는 THPDFHeadlessDocument와 CPU 렌더링을 쓰며, 런타임에 Windows 컴포넌트, 활성 데스크톱, PDF 뷰어, Python 프로세스가 필요 없습니다. Python은 빌드와 인수 스크립트에서 씁니다

빌드와 인수 검증

sh Tests/Linux/Build-LinuxABI.sh
sh Tests/Linux/Run-LinuxABIAcceptance.sh
FPC_EXE=/usr/local/bin/fpc HPDF_LINUX_OUTPUT=Tests/Linux/bin/linux-abi331 sh Tests/Linux/Run-LinuxABIAcceptance.sh

일치하는 FCL과 paszlib 유닛, C 컴파일러, binutils, Fontconfig, 설치된 TrueType 폰트를 갖춘 네이티브 FPC 3.3.1 이상을 쓰세요. acceptance Python 환경에는 AES 프로바이더가 있는 pypdf와 PyMuPDF, Pillow, NumPy도 필요합니다

FPC_EXE, HPDF_LINUX_OUTPUT, PYTHON_EXE로 도구 위치를 고르고, 기본 인수 검증 Python 환경은 /opt/hotpdf-python/bin/python입니다

FPC는 보통 ELF 링커 응답에 익명 익스포트 블록을 기록합니다. 빌드는 링크 전에 체크인된 심볼 맵으로 이 블록에 이름을 붙이는데, 이름 있는 버전 스크립트를 하나 더 추가하면 익명 블록과 충돌하기 때문입니다

공개 인터페이스

공유 레코드 레이아웃과 상태 상수는 Lib/hotpdf_abi.h를 포함해서 쓰고, hpdf_abi_io_v1_size와 hpdf_abi_operation_v1_size가 실제 네이티브 레코드 크기를 알려줍니다

Linux 라이브러리는 ABI 조회, 기능 조회, 문서 생성·파괴, 콜백 로딩·저장, 페이지 셈, hpdf_document_execute_json_v1, 두 문서용 hpdf_document_compare_json_v1 진입점을 익스포트합니다

Windows 연산 집합을 가정하지 말고 hpdf_capabilities_json_to_io로 현재 연산을 조회하세요

연산동작
info페이지, 폼, 서명된 필드 개수
text.extractJSON 형태의 Unicode 페이지 텍스트와 선택적 UTF-8 출력, 선택적인 0부터 시작하는 pages 배열
forms.read완전한 한정 필드 이름, Unicode 값, 전체 choice 선택, 타입, 플래그, 최대 길이
forms.fill트랜잭션 text, choice, multiselect, checkbox, radio 갱신, 푸시버튼 캡션, 대응하는 임베드 폰트 appearance, 증분 PDF 출력
annotations.export / annotations.importbounded 어노테이션 XFDF 교환, append 트랜잭션, 정확한 Unicode, 바이너리 스트림, popup/reply 참조, 암호화, 인증된 certification 정책
forms.export / forms.importbounded scalar 및 리치 FDF/XFDF 교환, 선택한 구성된 리치 패밀리당 실제 스타일 네 개, 암호화된 PDF 트랜잭션, 재생성된 appearance, 서명 정책, 동기식 분할 콜백
render페이지, dpi, view 또는 print 용도, 어노테이션 옵션, 기본 optional-content 구성이 적용된 Cairo PNG 출력
sign증분 PEM 또는 PFX 서명, 기존 또는 새로 만든 필드, 보이는 appearance와 certification. 인증된 AES-256 R5/R6 입력과 다이제스트, 메타데이터, 프로필, 검증된 증거 옵션 포함
signatures.verify실제 CMS 검증, 서명 리비전 길이, 선택적 명시적 CA 신뢰 평가, 서명된 폐기 정보 검증
html.import네이티브 HTML/CSS 문서 생성에 Unicode 폰트, 페이지 매김, 이미지, 하이퍼링크, 선택적 AcroForm 컨트롤이 있습니다
text.draw원본 페이지 스트림과 인증된 암호화 리비전을 보존하는 보이거나 숨긴 Unicode 페이지 텍스트
ocr유계 자식 수명, 단어 결과, 선택적 검색 가능 PDF 레이어가 있는 실제 Tesseract 인식
pages.import선택 페이지 리소스 가져오기에 독립 소스 입력과 트랜잭션 대상 갱신이 있습니다
pdfa.convert래스터 또는 텍스트/벡터 PDF/A-4 변환. 선택적 폰트 복구와 선택 모드의 검증 요구가 적용됩니다
compare / compare.contract두 핸들 페이지 수·페이지 텍스트·객체 수·렌더링 이미지·구조·전체 비교, 그리고 준비된 JSON, HTML 또는 주석 달린 PDF 검토 출력을 내는 의미론적 계약 비교
{"schemaVersion":1,"type":"render","page":0,"dpi":150,"usage":"print","annotations":false,
 "limits":{"memoryBytes":268435456,"outputBytes":268435456,"pixels":100000000}}

네이티브 서명 워크플로는 명시적 PEM 또는 Base64 PFX 아이덴티티, 선택적 새 서명 필드와 Unicode appearance, certification 권한을 받습니다. 서명에 성공하면 로드된 컨텍스트가 준비된 서명 리비전으로 교체되고, 서명이나 발행이 실패하면 원본 컨텍스트가 유지됩니다

네이티브 서명 옵션은 실제 SHA256, SHA384, SHA512 선택, Unicode 서명 정보, 법적 증명, 명시적 신뢰 바이트, 검증된 서명 폐기 증거, 실제 appearance 프리셋, 애플리케이션이 단정한 credential 또는 timestamp 전송 출처를 묶습니다

선택적인 optional-content 뷰어 상태는 바뀌지 않은 V1 레코드를 통해 명시적인 자동 View, Print, Export 용도 적용, 줌, 언어, 사용자 컨텍스트, 연산 지역 수동 선택을 공급합니다

render 연산은 usage: "view" 또는 usage: "print"를 받고 기본값은 view입니다. 선택지는 기능의 renderUsages 배열로 조회하고, V1 콜백과 연산 레코드는 그대로입니다

어노테이션 화면·인쇄 플래그는 선택한 용도를 따르고, annotations: false는 어느 모드에서든 어노테이션을 숨깁니다. optionalContent를 생략하면 정적 기본 구성이 유지되고, 명시적 객체는 문서화된 자동 추천과 연산 지역 수동 선택을 활성화합니다

Tests/Linux/Run-LinuxABIRenderUsage.sh는 평문과 AES R5/R6 소스의 실제 PNG 픽셀, 기본 꺼짐 콘텐츠, 콜백 실패, 예산, 취소, 같은 핸들 복구를 검증합니다. 픽스처 의존성과 선택적 사전 생성 픽스처 디렉터리는 Tests/Linux/HeadlessRenderUsage.en-us.md를 참고하세요

콜백과 수명

폼 appearance 옵션은 Unicode 텍스트, 익스포트 값 또는 전체 선택 배열, 명시적 버튼 상태, 폰트 설정, 트랜잭션 리소스 한도를 받습니다

읽기·쓰기 콜백은 부분 전송을 반환할 수 있습니다. 성공적인 전송은 양의 진행을 만들어야 하고 요청한 개수를 넘으면 안 됩니다

모든 콜백은 호출 스레드에서 동기로 실행됩니다. 문서 파싱, 렌더링, 암호화 체크포인트 안의 취소 검사도 포함입니다

콜백 입력은 mode 0600으로 단독 생성된 비공개 임시 파일로 복사되므로, Linux 입력 콜백과 사용자 데이터는 로드나 execute 호출이 돌아올 때까지만 유효하면 됩니다

공유 문서 핸들에 대한 연산은 내부적으로 직렬화되고, 활성 호출마다 독립 참조를 쥐고 있어서 진행 콜백에서 핸들을 파괴하면 이후 조회는 무효화되지만 현재 호출은 안전하게 끝까지 갑니다

콜백에서 같은 핸들에 다른 연산을 재귀적으로 실행하지 마세요. 모든 호출이 돌아오고 핸들이 전부 파괴될 때까지 공유 라이브러리를 로드한 상태로 유지하세요

예산과 발행

JSON 입력은 4 MiB와 중첩 64단계로 제한되며, 잘못된 UTF-8, 중복 멤버, 형식이 틀린 수치 한도, Int64→Int32 매개변수 잘림을 거절합니다

raw UTF-8과 Unicode 이스케이프는 유효한 UTF-16 서러게이트 쌍으로 표현된 보충 문자를 포함해 같은 문자열 값을 담습니다. 짝 없는 서러게이트 이스케이프는 문서 변경이나 바이너리 발행 전에 실패합니다

연산 한도에는 memoryBytes, outputBytes, resultBytes, pixels가 있습니다. 문서 한도는 이전에 로드한 핸들에도 적용되지만, 관리 메모리와 렌더링 한도는 프로세스 RSS 상한을 약속하지 않습니다

PDF와 PNG 출력은 출력 콜백이 시작하기 전에 완전히 준비되고 검사됩니다. 호출자 소유 출력 콜백은 자체 I/O 실패 후 부분 전송을 남길 수 있지만, 바이너리나 결과 발행이 실패해도 폼 편집은 커밋되지 않고 이전에 로드한 컨텍스트도 교체되지 않습니다

성공한 PDF 변경은 준비된 출력을 현재 문서이자 비공개 소스 스냅샷으로 커밋하므로, 이후 같은 값의 FDF나 XFDF 임포트는 updated=0과 함께 커밋된 PDF 바이트를 그대로 돌려주며 앞선 폼 채우기, typed 리치 appearance, 그려진 텍스트, 임포트한 페이지를 유지합니다

비공개 스테이징 파일은 컨텍스트가 교체되거나 파괴될 때 제거됩니다. 성공한 증분 폼·서명 출력은 원본 소스 접두부와 암호화 정책을 보존합니다

근거 자료

선택적 아카이브 폰트 복구는 콜백 전에 실제 PDF/A-4 검증과 함께 bounded Ghostscript 대체와 임베딩을 켭니다

네이티브 주석 검토 PDF는 의미 비교에 실제 준비된 PDF 출력, Unicode 하이라이트, 인증된 P3 어노테이션 권한을 더합니다

네이티브 계약 비교는 bounded 두 핸들 의미 비교, Unicode 검토 HTML, 실제 소스 행 지오메트리를 제공합니다

일반 네이티브 문서 비교는 객체 그래프와 스트림 인코딩을 정규화하고, 명시적 임계값으로 실제 Cairo 픽셀을 비교하며, 문서 상태와 콜백 발행 예산을 보존합니다

인수 클라이언트는 실제 C 헤더 레이아웃과 버전 심볼 조회, 부분 콜백, 동시 공유 핸들 연산 80개, 취소, Unicode 편집, 롤백, 암호화 서명을 검증합니다

독립적인 pypdf, MuPDF, OpenSSL 리더가 실제 PDF, PNG 픽셀, 유지된 비밀번호, 보안 사전, 문서 ID, 정확한 ByteRange 간격, 유효한 서명, 수정된 서명 바이트 거부를 검증합니다

헤드리스 문서 API · 네이티브 렌더링 · 남은 전달 계획