我试图通过以下servlet生成一个动态PDF文件。
import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
// Document Object
import com.itextpdf.text.Document;
//For adding content into PDF document
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.DocumentException;
public class CreatePDFExample extends HttpServlet {
//invoked from doGet method to create PDF through servlet
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//Set content type to application / pdf
//browser will open the document only if this is set
response.setContentType("application/pdf");
//Get the output stream for writing PDF object
OutputStream out=response.getOutputStream();
try {
Document document = new Document();
/* Basic PDF Creation inside servlet */
PdfWriter.getInstance(document, out);
document.open();
document.add(new Paragraph("Tutorial to Generate PDF using Servlet"));
document.add(new Paragraph("PDF Created Using Servlet, iText Example Works"));
document.close();
}
catch (DocumentException exc){
throw new IOException(exc.getMessage());
}
finally {
out.close();
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
public String getServletInfo() {
return "This Servlet Generates PDF Using iText Library";
}
}
,但我收到以下错误:
Error 500--Internal Server Error
java.lang.NoClassDefFoundError: com/itextpdf/text/DocumentException
at CreatePDFExample.processRequest(CreatePDFExample.java:24)
at CreatePDFExample.doPost(CreatePDFExample.java:47)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1053)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:387)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:305)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6310)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3622)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2569)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
我使用的是weblogic应用服务器8.1....我使用的是iTextPDF。所以我已经为jar文件设置了CLASSPATH。
CLASSPATH:
D:itextpdf-5.3.4.jar;D:servlet-2-3.jar;.;
PATH:
C:Program Files (x86)Javajdk1.6.0_14bin;.;
请告诉我为什么我得到这个错误????我为此花了很多时间。没有解决小问题。请帮帮我。
谢谢
在做了建议的事情之后。我得到以下错误
Error 500--Internal Server Error
java.lang.ExceptionInInitializerError
at com.itextpdf.text.pdf.PdfWriter.(PdfWriter.java:1403)
at CreatePDFExample.processRequest(CreatePDFExample.java:26)
at CreatePDFExample.doPost(CreatePDFExample.java:47)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1053)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:387)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:305)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6310)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3622)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2569)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
Caused by: java.lang.NullPointerException
at java.lang.Class.privateGetDeclaredFields(Class.java:1488)
at java.lang.Class.getDeclaredFields(Class.java:1073)
前面的答案告诉您缺少一个jar,这是一个不错的猜测,因为错误消息清楚地表明无法找到一个iText类。
不幸的是,这个错误消息具有误导性。Java还说,如果有任何歧义,它就找不到类。如果在CLASSPATH中有多个text jar,就会出现这种情况。
通过在CLASSPATH中添加另一个iText jar使问题变得更糟。现在您遇到了一个问题,这是由于在您的weblogic实例中有两个不同版本的iText可用于JVM而导致的。
搜索所有的CLASSPATH,不要忘记服务器的CLASSPATH,您会发现D:itextpdf-5.3.4.jar并不是weblogic查找PdfWriter类的唯一地方。从CLASSPATH中删除所有的text jar,直到只剩下一个。
您需要输入您的web应用程序的类路径,而不是您的系统类路径。
将jar文件放在类路径上,以便服务器可以在运行时获取它的最简单方法是:
把itextpdf-5.3.4.jar
放到
YOUR_WEBAPP_ROOT --> WEB-INF --> lib
文件夹
那么现在你的jar文件应该出现在这里
YOUR_WEBAPP_ROOT --> WEB-INF --> lib --> itextpdf-5.3.4.jar
将您的库添加到您的war中,在WEB-INF/lib文件夹中
在我的情况下,iText v.2.1.7工作,我尝试了5.5.3和5.5.4没有运气。
摘自Primefaces V.5.0用户指南,p.12"Dependencies"
"列出的版本(itext 2.1.7, apache poi 3.7)经过测试,已知可以与PrimeFaces一起工作,这些依赖的其他版本也可能工作,但未经过测试。"
在我的例子中,我在我的pom.xml
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency>
我有一个类似的问题。在一个系统上,它的pdf生成工作良好,另一个系统我得到这个异常。在做了一些调查之后,我发现工作的服务器有1105KB大小的ittext -2.1.7.js6.jar,而不能工作的服务器有12Kb大小。我用一个小尺寸的罐子代替了罐子,它开始工作得很好。不知道我是怎么得到两个不同尺寸的相同版本的罐子的。希望对大家有所帮助
我有一个简单的方法来解决你的错误你必须从现有的jar文件中创建一个新的插件你在运行配置器中集成了这个最后使用这个插件像库我检查了这个解决方案,它没有问题