将HTML转换为PDF - 实例化对象不可见

时间:2017-03-28 13:38:21

标签: java html maven pdf converter

我目前正在尝试使用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下获得许可的,并在我的项目底部添加了许可证,只是为了确保它没有造成任何麻烦,尽管我没有&# 39;期待再次获得成功。

此外,我已经尝试添加另一个库,我读到这个库是转换所必需的,但在我开头链接的文章中没有提及。该库是dom4j。

现在,当我过去DocumentInputSource春天告诉我:

  

DocumentInputSource类型不可见

这对我来说毫无意义,因为它只是一种常规方法"在我班级内部,你可以看到我已经将修饰符从私有更改为公开,以确保它是可见的。

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

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

1 个答案:

答案 0 :(得分:0)

在您提到的链接中,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中学习示例(在左侧菜单中您有一个“例子”部分)。

祝你好运! :)