Как создать XMl или файл разметки из PDF с использованием itext? - PullRequest
0 голосов
/ 18 августа 2011

Я хочу создать текстовый файл для этого ниже pdf

http://examples.itextpdf.com/results/part4/chapter16/with_font.pdf

вывод должен быть похож на ::

iText в действии

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

В случае, когда используются разные шрифты, o / p должно быть похоже на

Например:iText в действии

Любая помощь приветствуется.Заранее спасибо!

1 Ответ

0 голосов
/ 19 августа 2011

Вот код, который я использовал, чтобы найти набор шрифтов в формате PDF.

public static void processResource(Map<String, String> set, PdfDictionary resource)
    {
        if (resource == null)
            return;
        PdfDictionary xobjects = resource.getAsDict(PdfName.XOBJECT);
        if (xobjects != null)
            {
                for (PdfName key : xobjects.getKeys())
                    {
                        processResource(set, xobjects.getAsDict(key));
                    }
            }
        PdfDictionary fonts = resource.getAsDict(PdfName.FONT);
        if (fonts == null)
            return;
        PdfDictionary font;
        for (PdfName key : fonts.getKeys())
            {
                font = fonts.getAsDict(key);
                String name = font.getAsName(PdfName.BASEFONT).toString();
                if (name.length() > 8 && name.charAt(7) == '+')
                    {
                        name = String.format("%s subset (%s)", name.substring(8), name.substring(1, 7));
                    }
                else
                    {
                        name = name.substring(1);
                        PdfDictionary desc = font.getAsDict(PdfName.FONTDESCRIPTOR);
                        if (desc == null)
                            name += " nofontdescriptor";
                        else if (desc.get(PdfName.FONTFILE) != null)
                            name += " (Type 1) embedded";
                        else if (desc.get(PdfName.FONTFILE2) != null)
                            name += " (TrueType) embedded";
                        else if (desc.get(PdfName.FONTFILE3) != null)
                            name += " (" + font.getAsName(PdfName.SUBTYPE).toString().substring(1) + ") embedded";
                    }
                set.put(font.getAsName(PdfName.NAME).toString(), name);
                // System.err.println(font.getAsName(PdfName.NAME) + " " + name);
            }
    }

Вы сможете расширить его, чтобы извлечь некоторую информацию о размере шрифта. Кроме того, если в Словаре нет информации, вы можете просмотреть необработанный постскриптум и получить из него информацию о шрифте.

...