我正在尝试从HTML内容创建PDF。为此,我使用 itextpdf-5.3.0.jar ,这是一个基于Java(使用Struts 2)的Web项目。我收到以下错误,我不知道如何解决它。请帮帮我。
<%@page import="com.sun.org.apache.bcel.internal.generic.ArrayType"%>
<%@page import="com.sun.xml.internal.ws.api.message.Message"%>
<%@page import="com.sun.xml.internal.fastinfoset.util.StringArray"%>
<%@
page import="javax.servlet.*,
javax.servlet.http.*,
java.io.*,
java.util.*,
com.itextpdf.awt.*,
com.itextpdf.text.*,com.itextpdf.text.pdf.*,com.itextpdf.text.html.simpleparser.HTMLWorker,
com.itextpdf.tool.xml.XMLWorkerHelper,
com.itextpdf.tool.xml.XMLWorker,
com.itextpdf.tool.xml.XMLWorkerHelper,
com.itextpdf.tool.xml.html.Tags,
com.itextpdf.tool.xml.parser.XMLParser
,com.itextpdf.tool.xml.pipeline.css.CSSResolver
,com.itextpdf.tool.xml.pipeline.css.CssResolverPipeline
,com.itextpdf.tool.xml.pipeline.end.PdfWriterPipeline
,com.itextpdf.tool.xml.pipeline.html.AbstractImageProvider
,com.itextpdf.tool.xml.pipeline.html.HtmlPipeline
,com.itextpdf.tool.xml.pipeline.html.HtmlPipelineContext
,com.itextpdf.tool.xml.pipeline.html.LinkProvider"
%>
<SCRIPT type="text/javascript">
alert("Welcome 2 allTest.jsp");
</script>
<%
response.setContentType("application/pdf");
Document document = new Document(PageSize.A4, 40, 40, 30, 30);
{
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
ByteArrayOutputStream ms=new ByteArrayOutputStream();
PdfWriter pdfWriter = PdfWriter.getInstance(document,response.getOutputStream());
document.open();
HTMLWorker htmlWorker = new HTMLWorker(document);
String pdfCon = request.getParameter("pdfCon");
String [] tokens = pdfCon.split("---");
for(int i=0; i < (tokens.length); i++) {
try{
htmlWorker.parse(new StringReader(tokens[i]));
}catch(Exception e)
{
System.out.println("Exception: "+e);
}
document.newPage();
}
document.close();
}
%>
我收到了这个错误:
ExceptionConverter: java.net.ConnectException: Connection refused: connect
ExceptionConverter: com.itextpdf.text.DocumentException: java.lang.ClassCastException: com.itextpdf.text.html.simpleparser.TableWrapper cannot
be cast to com.itextpdf.text.Meta
答案 0 :(得分:2)
in this answer描述了执行此操作的正确方法。
一旦你将所有代码移动到一个正确的Action中,返回一个Stream结果类型,你将消除response.getOutputStream
(你将使用ByteArrayOutputStream代替),这是为数不多的之一。你的代码和我的代码(有效)。
如果错误仍然存在,至少您将(不同于Scriptlets) 行号 来调试问题或在此处寻求有针对性的帮助。