Как разделить PDF по заголовкам с определенным размером или шрифтом - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь разделить PDF по его заголовкам в зависимости от его размера или шрифта.

В настоящее время я могу извлечь только шрифты PDF, но мне нужно знать размер или шрифт, чтобы увидеть, если этотекст это заголовок. Я не знаю, как читать PDF по его заголовкам с определенным размером или шрифтом, я знаю, что он может извлечь текст, но это просто, простой текст, как узнать, какой размер или шрифт у этого текста?

Кстати, мне удалось разделить PDF по его закладкам, а также по "детям" закладки

, но мне нужно разделить PDF еще глубже. Вот почему я пытаюсь заставить названия разделить PDF по ним.

Я провел некоторое исследование, но не смог найти что-то очень полезное для этого случая.

Вот некоторые вопросы:

  • Как вы получаете размер?

  • Как вы получаете шрифт?

  • Как вы перебираете PDF построчно?

  • Как проверить текст (строку), если у вас есть определенный шрифт?

Какой-то код

HashSet<String> fontNames = new HashSet<string>();
PdfDictionary resources;
for (int p = 1; p <= reader.NumberOfPages; p++)
{
    PdfDictionary dic = reader.GetPageN(p);
    resources = dic.GetAsDict(PdfName.RESOURCES);

    if (resources != null)
    {
        //get fonts dictionary
        PdfDictionary fonts = resources.GetAsDict(PdfName.FONT);
        if (fonts != null)
        {
            PdfDictionary font;
            foreach (PdfName key in fonts.Keys)
            {
                font = fonts.GetAsDict(key);
                String name = font.GetAsName(PdfName.BASEFONT).ToString();
                fontNames.Add(name);
            }

        }
    }
}

Другой способ List<object[]> fonts2 = BaseFont.GetDocumentFonts(reader);

Другой код: получить текст

ITextExtractionStrategy strategy = new LocationTextExtractionStrategy();
string currentText = PdfTextExtractor.GetTextFromPage(reader, i, strategy);

words = currentText.Split('\n');
for (int j = 0, len = words.Length; j < len; j++)
{
    line = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(words[j]));
}

1 Ответ

1 голос
/ 10 октября 2019

Я использовал это:

public void RenderText(iTextSharp.text.pdf.parser.TextRenderInfo renderInfo)

, а параметр renderInfo имеет все, что мне нужно.

renderInfo.GetFont().PostscriptFontName;  // Font Name
renderInfo.GetBaseline().GetStartPoint(); // Coordinates - (56.6929 , 727.8466, 1)
renderInfo.GetAscentLine().GetEndPoint(); // Coordinates - (96.78018, 737.1749, 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...