如何使用itext从pdf创建XMl或标记文件?

时间:2011-08-17 21:35:13

标签: pdf fonts itext font-size

我想在pdf下面为此创建一个Text文件

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

输出应类似于::

< BASEFONT: 'WaltDisneyScriptv4.1';类型:“无”;大小:'60'> iText在行动<结束>

我可以谷歌找到如何提取/查找pdf中使用的字体,但不是它们的大小或类型(即粗体/斜体......),并将字体与正在使用的每个文本相关联。

如果使用不同的字体,o / p应该像

例如:< BaseFont:'Courier';类型:“无”;大小:'45'> iText<结束>< BaseFont:'WaltDisneyScriptv4.1';类型:“无”;尺寸:'60'>在行动<结束>

感谢任何帮助。提前谢谢!

1 个答案:

答案 0 :(得分:0)

以下是我用来在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);
            }
    }

您应该能够扩展它以提取一些字体大小信息。此外,如果词典中没有信息,那么您可以查看原始postscript并从中获取字体信息。