iTextSharp - PDF Шрифты TT1B4t00 Неверный размер - PullRequest
0 голосов
/ 17 октября 2018

Я iTextSharp, чтобы получать текстовые блоки для построения слов и определения местоположения из существующих PDF-файлов.Я использую размер шрифта, чтобы вычислить встроенные куски и размер слова.Это работает отлично, но недавно я столкнулся с существующими PDF-файлами, созданными автором (ClarityPDF), который делает шрифт TT1B4t00.Когда я читаю куски с помощью iTextSharp, я получаю другой размер, что дает мне неправильное местоположение.

Все документы PDF используют Arial Narrow 12pt.Я сделал простой тест с использованием писателей ClarityPDF и BluebeamPDF в одном документе.

Результаты:

  • Оба автора помещают источник документа в одно и то же место.
  • Оба автора сохраняют точки расположения и размер документа одинаковыми.
  • Шрифты разные, и при распечатке на консоль я получаю разные размеры.Arial - 12pt, а TT1B4t00 - около 5pt.

Изображение документа, созданного с помощью BluebeamPDF
enter image description here

Изображение документа, созданного с помощью ClarityPDF enter image description here

  • Есть ли способ программно преобразовать их обратно в 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

Большое спасибо.

1 Ответ

0 голосов
/ 27 октября 2018

Программа записи PDF поворачивает PDF на 90 градусов, что я смог увидеть с помощью itext-rups-5.5.9.Это странно, потому что вы не можете видеть это вращение в средстве просмотра.Кроме того, писатель ClarityPDF отражает систему координат по оси Y в середине чертежа.После того, как я учел эти две вещи, правильное расположение чанков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...