네이티브 리치 텍스트 필드

SetRichTextFieldValueWithAppearance는 동기화된 평문 V, 정규화된 XHTML RV, RichText 필드 플래그, 그리고 기존 모든 위젯의 실제 appearance를 기록합니다

각 run은 Unicode 텍스트, 폰트 스타일, 양수 포인트 크기, RGB 색, 선택적 밑줄이나 취소선, 문단 나눔, 왼쪽·가운데·오른쪽 정렬을 담습니다. 네 스타일 폰트는 호출자가 제공한 Unicode TrueType 프로그램이며 기존 편집·임베딩 검사를 그대로 통과합니다

run의 기본 스타일은 12pt regular 검정이고, 문단 정렬은 첫 run에서 가져오며 기본값은 왼쪽입니다

appearance는 실제 임베드된 스타일 폰트, 글리프 매핑, 공유 라인 베이스라인을 가진 측정된 단어 조각을 사용합니다. 반복 조각은 위젯 안에서 각 스타일 폰트 프로그램을 공유합니다

명시적 CR, LF, CRLF, NEL, LINE SEPARATOR, PARAGRAPH SEPARATOR 나눔과 문단 전환에는 multiline 필드가 필요합니다. 측정 기반 줄바꿈, 위젯 회전, 클리핑은 실제 위젯 사각형을 사용합니다

typed 갱신은 평문 필드에서 리치 텍스트를 켤 수 있지만, password, file-select, comb 조합은 변경 전에 거부됩니다

읽기 전용, MaxLen, 인증된 서명 문서 정책, 암호화 폼 채우기 권한, 취소, 그리고 객체·폰트·글리프·출력 예산은 여전히 적용됩니다

모든 리치 갱신은 문서를 바꾸기 전에 V, RV, Ff, AP override를 준비하고, 저장된 문자열과 스트림은 원래의 AES-256 R5 또는 R6 정책을 유지합니다

스타일 배열, 레이아웃 라인, 그려진 조각은 구성된 문서 한도 외에 각각 4096개 천장이 있고, 스타일 폰트 바이트는 합산해서 청구됩니다

기존 리치 필드에 대한 일반 SetTextFieldValueWithAppearance 호출은 내용을 지정한 평문 스타일로 바꾸고 RV를 동기화합니다. 값만 넘기는 SetTextFieldValue 호출도 RV를 동기화하고 NeedAppearances=true를 유지합니다

GetRichTextFieldValue는 상속된 값을 포함해 실제 저장된 XHTML 텍스트 문자열이나 UTF-8 텍스트 스트림을 읽습니다

각 문단의 첫 run은 텍스트가 비어 있어도 그 문단 정렬을 결정하고, 인라인 스타일 변경과 명시적 줄바꿈은 그 문단 정렬을 유지합니다

줄바꿈되는 multiline 필드에서 지나치게 넓은 단어는 Unicode 17 확장 그래펨 경계에서 나뉘며, 결합 시퀀스, 보충 스칼라, 이모지 시퀀스, 원본 V/RV 텍스트를 보존합니다. 필드보다 넓은 분할 불가 클러스터는 온전히 남고 잘려 보입니다

사각형과 원 테두리는 콘텐츠 클리핑 전에 그려지고, 선택된 multiline 행은 각 리치 라인의 측정된 ascent, descent, 행간을 사용해 실제 파란 배경을 받습니다

네이티브 JSON ABI

{"schemaVersion":1,"type":"forms.fill","fields":[
  {"name":"Input","fontFamily":"DejaVu Sans Mono","richTextRuns":[
    {"text":"Regular Unicode text "},
    {"text":"Bold red text","fontStyle":"bold","fontSize":20,"color":[1,0,0]},
    {"text":"Next paragraph","fontStyle":"italic","paragraphBreakBefore":true,
     "alignment":"center","underline":true}
  ]}
]}

richTextRuns는 필수 text와 선택적 fontStyle, fontSize, color, underline, strikeOut, paragraphBreakBefore, alignment를 가진 객체 배열이며, fontStyle은 regular, bold, italic, boldItalic을 받습니다

