자동 XFA Boolean 스타일과 캡션

유닛: HPDFXFA와 HPDFXFAHeadless

HPDFXFAWriteHeadlessPDF는 유효한 checkButton 프로퍼티를 소비하고 실제 XFA 레이아웃에서 네이티브 체크박스·라디오 appearance 스트림을 만듭니다

마커와 외곽선

checkButton 크기는 기본 10pt로 field 콘텐츠 영역 안의 사각 마커 영역을 제어합니다. 명시적 크기 측정값, field와 UI margin, 문단 수평·수직 정렬이 위치를 결정합니다

square와 round 셰이프가 외곽선을 정합니다. 기본 표시 마크는 square 외곽선에서 십자, round 외곽선에서 채운 원이며 XFA 3.3 checkButton 사양을 따릅니다

명시적 check, circle, cross, diamond, square, star 마크는 실제 벡터 경로를 씁니다. 공급된 폰트에 체크박스 심볼이 들어 있는지에 의존하지 않습니다

첫 번째 UI 경계 edge가 두께와 색, 가시성을 공급합니다. 기본 외곽선은 폭 0.5pt의 검은색이고, 표시 마크 색은 field의 유효 폰트 색이 정합니다

설정된 크기가 남은 콘텐츠 영역보다 크면 마커는 그 영역에 맞게 줄어듭니다. 콘텐츠 영역을 남기지 않는 캡션이나 margin은 후보 준비를 실패하게 만듭니다

스칼라 Unicode 캡션

스칼라 캡션 텍스트는 Unicode와 구분자를 정확히 유지하고, 그 위젯의 off·on·neutral appearance 전부에서 참조되는 실제 임베디드 폰트 Form XObject가 됩니다

캡션은 상태 전체에서 하나의 appearance와 폰트 그래프를 공유하고, UTF-16 유닛은 위젯당 한 번만 세어 TXFAHeadlessPDFResult.GlyphUnits에 반영됩니다

left와 right는 캡션 폭을, top과 bottom은 높이를 예약합니다. reserve가 없거나 0이면 공급된 폰트의 실제 글리프 진폭과 행 메트릭으로 자연스러운 캡션 크기를 계산합니다

인라인 캡션은 마커 앞에 놓이고 명시적 reserve를 무시합니다. 캡션 margin은 할당된 영역 안에서 텍스트를 안쪽으로 밀어 넣습니다

캡션 폰트 크기와 채우기 색은 field의 크기와 색을 덮어 씁니다. 캡션 문단 정렬은 field 정렬을 덮어 쓰고, CaptionFontFamilies로 실제 스타일 페이스와 이름 붙은 패밀리를 공급할 수 있습니다

hidden과 inactive 캡션은 영역을 차지하지 않고 폰트 그래프도 할당하지 않습니다. invisible 캡션은 캡션 글리프를 그리거나 할당하지 않으면서 자기 영역은 유지합니다

리치 캡션 소비자는 여기에 더해 유효한 XHTML, 실제 설정된 스타일 페이스와 패밀리 선택, 섞인 행 메트릭, 줄바꿈된 캡션 높이를 소비합니다

세 번째 체크박스 상태

allowNeutral가 켜지면 세 번째 저장 항목은 neutral 체크박스 export입니다. 일치하는 값은 자기만의 /AP /N 항목을 가진 별개의 네이티브 /V와 위젯 /AS를 유지합니다

neutral appearance는 빈 외곽선과 같은 캡션을 그리고 표시 마크는 그리지 않습니다

체크박스 /Opt 배열은 PDF 버튼 field 모델이 요구하듯 단일 위젯에 on-export 항목 하나를 유지합니다. 세 번째 저장 appearance 상태가 두 번째 위젯 옵션을 추가하지는 않습니다

빈 export, 예약된 Off 이름, XFAOn으로 시작하는 이름은 UTF-8 바이트를 XFAOn 뒤에 대문자 16진수로 붙여 충돌 없는 네이티브 상태 별칭을 받습니다. 세 번째 원본 export는 저장된 상태 이름에서 복원할 수 있습니다

라디오 멤버는 세 번째 항목을 무시하고 기존 2상태 appearance 사전과 template/data scope 그룹 식별자를 유지합니다

어댑터는 초기 상태 그래프를 저장합니다. 애플리케이션이 나중에 수행하는 네이티브 버튼 편집 연산은 자체 상태와 appearance 계약을 따릅니다

네이티브 인스턴스 프로퍼티와 트랜잭션

checkButton의 size, shape, mark, allowNeutral 기본값은 네이티브 런타임 스키마로 접근할 수 있습니다. 없는 checkButton border와 margin 프로퍼티는 기존 프로퍼티 트랜잭션으로 만들 수 있습니다

유효한 반복 인스턴스의 checkButton, caption, font, margin 프로퍼티는 SaveToBytes 후에도 살아남아 자동 생성된 PDF 위젯을 곧바로 제어합니다. 첫 번째 반복 인스턴스는 자기만의 독립 프로퍼티를 유지합니다

literal UTF-8 이벤트 소스와 Unicode 바인딩 값은 저장된 XDP가 변환되기 전까지 스칼라를 유지합니다. 네이티브 JavaScript 이벤트가 바꾼 캡션 텍스트도 포함입니다. HPDFXFAExecuteJavaScriptEvent를 참고하세요

스크립트가 실패하면 생성 전의 정확한 네이티브 XML을 복원하고, 준비 실패는 대상 위치와 길이, 바이트를 보존합니다. 글리프·객체·폰트 예산과 취소는 자동 생성자의 트랜잭션 경계를 유지합니다

검증 소스

Tests/Linux/XFAHeadlessBooleanStylesTests.pas는 리더 UI 없이 실제 마크 쌍, 캡션, neutral과 예약 상태, 반복 인스턴스 스크립트 변경, 롤백 케이스를 만듭니다

Tests/Linux/Verify-XFAHeadlessBooleanStyles.py는 pypdf와 MuPDF로 실제 저장된 상태 사전, 공유 폰트 리소스, 캡션 배치, Unicode 텍스트, 구별되는 마커 픽셀을 검사합니다

Boolean 콜백 메타데이터는 네이티브 생성자가 소비하는 추가 전송 힌트를 기술합니다