【问题标题】:Convert HTML to PDF - Instantiated Object not visible将 HTML 转换为 PDF - 实例化对象不可见
【发布时间】:2017-08-21 14:54:28
【问题描述】:

我目前正在尝试用 Java 开发一个转换器,它将 HTML 文件转换为 PDF 文件并找到 this site。在第一页和第二页的底部有代码示例,说明如何使用第 1 页命名的库(JTidy、Xalan、FOP)来实现这样的程序。

我在 Spring Tool Suite 中创建了一个新的 Maven 项目,并将库依赖项添加到我的 pom.xml 中。我已经将代码部分复制到这个新创建的测试程序中,看看它是否有效。一切都很好,直到最后一个代码部分。

public static byte[] fo2PDF(Document foDocument) {
    DocumentInputSource fopInputSource = new DocumentInputSource(
                                                     foDocument);
    try {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        Logger log = new ConsoleLogger(ConsoleLogger.LEVEL_WARN);
        Driver driver = new Driver(fopInputSource, out);
        driver.setLogger(log);
        driver.setRenderer(Driver.RENDER_PDF);
        driver.run();
        return out.toByteArray();
    } catch (Exception ex) {
        return null;
    }
}

最初,当光标在 DocumentInputSource 上移动时,Spring 会显示此消息

DocumentInputSource 无法解析为类型

并且没有像 Maven 通常提供的那样添加特定库的选项。

我尝试了不同的方法,例如将代码放在类的不同范围内,为它创建一个自己的类,我尝试使用另一个 IDE,但我怀疑这些错误是否能解决事情,好吧,这显然没有帮助。

我读到 FOP 库是在 Apache 许可证版本 2.0 下获得许可的,并在我的项目底部添加了该许可证,只是为了确保它不会造成任何麻烦,尽管我没想到会再次成功。

此外,我尝试添加另一个库,我读到它对于转换是必要的,但在我开始链接的文章中没有提及。库是 dom4j。

现在,当我查看 DocumentInputSource 时,Spring 告诉我:

DocumentInputSource 类型不可见

这对我来说毫无意义,因为它只是我班级中的一个“普通方法”,正如你所见,我已经将修饰符从私有更改为公共,以确保它是可见的。

我觉得我忽略了一些非常简单/基本的东西,如果能提供任何帮助,我将不胜感激。感谢您抽出宝贵时间阅读本文。

PS:这是我在 Stack Overflow 上的第一篇文章,我对编程有点陌生。如果有任何缺失的信息;请告诉我。

【问题讨论】:

    标签: java html maven pdf converter


    【解决方案1】:

    在您提到的链接中,DocumentInputSource 类来自包org.apache.fop.tools

    在包org.dom4j.io 中有另一个同名的类,它是包私有的。如果你导入了这个,编译器会警告你这个类是不可见的(当然除非你的类在同一个包中)。

    确保在源文件的开头附近有以下行:

    import org.apache.fop.tools.DocumentInputSource;

    不是这个:

    import org.dom4j.io.DocumentInputSource;

    然后,如果它说它找不到类 org.apache.fop.tools.DocumentInputSource(或其包),那么您的 pom 中缺少 fop 依赖项:

    <dependency>
       <groupId>fop</groupId>
       <artifactId>fop</artifactId>
       <version>0.20.5</version>
    </dependency>
    

    您找到的页面及其引用的 fop 版本 (0.20.5) 相当旧(2006 年 5 月,请参阅 here),并且您要查找的类在最近的版本中不再存在图书馆。您是否在 Maven 依赖项中使用了最新版本?这将解释您的第一个问题(“无法解析为类型”)。

    我建议您升级到最新的稳定版本(2.1 日期为 2016 年 1 月,请参阅 here)并研究他们的官方文档 here 中的示例(在左侧菜单中,您有一个“示例”部分)。

    祝你好运! :)

    【讨论】:

    • 非常感谢您的回复。问题确实是我使用了错误的版本(2.1)而不是 0.20.5 版本,并且我没有检查提到的方法/类是否仍在库中。现在使用 0.20.5 版它可以工作了!虽然我会查看(2.1)版本并尝试调整代码以适应它,但再次:非常感谢! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 2020-08-21
    • 2023-04-09
    • 2021-05-19
    • 1970-01-01
    相关资源
    最近更新 更多