Как обнаружить верхний индекс с ItextSharp? - PullRequest
3 голосов
/ 25 января 2011

Hy

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

Спасибо

Ответы [ 2 ]

3 голосов
/ 25 января 2011

Отказ от ответственности: у меня нет никаких доказательств этого, но ...

Я бы ожидал, что super / subscript будет идентичен обычному тексту. Это тот же шрифт, только меньше. Если он находится в той же строке, что и другой текст, сценарии super / sub поднимаются и опускаются, но вы не сможете обнаружить это с помощью какого-либо явного метатега в формате, ориентированном на макет, например PDF.

Другими словами, я бы предположил , что вам нужно идентифицировать супер / подписчиков по эвристике: найти текст, который меньше и смещен по вертикали по сравнению с другим текстом в той же строке. Легко ли это сделать или нет, зависит от создателя PDF-файла и деталей ITextSharp, поскольку даже определение «линии» не обязательно просто.

0 голосов
/ 26 апреля 2013

Здесь вам нужно реализовать немного пользовательской логики.В PDF нет тега, обозначающего верхний индекс / нижний индекс, он просто находится на другом базовом уровне.В таких случаях, вам нужно будет записать вашу базовую линию (вместе с вашим ростом).Несколько быстрых псевдокодов:

    //input -> curText
    if(curText.Baseline > previousText.Baseline && 
         curText.Baseline < (prevText.Baseline + prevText.Height))
    {
         // This is most likely superscript //
    }
    else if(curText.Baseline < previousText.Baseline &&
         prevText.Baseline < (curText.Baseline + curText.Height))
    {
         // This is most likely subscript //
    }
    else
    {
         // This is probably normal text //
    }

Это решение требует от вас организации полностью неорганизованного характера файла PDF.В прошлом я использовал List <> пользовательского класса, предназначенного для организации всего текста с заданной координатой y в массивы.Используя что-то вроде этого, вы можете сравнить отдельные строки и выполнить с ними любую работу, которую захотите, прежде чем рисовать или иным образом передавать их.

...