【问题标题】:How to create an XMl or a markup file from pdf using itext?如何使用 itext 从 pdf 创建 XMl 或标记文件?
【发布时间】:2011-10-29 07:30:44
【问题描述】:

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

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

输出应该类似于::

iText in Action

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

如果使用不同的字体,o/p 应该是这样的

例如:iText 在行动中

感谢您提供任何帮助。提前致谢!

【问题讨论】:

    标签: pdf fonts itext font-size


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!!!我以前也可以使用类似的功能提取字体名称信息...但无法提取字体大小...我是 iText 的新手...我不明白你在谈论的后记内容,请详细说明..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 2014-12-26
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 2013-09-11
    • 2013-08-06
    相关资源
    最近更新 更多