0

我正在使用 iText 2.1.7 从数据库生成文档。我需要添加的字段之一是 XHTML 格式。我可以使用 HTMLWorker 类来生成 HTML,但这有点受限。

我使用以下代码将其转换为 XHTML:

String url = chapterDesc.getString("description").toString(); // get the HTML string from the database
org.w3c.dom.Document doc = XMLResource.load(new ByteArrayInputStream(url.getBytes())).getDocument();

ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(doc, null);
ByteArrayOutputStream os = new ByteArrayOutputStream();
renderer.layout();
renderer.createPDF(os);

我想将此信息添加到内存中的文档中。这可能吗?

我需要使用 PdfStamper 吗?我相信这需要关闭文件?如果可能的话,我想避免使用多次传递来添加这些描述。

4

2 回答 2

0

飞碟不能与 2.0.8 以外的任何版本的 iText 一起正常工作。此外,由于您的意思是在内存中创建 pdf,您使用的是 JSF、JSP 还是 servlet?如果您不是,您可以ByteArrayOutputStream使用类似以下内容的内容在其中一个页面上发送您的回复

response.setContentType("application/pdf");
response.setContentLength(os.size());
os.writeTo(response.getOutputStream());
response.flushBuffer();
于 2011-11-24T23:57:21.123 回答
0

我知道你问已经两年多了,但我也面临同样的问题。我用谷歌搜索了一个解决方案,显然没有任何地方可以找到。所以我必须开发自己的,我想我不妨分享一下。希望它对某人有用。

我试着像你一样使用飞碟,但它对我不起作用。我的 HTML 只是一个简单的表格,因此我可以使用 iText HTMLWorker 进行解析。

所以首先我得到了你建议的 PdfStamper。

PdfReader template = new PdfReader(templateFileName);
PdfStamper editablePage = new PdfStamper(template, reportOutStream);

然后我处理文档(填写字段,插入一些图像),然后我需要插入一个 HTML 片段。

//getting a 'canvas' to add parsed elements
final ColumnText page = new ColumnText(editablePage.getOverContent(pageNumber)); 
//finding out the page sizefinal 
Rectangle pagesize = editablePage.getReader().getPageSize(pageNumber);     
//you can define any size here, that will be where your parsed elements will be added
page.setSimpleColumn(0, 0, pagesize.getWidth(), pagesize.getHeight()); 

如果您需要简单的样式,HTMLWorker 可以做一些

StyleSheet styles = new StyleSheet();
styles.loadStyle("h1", "color", "#008080");

//parsing
List<Element> parsedTags = HTMLWorker.parseToList(new StringReader(htmlSnippet), styles); 
for (Element tag : parsedTags)
{       
  page.addElement(tag);
  page.go();
}

这些只是如何做到这一点的一些基本想法,希望对您有所帮助。

于 2014-04-10T01:57:26.097 回答