선택적 fontFamilies 배열은 fontFamily로 run마다 실제 이름 있는 프로그램을 고르고, edit 수준 배열이 operation 수준 배열을 덮어쓰며, run 레이블을 생략하면 첫 번째 패밀리를 씁니다

생략된 run fontSize는 양수일 때 필드 operation의 fontSize를 쓰고 그렇지 않으면 12입니다. 선택적 value는 run에서 유도한 평문과 정확히 일치해야 하며, 명시적 문단 사이에는 캐리지 리턴을 사용합니다

스타일 run에는 appearance=true가 필요하고, forms.read는 리치 필드의 실제 저장된 XHTML을 richText로 반환합니다

ABI는 기존 operation 레이아웃을 유지하고 새 로드 컨텍스트를 커밋하기 전에 완전한 binary와 결과 출력을 준비합니다. 실패한 쓰기나 취소는 이전 필드를 보존합니다

검증과 남은 작업

Tests/Linux/Run-HeadlessRichTextAcceptance.sh와 Tests/Linux/HotPDFHeadlessRichTextTests.pas는 실제 저장된 PDF를 다루고, Verify-HeadlessRichText.py는 XHTML, 값, 네 개의 실제 폰트 프로그램, 글리프 맵, 장식 경로, 가시 위젯 픽셀을 독립적으로 검사합니다

이 API는 typed run을 받아 완전한 문단 단위로 기본 Unicode 17 기회를 소비하며, 스타일이 바뀌어도 단어, nonbreaking space, 문장부호, 숫자 그룹을 보존합니다. 새 줄에 들어갈 수 있는 그룹은 실제 스타일 폰트 advance를 사용해 함께 이동합니다

스타일 그룹 줄바꿈은 섞인 포인트 크기에서도 공유 베이스라인을 유지하고, 실제 레이아웃과 정규화 XHTML 양쪽에서 스타일 경계의 CRLF를 하나로 묶습니다

스타일을 넘나드는 그래펨 배치는 지나치게 넓은 논리 클러스터를 온전히 하나의 물리 라인에 배치하고, 실제 폰트·색·크기 조각을 유지하며, 사각형보다 넓은 분할 불가 클러스터에는 기존 클리핑 동작을 적용합니다

문맥적 접합은 주변 Unicode 텍스트를 사용하고, 각 실제 물리 라인은 typed 스타일을 넘어 섞인 bidi와 문자 체계 항목을 순서화하면서 문단 방향을 유지합니다

스타일을 넘나드는 마크는 실제 base, ligature, 선행 mark 글리프에 진짜 GPOS 첨부를 사용하며, 각 스타일 폰트, 포인트 크기, 색과 가시 글리프 돌출을 보존합니다

리치 FDF와 XFDF 교환은 지원되는 bounded XHTML 스타일 프로파일을 실제 임베드 폰트와 저장된 appearance로 디코딩합니다

명시적 방향성 embedding, override, isolate, 괄호 짝 컨텍스트는 typed 스타일을 넘는 자동 줄바꿈에서도 살아남습니다. 하나의 공유 논리 문단 순서가 독립적인 물리 라인 재정렬과 네이티브 문맥 글리프 셰이핑을 공급합니다

Unicode 방향 제어 문자만 담고 있는 클러스터는 문자 간격을 소모하지 않으면서 원래 논리 값과 선택 텍스트를 보존하고, 가시 클러스터와 일반 공백은 구성된 advance를 유지합니다

문단에서 유도한 라인 순서와 캐시된 라인 재정렬은 온전한 UTF-16 스칼라 경계를 보존하고 공유 문단 레코드를 바꾸지 않으면서 물리 라인 끝 공백을 초기화합니다

이름 있는 폰트 패밀리는 실제 패밀리 폰트, 독립적인 advance, 패밀리를 인식하는 폼 가져오기와 함께 명시적 typed-run 및 bounded XHTML 선택을 제공합니다

공급 패밀리 폴백은 작성된 스타일 이음매를 넘나드는 완전한 그래펨을 고르며, Linux JSON과 버전이 붙은 콜백은 같은 동작을 실제 설정된 폰트 프로그램에 묶습니다

임의 XHTML과 CSS, 스타일 시트, 일반 레이아웃은 여전히 진행 중인 작업입니다

네이티브 리치 텍스트 필드 동작 · 문서 API