我正在使用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吗?我认为这需要关闭文件?如果可能的话,我想避免使用多个传递来添加这些描述。
答案 0 :(得分:0)
对于2.0.8以外的任何版本的iText,飞碟无法正常工作。另外,既然你的意思是在内存中创建pdf,你使用的是JSF,JSP还是servlets?如果您愿意,可以使用以下内容将ByteArrayOutputStream
作为回复发送到其中一个页面
response.setContentType("application/pdf");
response.setContentLength(os.size());
os.writeTo(response.getOutputStream());
response.flushBuffer();
答案 1 :(得分: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();
}
这些只是如何做到的一些基本想法,希望它有所帮助。