gpt4 book ai didi

java - xhtmlrenderer 创建长度为 0 的 PDF

转载 作者:行者123 更新时间:2023-11-30 05:06:24 25 4
gpt4 key购买 nike

我是 org.xhtmlrenderer.pdf.ITextRenderer 的新手,遇到以下问题:

我的测试 servlet 流式传输到“下载”文件夹的 PDF 实际上是空文件。

相关方法streamAndDeleteTheClob如下所示。

第一个 try block 绝对不是问题。

服务器在第二个 try block 中花费了大量时间。没有抛出异常。

任何人都可以建议解决此问题的方法或调试它的好方法吗?

任何人都可以向我指出真正有效的本质上相似的代码吗?

任何帮助将不胜感激。

res.setContentType("application/pdf");

ServletOutputStream out = res.getOutputStream();

...

private boolean streamAndDeleteTheClob(int pageid,
Connection con,
ServletOutputStream out) throws IOException, ServletException {
Statement statement;

Clob htmlpage;

StringBuffer pdfbuf = new StringBuffer();

final String pageToSendQuery = "SELECT text FROM page WHERE pageid = " + pageid;

// create xhtml file as a CLOB (Oracle large character object) and stream it into StringBuffer pdfbuf

try { // definitely no problem in this block
statement = con.createStatement();
resultSet = statement.executeQuery(pageToSendQuery);
if (resultSet.next()) {
htmlpage = resultSet.getClob(1);
} else {
return true;
}
final Reader in = htmlpage.getCharacterStream();
final char[] buffer = new char[4096];
while ((in.read(buffer)) != -1) {
pdfbuf.append(buffer);
}
} catch (Exception ex) {
out.println("buffering CLOB failed: " + ex);
}

// create pdf from StringBuffer

try {
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(new InputSource(new StringReader(pdfbuf.toString())));
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(doc, null);
renderer.layout();
renderer.createPDF(out);
out.close();
} catch (Exception ex) {
out.println("streaming of pdf failed: " + ex);

}

deleteClob(con, pageid);

return false;
}

最佳答案

以这种方式使用 DocumentBuilder.parse 将尝试解析 XHTML 页面中引用的 DTD。这需要很长时间。如果您使用 Flying Saucer (xhtmlrenderer),避免这种情况的最简单方法是以这种方式创建文档:

Document myDocument = XMLResource.load(myInputStream).getDocument();

请注意,您也可以将 XMLResource.load 与 Reader 一起使用。

关于java - xhtmlrenderer 创建长度为 0 的 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4969638/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com