Я iTextSharp, чтобы получать текстовые блоки для построения слов и определения местоположения из существующих PDF-файлов.Я использую размер шрифта, чтобы вычислить встроенные куски и размер слова.Это работает отлично, но недавно я столкнулся с существующими PDF-файлами, созданными автором (ClarityPDF), который делает шрифт TT1B4t00.Когда я читаю куски с помощью iTextSharp, я получаю другой размер, что дает мне неправильное местоположение.
Все документы PDF используют Arial Narrow 12pt.Я сделал простой тест с использованием писателей ClarityPDF и BluebeamPDF в одном документе.
Результаты:
- Оба автора помещают источник документа в одно и то же место.
- Оба автора сохраняют точки расположения и размер документа одинаковыми.
- Шрифты разные, и при распечатке на консоль я получаю разные размеры.Arial - 12pt, а TT1B4t00 - около 5pt.
Изображение документа, созданного с помощью BluebeamPDF
![enter image description here](https://i.stack.imgur.com/kWnCG.png)
Изображение документа, созданного с помощью ClarityPDF ![enter image description here](https://i.stack.imgur.com/xL58R.png)
- Есть ли способ программно преобразовать их обратно в Arial Narrow 12 pt?
- Кто-нибудь видел стиль шрифта TT1B4t00?Если это так, может ли он иметь масштабный коэффициент или тип единицы измерения, который мне не хватает и может добавить в мою программу?
- Может быть, проблема в том, о чем я не думал?
files https://drive.google.com/file/d/1uq9rWz10u31Fhkp39UtkYc-W1GZPooih/view?usp=sharing https://drive.google.com/file/d/1E0LPXRGWATBW1nrlDKk4Oo4BvMBnxBIC/view?usp=sharing
Вот мой пример кода метода визуализации текста, который получает расположение текста и размер шрифта.
// **************************RenderText**************************
public void RenderText(TextRenderInfo renderInfo)
{
// Get the current line
LineSegment segment = renderInfo.GetBaseline();
var location = new TextChunk(renderInfo.GetText(), segment.GetStartPoint(), segment.GetEndPoint(), renderInfo.GetSingleSpaceWidth());
Debug.Print(renderInfo.GetText());
// Get position and location of text.
Vector horizonCoordinate = renderInfo.GetDescentLine().GetStartPoint();
Vector verticalRight = renderInfo.GetAscentLine().GetEndPoint();
location.PosLeft = horizonCoordinate[Vector.I1];
location.PosRight = verticalRight[Vector.I1];
location.PosBottom = horizonCoordinate[Vector.I2];
location.PosTop = verticalRight[Vector.I2];
location.curFontSize = location.PosTop - segment.GetStartPoint()[Vector.I2];
string strKey = string.Concat(renderInfo.GetFont().PostscriptFontName, location.curFontSize);
// Add fonts types to a list.
if (!ThisPdfDocFonts.ContainsKey(strKey))
{
ThisPdfDocFonts.Add(strKey, renderInfo.GetFont());
Console.WriteLine(strKey);
Console.WriteLine(location.curFontSize);
}
// Set font type to chunk
location.FontIndex = ThisPdfDocFonts.IndexOfKey(strKey);
// add chunk to list
string txt = location.text;
locationalResult.Add(location);
}
Повлияет ли размер и вращение носителя на renderInfo?Я заметил, что renderInfo не то же самое, глядя на два PDF-файла.Я проверил PDF-файлы и заметил, что СМИ не являются последовательными.![enter image description here](https://i.stack.imgur.com/b3bvh.png)
Большое спасибо.