THotPDF.SetFormUnicodeFontDict-metode

 

THotPDF.SetFormUnicodeFontDict

THotPDF

 

Øverst
Placeholder for topic body

Registrerer en brugerleveret Unicode-skrifttype in AcroForm default-resources-ordbogen, så HotPDF's automatiske udseendestrøm-generator (PDF 1.7 ISO 32000-1 12.7.4.3) kan gengive ikke-ASCII Tx-widget-startværdier direkte i/AP, i stedet for at udsende den tomme AP-pladsholder fra v2.46.0; par medCreateIndirectFontDictfor at allokere den indirekte skrifttypeordbog, der skal udfyldes

 

Delphi-syntaks:

procedure SetFormUnicodeFontDict(constLogicalName: AnsiString; FontDict: THPDFDictionaryObject);

 

C++-syntaks:

void SetFormUnicodeFontDict(const AnsiString& LogicalName, THPDFDictionaryObject* FontDict);

 

Beskrivelse

Når beggeLogicalName and FontDicter udfyldt, ændres tre ting i efterfølgende udsendelse: (a) på AcroForm-niveau/DAskifter strengen fra'/Helv 12 Tf 0 0 0 rg' to '/<LogicalName> 12 Tf 0 0 0 rg'; (b) AcroForm/DR /Fontunderordbogen får en post/<LogicalName> <FontDict-indirect-ref>ved siden af den eksisterende/Helv + /ZaDb; (c) enhver Tx-widget tilføjet viaAddTextField or AddRichTextFieldfår sit pr. felt/DAindstillet på samme måde; nårAutoFormAppearanceser slået til og widgetens startværdi indeholder enhver byte >= 0x80,GenerateTextFieldAPudsender en rigtig/AP /NForm XObject, hvis indholdsstrøm vælger den registrerede skrifttype viaTfog gengiver teksten som en CID-hex-strengTjoperator; Formens/Resources/Fontunderordbog refererer til den samme indirekte skrifttype, så AP'en er selvstændig

Når den registrerede skrifttype kommer fra RegisterUnicodeTTF, udsendes Unicode-tegn i det supplerende plan (f.eks. U+1F600) via et enkelt internt allokeret CID i stedet for at opdele UTF-16-surrogatparret i to Identity-H CID'er. HotPDF opretter de genererede /CIDToGIDMap-, /W- og /ToUnicode-streams ved afslutning, så det interne CID kortlægges til den rigtige skrifttypeglyf, og tekstudtrækning kortlægges tilbage til det originale UTF-16BE-surrogatpar

ASCII Tx-felter fortsætter med at bruge/Helvog udsende byte-identiske/APoutput til v2.46.0-kaldere; overfør tomLogicalName + nil FontDictfor at rydde registreringen og vende tilbage til/Helv-kun adfærd; typisk arbejdsgang: kald SetFormUnicodeFontDict én gang umiddelbart efter BeginDoc, før enhver AddTextField - widgets oprettet tidligere opdateres ikke med tilbagevirkende kraft

 

LogicalName - det PDF-navn, der bruges som nøgle i/DR/Fontog som operand tilTfinden i/DAstrengen; typisk:'F0'; må ikke være tomt ved registrering; et tomt navn med en ikke-nil FontDict udløser en undtagelse

FontDict - en indirekteTHPDFDictionaryObjectder indeholder en gyldig PDF Font-ressource; kalderen er ansvarlig for at bygge skrifttypeordbogen korrekt - typisk en Type 0 / CIDFontType2 + Identity-H + ToUnicode CMap sammensat skrifttype; til udelukkende stregede eller simple visninger fungerer en Type 1 / TrueType-delmængde også; HotPDF validerer ikke indholdet, det serialiserer blot referencen

 

Scope - v2.56.0 dækker kun enkeltlinjede Tx-widgets; flerlinjede (ffMultiline) og kam (comb) (ffComb) Tx-widgets med ikke-ASCII-startværdier udsender stadig den tomme AP-pladsholder fra v2.46.0; Unicode-AP-udvidelsen til disse grene er planlagt til v2.57.0+; RTL bidi-formning (arabisk/hebraisk) kræver Unicode Bidi-algoritmen (UAX #9) + arabisk kontekstuel samling; ligeledes inden for rammerne af v2.57.0+

 

Kodeeksempel

// Register a Type 0 / CIDFontType2 + Identity-H composite font for
// AcroForm Tx widget AP rendering. (Real production code adds a
// /FontFile2 stream and a ToUnicode CMap so the glyphs actually
// render - omitted here for brevity.)
var
  F0, Descendant, FontDescriptor, CIDSysInfo: THPDFDictionaryObject;
  Descendants: THPDFArrayObject;
  R: TRect;
begin
  HPDF.BeginDoc;
  HPDF.AutoFormAppearances := True;

  F0 := HPDF.CreateIndirectFontDict;          // empty indirect dict
  F0.AddNameValue('Type', 'Font');
  F0.AddNameValue('Subtype', 'Type0');
  F0.AddNameValue('BaseFont', 'MyCJK');
  F0.AddNameValue('Encoding', 'Identity-H');

  CIDSysInfo := THPDFDictionaryObject.Create(nil);
  CIDSysInfo.AddStringValue('Registry', 'Adobe');
  CIDSysInfo.AddStringValue('Ordering', 'Identity');
  CIDSysInfo.AddNumericValue('Supplement', 0);

  FontDescriptor := THPDFDictionaryObject.Create(nil);
  FontDescriptor.AddNameValue('Type', 'FontDescriptor');
  // ... fill required Ascent / Descent / FontBBox / etc

  Descendant := THPDFDictionaryObject.Create(nil);
  Descendant.AddNameValue('Type', 'Font');
  Descendant.AddNameValue('Subtype', 'CIDFontType2');
  Descendant.AddNameValue('BaseFont', 'MyCJK');
  Descendant.AddValue('CIDSystemInfo', CIDSysInfo);
  Descendant.AddValue('FontDescriptor', FontDescriptor);
  Descendant.AddNumericValue('DW', 1000);

  Descendants := THPDFArrayObject.Create(nil);
  Descendants.AddObject(Descendant);
  F0.AddValue('DescendantFonts', Descendants);

  HPDF.SetFormUnicodeFontDict('F0', F0);

  R.Left := 60; R.Top := 60; R.Right := 280; R.Bottom := 100;
  HPDF.CurrentPage.AddTextField('Greeting', '你好世界', R);

  HPDF.EndDoc;
end;

 

Se også

CreateIndirectFontDict, AutoFormAppearances, AddTextField, AddRichTextField, Version