Windows 원본 typed 리치 폼 채우기

Windows file job과 hpdf_document_execute_json_v1은 일반 텍스트, choice, button 갱신과 함께 richTextRuns가 들어 있는 forms.fill 요청을 받습니다. 모든 필드는 하나의 인증된 candidate PDF를 공유합니다

원본 typed run은 네이티브 appearance 컴포저로 곧장 들어갑니다. AP 생성은 직렬화된 RV 색 표현을 왕복하지 않고, 평문 V, 표준 리치 RV, 실제 AP를 함께 준비합니다

요청

{
  "schemaVersion": 1,
  "type": "forms.fill",
  "fontFamilies": ["DejaVu Sans", "DejaVu Serif Condensed"],
  "fields": [
    {"name": "Input", "richTextRuns": [
      {"text": "Original typed precision", "fontFamily": "DejaVu Sans",
       "fontStyle": "regular", "fontSize": 12.123456,
       "color": [0.123456, 0.234567, 0.345678]},
      {"text": "Another paragraph", "fontFamily": "DejaVu Serif Condensed",
       "fontStyle": "boldItalic", "fontSize": 14.125,
       "paragraphBreakBefore": true, "alignment": "center",
       "underline": true, "strikeOut": false}
    ]},
    {"name": "Plain", "value": "Changed scalar"},
    {"name": "Choice", "values": ["B", "C"]},
    {"name": "Check", "value": "Yes"}
  ]
}

각 필드는 richTextRuns나 scalar value, values 중 하나를 제공합니다. richTextRuns 옆의 선택적 value는 typed 문단 사이의 캐리지 리턴까지 포함해 네이티브 유도 평문과 정확히 일치해야 하고, 직렬화된 richText는 typed-run 입력이 아닙니다

각 run은 text가 필수이고 fontStyle, fontSize, color, underline, strikeOut, paragraphBreakBefore, alignment를 받습니다. fontStyle은 regular, bold, italic, boldItalic이고, alignment는 left, center, right이며, RGB 컴포넌트는 0부터 1 사이의 유한한 수입니다

run 크기는 양수여야 하고 최대 4096pt입니다. 크기를 생략하면 필드 fontSize나 12pt를 씁니다. 네이티브 PDF 수치 포매팅은 그대로 적용되고, 표준 RV CSS는 색을 8비트 컴포넌트로 직렬화합니다

필드 appearance 옵션에는 fontSize, padding, characterSpacing, wordSpacing, paintWhiteBackground가 있습니다. 진짜 AP 생성이 필수이므로 appearance=false는 유효하지 않습니다

실제 폰트 프로그램

필드의 fontFamilies 배열은 operation 배열을 덮어씁니다. 구성된 배열은 비지 않은 유효한 패밀리 레이블 1~16개를 담고, 매칭은 ASCII 대소문자를 무시하고 나머지 Unicode는 정확히 비교합니다. 명시적 run fontFamily는 구성된 레이블과 일치해야 하고, run 레이블을 생략하면 첫 번째 패밀리를 선택합니다

fontFamilies가 없으면 기존 단일 패밀리 경로를 그대로 쓸 수 있습니다. 폰트 콜백 레이블은 필드 fontFamily, operation fontFamily, DejaVu Sans 순으로 나오고, 원본 단일 패밀리 run은 run fontFamily를 생략합니다

file job은 input, output, fonts를 추가합니다. fonts는 구성된 각 패밀리 레이블을 regular, bold, italic, boldItalic 파일 경로로 매핑하고, 쓰이는 스타일과 scalar appearance에 필요한 regular 면만 로드합니다. 파일 경로는 출력을 별칭으로 가리켜서는 안 됩니다

버전화된 C ABI 호출자는 기존 hpdf_form_data_operation_v1 확장을 쓰고 폰트 콜백에서 읽을 수 있는 hpdf_io_v1 테이블을 반환합니다. 패밀리 레이블은 UTF-8이고 스타일 값은 0부터 3이며, 모든 실제 프로그램은 appearance를 조립하기 전에 한도가 있는 owned 바이트로 복사됩니다

