네이티브 Linux C ABI 리치 폼 교환
기존 forms.import 연산은 호출자의 버전화 InputIO 콜백으로 FDF RV와 XFDF value-richtext를 받고 OutputIO로 진짜 갱신된 PDF를 발행합니다
V1 ABI 버전, export 심볼, 콜백 테이블 레이아웃은 그대로입니다. 이 바인딩은 네이티브 Linux x64를 대상으로 합니다
{"schemaVersion":1,"type":"forms.import","format":"xfdf","fontFamily":"DejaVu Sans","fontSize":12}
대상 PDF는 이미 로드되어 있어야 합니다. InputIO는 다른 PDF가 아니라 실제 폼 데이터 바이트를 공급합니다
inline-xhtml-v1 프로파일은 유한한 네이티브 XHTML 디코더로 섞인 Unicode 텍스트 순서, 문단과 명시적 행바꿈, 상속된 인라인 폰트 크기, RGB 색, 굵기, 이탤릭, 밑줄, 취소선, 문단 정렬을 유지합니다
선택적 이름 붙은 리치 폰트 패밀리는 상속된 CSS 패밀리 목록으로 설정된 프로그램을 고릅니다. 임의 CSS 레이아웃, 외부 스타일시트, 표, 이미지, 수직 정렬은 별도 기능으로 남습니다
fontFamily는 네이티브 폰트 프로바이더의 실제 regular, bold, italic, bold-italic 프로그램을 고릅니다. 실제 리치 값이 요구하는 스타일만 로드되고, 스칼라 field가 쓰는 regular 프로그램이 함께 로드됩니다
배포의 Fontconfig 설정이 원하는 패밀리와 페이스를 공급해야 합니다. 요청한 페이스가 없으면 평범한 프로바이더 폴백이 적용되고, fontStyles는 설치된 폰트 페이스를 보증하는 게 아니라 로드된 스타일 슬롯을 기술합니다
폰트 프로그램은 준비된 PDF의 임베디드 폰트 스트림과 실제 appearance 안에서 호출자에게 돌아옵니다. JSON 응답에는 폰트 파일 경로가 노출되지 않습니다
fontSize가 0이면 스타일 없는 XHTML은 디코더의 12포인트 기본값을 씁니다. 명시적으로 지원되는 XHTML 폰트 크기는 자기 값을 유지합니다
| 결과 필드 | 의미 |
|---|---|
updated | 바뀐 말단 field 수. 지원되는 스타일만의 변경도 포함됩니다 |
richFieldCount | 디코딩된 입력의 리치 field 수. 동등한 변경 없는 값도 포함됩니다 |
fontStyles | 실제 로드된 폰트 슬롯, regular, bold, italic, boldItalic 순서 |
richXMLProfile | 디코딩된 입력에 리치 field가 있을 때 inline-xhtml-v1 또는 inline-xhtml-font-families-v1 |
fontFamilies | 선택적 이름 붙은 패밀리 배열을 공급했을 때의 설정 패밀리 레이블 |
동등한 정규·비정규 리치 마크업은 텍스트와 지원 스타일이 일치할 때 멱등합니다. 바뀌지 않은 읽기 전용 field는 소스 RV를 유지하고, 다른 지원 스타일은 읽기 전용 보호를 강제합니다
변경 없는 임포트는 기존 서명·암호화 리비전을 포함해 정확히 커밋된 비공개 PDF 스냅샷을 발행하며 빈 교차 참조 리비전을 쌓지 않습니다. 바뀐 호출자 입력 바이트나 백킹 파일이 로드된 스냅샷을 교체하지는 않습니다
임포트는 네이티브 리치 임포트 트랜잭션으로 인증된 AES 보안, 실제 서명 리비전, DocMDP P1/P2/P3 결정, FieldMDP 잠금을 유지합니다
합쳐진 폰트 프로그램은 폰트별 네이티브 한도에 더해 limits.memoryBytes의 1/4로 제한됩니다. 기존 폼 데이터, 글리프, 객체, 출력, 결과 한도는 계속 적용됩니다
콜백은 호출 스레드에서 동기로 실행됩니다. 부분 입력·출력 콜백도 받아들이고, 취소는 파싱, 폰트 로딩, appearance 준비, 발행 중에 계속 유효합니다
핸들은 PDF와 JSON 콜백이 둘 다 성공한 뒤에만 커밋합니다. 콜백 오류나 취소는 이전 상태를 유지하고, 호출자는 싱크가 이미 받은 부분 바이트를 버립니다
기능 광고에는 formData.richXML=true, 호환 기본값 richXMLProfile=inline-xhtml-v1, 두 richXMLProfiles, 최대 16개 레이블의 선택적 이름 붙은 패밀리 선택, 지원되는 네 fontStyles가 들어갑니다. 주석 교환은 false로 남습니다
내부 스타일 시트는 상한이 적용된 selector, importance, specificity, 소스 순서를 실제 가져온 rich 값과 저장 모양에 적용합니다. 반복되는 동등 import와 실패한 공개는 기존 트랜잭션 원본 바이트와 no-op 동작을 유지합니다
내부 스타일시트는 유계 selector, importance, 명시도, 소스 순서를 실제 가져온 리치 값과 저장된 appearance에 적용합니다. 동등한 가져오기 반복과 게시 실패는 기존 트랜잭션 보장을 유지합니다
richTextResources는 바뀌지 않은 execute-json-v1 연산으로 링크되고 가져온 CSS 텍스트를 공급합니다
acceptance에는 일치하는 런타임 유닛과 함께 FPC 3.3.1 이상을 쓰고 실제 사용한 컴파일러 빌드를 기록하세요
JSON 연산 파싱은 이스케이프된 NUL과 Unicode 객체 키를 보존합니다. richTextResources 안의 NUL은 문서가 바뀌기 전에 거부되며, JSON 디코딩 중 조용히 사라지지 않습니다
재사용 가능한 Tests/Linux/JSONOperationUnicode/Run.py 관문은 선택된 제품 파서를 검사하고, 실제 콜백 스위트도 컴파일된 공유 라이브러리와 PDF 트랜잭션을 검사합니다