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

Convert HTML to PDF - Instantiated Object not visible

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

我在 Spring 工具套件中创建了一个新的 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;
    }
}

最初 Spring 将光标移动到 DocumentInputSource

上时显示此消息

DocumentInputSource cannot be resolved to a type

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

我尝试了不同的方法,例如将代码放在 class 内的不同范围内,为其创建一个自己的 class,我尝试使用另一个 IDE , 虽然我怀疑故障会被这些东西中的任何一个解决,但显然没有帮助。

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

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

现在,当我查看 DocumentInputSource Spring 时,我看到:

The type DocumentInputSource is not visible

这对我来说毫无意义,因为它只是我 class 中的一个“普通方法”,正如您所看到的,我已经将修饰符从 private 更改为 public 以便确保它可见。

我觉得我忽略了一些非常 easy/basic 的东西,如果有任何帮助,我将不胜感激。感谢您花时间阅读本文。

PS:这是我在 Stack Overflow 上的第一个 post,我对编程有点陌生。如果有任何遗漏的信息;请告诉我。

在您提到的 link 中,DocumentInputSource class 来自软件包 org.apache.fop.tools

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

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

import org.apache.fop.tools.DocumentInputSource;

而不是这个:

import org.dom4j.io.DocumentInputSource;

然后,如果它说找不到 class 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),您要查找的 class 是在库的最新版本中不再存在。您是否在 Maven 依赖项中使用了最新版本?这将解释您的第一个问题 ("cannot be resolved to a type")。

我建议您升级到最新的稳定版本(2.1 是 2016 年 1 月,请参阅 here) and study the examples from their official documentation here(在左侧菜单中有一个 "examples" 部分)。

祝你好运! :)