1

我正在尝试从 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
4

1 回答 1

2

此答案中描述了执行此操作的正确方法。

一旦您将所有代码移动到返回 Stream 结果类型的正确操作中,您将消除response.getOutputStream(您将使用 ByteArrayOutputStream 代替),这是您的代码和我的代码之间为数不多的不同之处之一(有效) .

如果错误仍然存​​在,至少您将拥有(与 Scriptlets 不同)行号来调试问题或在此处寻求有针对性的帮助。

于 2013-11-12T10:04:02.497 回答