True, keď znak na zadanom indexe PDFium počas extrakcie textu syntetizovalo namiesto toho, aby bol vykreslený priamo obsahovým streamom strany. Syntetické znaky sa vytvárajú pri rozklade ligatúr, mäkkom delený slov a heuristikách hraníc slov alebo riadkov, aby výsledky vyhľadávania a výberu celého textu zneli prirodzeneproperty CharacterGenerated[Index: Integer]: Boolean; // read only
| Index | Index znaku so základom 0 na aktuálnej strane, v rozsahu 0 až CharacterCount - 1. |
CharacterGenerated vráti True, keď znak na
zadanom indexe bol vygenerovaný interne PDFiom namiesto toho, aby bol prítomný v
pôvodnom streame obsahu. Typické príklady sú: rozklad ligatúry (rozdelenie
glyfu ligatúry fi na f + i), koncová
medzera, ktorú PDFium vkladá medzi susedné textové behy, ktoré sú vizuálne oddelené, a
znaky konca riadku vkladané na konci každého vizuálneho riadku.
Vygenerované znaky nemajú vlastné kreslenie v streame obsahu strany, takže ich ohraničujúce obdĺžniky sa odvodzujú zo susedných glyfov. S ich pozíciou na strane zaobchádzajte opatrne, ak potrebujete pixelovo presný hit-testing; ich CharacterRectangle sa môže zrútiť na oblasť nulovej šírky alebo výšky.
Pre úlohy ako extrakcia doslovného textu (digitálne podpisy, pracovné toky hash-textu, ASCII-pravdivé porovnanie so streamom obsahu strany) najprv vyfiltrujte vygenerované znaky. Pre bežné vyhľadávanie textu a kopírovanie do schránky je príznak čisto informatívny — PDFium už znaky vložilo, pretože používatelia ich očakávajú.
True; nepredpokladajte, že vygenerované znaky sú vždy neviditeľné glyfy.
// Build a verbatim string that contains only characters from the content stream
var
I: Integer;
S: WString;
begin
S := '';
for I := 0 to Pdf.CharacterCount - 1 do
if not Pdf.CharacterGenerated[I] then
S := S + Pdf.Character[I];
Memo1.Text := S;
end;