THotPDF.SetFormUnicodeFontDict-metodi

THotPDF.SetFormUnicodeFontDict

THotPDF

Ylös

Rekisteröi kutsujan toimittaman Unicode-fontin AcroForm-oletusresurssihakemistoon (default-resources dict), jotta HotPDF:n automaattinen ulkoasuvirtageneraattori (PDF 1.7 ISO 32000-1 12.7.4.3) voi piirtää muut kuin ASCII Tx -elementin alkuarvot suoraan kohteeseen /AP sen sijaan, että se tuottaisi version v2.46.0 tyhjän AP-paikkamerkin. Käytä yhdessä metodin CreateIndirectFontDict kanssa täytettävän epäsuoran fonttisanaston varaamiseksi

Delphi syntax:

procedure SetFormUnicodeFontDict(const LogicalName: AnsiString; FontDict: THPDFDictionaryObject);

C++ syntax:

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

Kuvaus

Kun sekä LogicalName että FontDict on täytetty, kolme asiaa muuttuu seuraavissa tulosteissa: (a) AcroForm-tason /DA-merkkijono vaihtuu arvosta '/Helv 12 Tf 0 0 0 rg' arvoon '/ 12 Tf 0 0 0 rg'; (b) AcroForm-kohteen /DR /Font -alisanakirja saa merkinnän / olemassa olevien /Helv + /ZaDb -sanakirjojen rinnalle; (c) jokainen Tx-widget, joka on lisätty metodin AddTextField tai AddRichTextField kautta, saa kenttäkohtaisen /DA-määrityksensä samalla tavalla. Kun AutoFormAppearances on käytössä ja widgetin alkuperäinen arvo sisältää minkä tahansa tavun >= 0x80, GenerateTextFieldAP lähettää todellisen /AP /N Form XObjectin, jonka sisältövirta valitsee rekisteröidyn fontin Tf-operaattorilla ja renderöi tekstin CID hex-merkkijonona Tj-operaattorilla; Formin /Resources/Font -alisanakirja viittaa samaan epäsuoraan fonttiin, jotta AP on itsekantava

Kun rekisteröity fontti on peräisin metodista RegisterUnicodeTTF, lisätason Unicode-merkit (esimerkiksi U+1F600) tuotetaan yhden sisäisesti varatun CID-tunnuksen kautta sen sijaan, että UTF-16-korvikepari jaettaisiin kahdeksi Identity-H CID-tunnukseksi. HotPDF päivittää luodut /CIDToGIDMap-, /W- ja /ToUnicode-virrat viimeistelyvaiheessa, jotta sisäinen CID kartoittuu todelliseen fonttiglyphiin ja tekstin haku kartoittuu takaisin alkuperäiseen UTF-16BE-korvikepariin

ASCII Tx -kentät käyttävät edelleen merkintää /Helv ja tuottavat tavulleen samanlaisen /AP-tulosteen kuin v2.46.0 kutsujat. Välitä tyhjä LogicalName + nil FontDict tyhjentääksesi rekisteröinnin ja palataksesi vain /Helv-käyttäytymiseen. Tyypillinen työnkulku: kutsu SetFormUnicodeFontDict kerran välittömästi metodin BeginDoc jälkeen, ennen mitään AddTextField-kutsua - aiemmin luotuja widgettejä ei päivitetä takautuvasti

LogicalName – PDF-nimi, jota käytetään avaimena kohdassa /DR/Font ja operandina komennolle Tf merkkijonon /DA sisällä. Tyypillinen: 'F0'. Ei saa olla tyhjä rekisteröitäessä; tyhjä nimi ei-nil-arvoisen FontDict-sanakirjan kanssa aiheuttaa poikkeuksen

FontDict – epäsuora THPDFDictionaryObject, joka sisältää kelvollisen PDF Font -resurssin. Kutsuja on vastuussa fonttisanaston rakentamisesta oikein – tyypillisesti kyseessä on Type 0 / CIDFontType2 + Identity-H + ToUnicode CMap -koostefontti; pelkkiä ääriviivoja tai yksinkertaista näyttöä varten myös Type 1 / TrueType -alijoukko toimii hyvin. HotPDF ei validoi sisältöä, vaan ainoastaan sarjallistaa viitteen

Scope - versio v2.56.0 kattaa vain yksiriviset Tx-säätimet. Moniriviset (ffMultiline) ja lohkotut (ffComb) Tx-säätimet, joilla on ei-ASCII-alkuarvoja, lähettävät edelleen version v2.46.0 mukaisen tyhjän AP-paikkamerkin; Unicode-AP-laajennus näille haaroille on suunniteltu versioon v2.57.0+. RTL-bidi-muotoilu (arabia / heprea) vaatii Unicode Bidi -algoritmin (UAX #9) + arabian kontekstuaalisen liittämisen; myös v2.57.0+-laajuutta

Code Example

// 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;

See Also

CreateIndirectFontDict, AutoFormAppearances, AddTextField, AddRichTextField, Version