1

我确定我错过了一些东西,但我根本没有看到它。

我正在使用 iText 创建 PDF,我想在 bean 中执行此操作。我已经创建了一个,但它一直在出错。我通常在 Java 中使用的一些方法似乎在这个 bean 中不起作用。

例如,这一行:

com.itextpdf.text.Document document1 = new com.itextpdf.text.Document();

将抛出错误 java.lang.NoClassDefFoundError: com.itextpdf.text.Document,即使在构建路径中导入了 jar,并且在 bean 中导入了 com.itextpdf.text.Document。

如果你把它改成这样:

com.itextpdf.text.Document document1;

或者

com.itextpdf.text.Document document1 = null;

错误消失了。我不明白为什么一种方法有效而另一种方法无效,但这是一个相当容易做出的改变。

现在我需要设置页面大小。这将在 Eclipse 中工作:

 document1.setPageSize(PageSize.LETTER);

但这是我得到的错误:

java.lang.NoClassDefFoundError: com.itextpdf.text.PageSize

这可能是因为我已将其设置为 null 以对其进行初始化。但

document1 = new Document();

document1 = new com.itextpdf.text.Document();

都抛出 java.lang.NoClassDefFoundError: com.itextpdf.text.Document

奇怪的是,(iText)文档的导入语句警告我它从未使用过。

document1.open();

也会给出错误 java.lang.NoClassDefFoundError: com.itextpdf.text.Document 。

那么,我是否在 bean 的语法中遗漏了一些东西?我已经创建了可以工作的 Notes Java 代理、XAgent 和直接 Java Eclipse 项目,但是我无法让这些方法在 8.5.3 Java Bean 中工作。我将 iText jar 导入到 WebContent\WEB-INF\lib 中,然后将这些(通过添加 jar,而不是添加外部 jar)添加到构建路径中。我已经得到了最新的 jars 并且我正在使用它们,我已经构建和清理过,bean 在 faces-config 中。但是我做错了什么,我看不到。

如果有人能指出我正确的方向,我将不胜感激。

干杯,布赖恩

编辑:许可证不是问题,但即使使用类加载器我仍然无法加载类:

    Thread currentThread = Thread.currentThread();
ClassLoader clCurrent = currentThread.getContextClassLoader();
        //ClassLoader clCurrent=com.ibm.domino.xsp.module.nsf.NotesContext.getCurrent().getModule().getModuleClassLoader();
        try {
            currentThread.setContextClassLoader(Activator.class.getClassLoader());
            DebugToolbar.get().info("after setting up FileOutputStream");
            com.itextpdf.text.Document document1 = new com.itextpdf.text.Document();
            //com.itextpdf.text.Document document1;
            //com.itextpdf.text.Document document1 = null;
            //document1 = new com.itextpdf.text.Document();
            //document1.open();
            document1.setPageSize(PageSize.LETTER);

我仍然得到 java.lang.NoClassDefFoundError: com.itextpdf.text.Document

我已经把豆子切掉了,清理了,建造了,贴回去了,清理了建造,仍然是错误。

我感谢您的帮助。布赖恩

4

2 回答 2

0

很可能你有一个类加载器问题。除非您的应用程序严格供内部使用,否则您可能会重新考虑使用 iText,因为它是 GPL。Apache PDFBox是 Apache 许可的替代品(我特别喜欢)或 Apache FOP(我将完成 2 篇缺失的文章)(http://www.wissel.net/blog/htdocs/DominoXSLT),承诺)。当然,OpenNTF 的POI4XPages可能正是您所需要的。

于 2013-03-01T01:09:06.650 回答
0

我打电话给 Lotus/ICS 支持。似乎对于 8.5.3,如果您将 jar 放在 ~Lotus\Notes\jvm\lib\ext 中,它们将加载。我在我的本地测试这个,但相同的路径应该在服务器上工作。我会在那个星期一测试。我研究过,如果提到,我没有找到。Jars 将是 9 中的一个设计元素,将它们放在这样的目录中对于那个版本应该是不需要的,但现在以这种方式添加它们似乎更加一致。这些罐子已经为我制作的一些应用程序正确加载,所以这让我有点困惑。

Stephan 和 Panu,感谢您的回复。

布赖恩

于 2013-03-02T13:56:49.300 回答