如何解决使用XHTMLrendererFlyingSaucer将HTML添加到内存中的iText文档
| 我正在使用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吗?我相信这需要关闭文件?如果可能的话,我想避免使用多次传递来添加这些描述。
解决方法
飞碟不能与2.0.8以外的任何iText版本一起正常使用。另外,由于您打算在内存中创建pdf,因此您使用的是JSF,JSP还是servlet?如果您是,则可以使用以下方式将something1 send作为回应发送到这些页面之一
response.setContentType(\"application/pdf\");
response.setContentLength(os.size());
os.writeTo(response.getOutputStream());
response.flushBuffer();
,我知道距您提出要求已经有两年多了,但我面临着同样的问题。我用谷歌搜索了一个解决方案,显然没有任何地方可以找到。因此,我必须自己开发,我想我也应该分享一下。希望它对某人有用。
我尝试过像您一样使用飞碟,但对我而言不起作用。我的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,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();
}
这些只是关于如何执行此操作的一些基本想法,希望对您有所帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。