我目前正在尝试使用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
无法将DocumentInputSource解析为类型
并且没有选项可以像Maven正常提供的那样添加特定的库。
我尝试了不同的东西,例如将代码放在类的不同范围内,为它创建一个自己的类,我尝试使用另一个IDE,尽管我怀疑这个错误是否能解决这些事情很好,它显然没有帮助。
我已经读过FOP库是在Apache许可证版本2.0下获得许可的,并在我的项目底部添加了许可证,只是为了确保它没有造成任何麻烦,尽管我没有&# 39;期待再次获得成功。
此外,我已经尝试添加另一个库,我读到这个库是转换所必需的,但在我开头链接的文章中没有提及。该库是dom4j。
现在,当我过去DocumentInputSource
春天告诉我:
DocumentInputSource类型不可见
这对我来说毫无意义,因为它只是一种常规方法"在我班级内部,你可以看到我已经将修饰符从私有更改为公开,以确保它是可见的。
我觉得我忽略了一些非常简单/基本的东西,我非常感激任何帮助。感谢您抽出宝贵时间阅读本文。
PS:这是我在Stack Overflow上的第一篇文章,我对编程有点新意。如果有任何遗漏的信息;请告诉我。
答案 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中学习示例(在左侧菜单中您有一个“例子”部分)。
祝你好运! :)