我确定我错过了一些东西,但我根本没有看到它。
我正在使用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)文档的import语句警告我它从未使用过。
document1.open();
也会给出错误java.lang.NoClassDefFoundError:com.itextpdf.text.Document。
那么,我在bean的语法中遗漏了什么吗?我已经创建了Notes Java代理,XAgents和直接运行的Java Eclipse项目,但是我无法在8.5.3 Java Bean中使用这些方法。我将iText jar导入WebContent \ WEB-INF \ lib,然后将其添加(通过添加jar,而不是添加外部jar)到构建路径。我已经拿到了最新的罐子,而且我已经使用它们了,我已经构建并清理过了,bean在faces-config中。但是我做错了什么,我无法看到它。
如果有人能指出我正确的方向,我将非常感激。
干杯, 布赖恩
编辑: 许可证不是问题,但即使使用classLoader,我仍然无法加载类:
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
我把豆子切出来,清理,建造,粘贴回去,清理过来,仍然是错误。
我很感激你的帮助。 布赖恩
答案 0 :(得分:0)
您很可能拥有classloader isssue。除非您的应用程序仅供内部使用,否则您可能会重新考虑使用iText,因为它是GPL。 Apache PDFBox是Apache许可的替代品(我特别喜欢)或Apache FOP(我将完成2篇缺失的文章)(http://www.wissel.net/blog/htdocs/DominoXSLT),承诺)。当然,OpenNTF的POI4XPages可能就是您所需要的。
答案 1 :(得分:0)
我打电话给Lotus / ICS支持。似乎是8.5.3,如果你把jar放在~Lotus \ Notes \ _jvm \ lib \ ext中,它们会加载。我正在我的本地测试这个,但同样的路径应该在服务器上工作。我星期一测试一下。我研究过,如果提到的话,我没找到它。 Jars将成为9中的一个设计元素,将它们放在这个版本中不应该需要的目录中,但似乎以这种方式添加它们现在更加一致。对于我制作的一些应用程序,罐子已经正确加载了,所以这让我感到困惑。
Stephan和Panu,谢谢你的回复。布赖恩