기존 V1 심볼, 기본 구조체 크기, 선택적 확장 오프셋은 그대로입니다. 패밀리/스타일 자산은 요청 하나 안에서 캐시되어 필드 사이에 공유되고, 같은 owned 할당을 반복해서 청구하지 않습니다

opt-in인 fallbackFontFamilies=true는 실제 제공된 패밀리 사이에서 온전한 그래펨 단위 폴백을 적용합니다. typed run은 순서가 있는 fontFamilyCandidates 배열을 둘 수 있고, 선언된 후보가 구성 순서보다 먼저 고려됩니다. 요청 상속과 네 스타일 콜백 로딩은 Windows 제공 패밀리 리치 폰트 폴백을 보십시오

현재 그래프와 발행

InputIO가 없으면 C ABI는 자체 owned 로드 리비전과 실제 pending 그래프를 씁니다. 선택적 InputIO는 교체 PDF를 공급하며, 폰트 콜백 전에 비공개로 복사하고 인증합니다. 빌린 입력 변경이든 실패한 교체든 커밋된 컨텍스트를 바꿀 수는 없습니다

OutputIO와 ResultIO는 필수입니다. 실제 candidate PDF와 결과 JSON이 모두 성공으로 끝나고 마지막 취소 체크포인트를 지나야 C ABI가 문서와 소스를 교환합니다

실패한 콜백이 이미 candidate 바이트를 받았을 수 있습니다. 반환 상태가 0이 아니면 호출자는 그 바이트를 버려야 하고, 이전에 커밋된 라이브러리 컨텍스트는 그대로입니다

file job은 요청된 출력을 원자적으로 교체하기 전에 온전한 candidate와 한도가 있는 응답을 staging합니다. 폰트 누락, 정책 실패, 취소, 용량 부족은 기존 대상을 보존합니다

정책과 결과

기존 서명 무결성, DocMDP P1/P2/P3, FieldMDP 잠금, 읽기 전용 플래그, AES 폼 채우기 권한은 네이티브 인증 엔진으로 강제됩니다. signaturePolicy는 Windows 폼 가져오기와 같은 명시적 trust, timestamp, 폐기 설정을 받습니다

읽기 전용 same-input 갱신은 실제 AP 연산자, 폰트, 리소스, 필드 값이 동등할 때만 성공합니다. 압축 AP 스트림과 비정규화 동등 RV도 지원하며, RV 색이 같은 CSS 값으로 양자화되더라도 진짜 스타일 변경은 여전히 변경입니다

실제로 바뀌지 않은 요청은 정책 인증 후 준비된 현재 리비전의 정확한 바이트를 발행합니다. pending 그래프 편집은 비교 전에 그 현재 리비전에 실체화됩니다

성공 응답에는 실제 준비된 candidate에서 온 typedRichText=true, typedRichProfile=original-typed-runs-v1, updated, fieldCount, fontBytes, fields가 들어갑니다. formDataExchange.typedRichFill이 구현된 이 진입점들을 설명합니다

각 fields 항목은 일반 name, scalar value, fieldType 요약을 유지합니다. 배열에 뒷받침된 choice는 이 요약에서 scalar value가 비지만, 전체 선택은 저장된 PDF와 이후 FDF/XFDF 내보내기에 남습니다

직접 ExecuteLoadedOperation job 파사드와 레거시 HPDFDocRunJob handle/폰트 콜백 확장은 별도 작업으로 남아 있습니다. 이 바인딩은 annotation, embedded-file, action, incremental-FDF 교환을 추가하지 않습니다

관련 항목

FillTypedData, Windows 트랜잭션, 네이티브 혼합 typed 갱신, Windows FDF/XFDF 교환