首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用XHTMLrenderer向内存中的iText文档添加超文本标记语言(FlyingSaucer)

使用XHTMLrenderer向内存中的iText文档添加超文本标记语言(FlyingSaucer)
EN

Stack Overflow用户
提问于 2011-05-25 17:03:56
回答 2查看 1.8K关注 0票数 0

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

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

代码语言:javascript
复制
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吗?我相信这需要关闭单据吗?如果可能的话,我希望避免使用多个通道来添加这些描述。

EN

回答 2

Stack Overflow用户

发布于 2011-11-25 07:57:21

飞碟在除2.0.8以外的任何iText版本上都不能正常工作。另外,既然您提到了在内存中创建pdf,那么您使用的是JSF、JSP还是servlet?如果你是,那么你只需要在这些页面中的一个页面上发送你的ByteArrayOutputStream作为响应,使用类似于

代码语言:javascript
复制
response.setContentType("application/pdf");
response.setContentLength(os.size());
os.writeTo(response.getOutputStream());
response.flushBuffer();
票数 0
EN

Stack Overflow用户

发布于 2014-04-10 09:57:26

我知道你问我已经两年多了,但我也面临着同样的问题。我在谷歌上搜索了一下解决方案,显然到处都找不到。所以我不得不开发我自己的,我想我也可以分享它。希望它能对某些人有用。

我试着像你一样使用飞碟,但它对我不起作用。我的这段超文本标记语言只是一个简单的表格,所以我可以使用iText HTMLWorker来进行解析。

所以首先我会按照你的建议得到一个PdfStamper。

代码语言:javascript
复制
PdfReader template = new PdfReader(templateFileName);
PdfStamper editablePage = new PdfStamper(template, reportOutStream);

然后处理文档(填充域,插入一些图像),然后需要插入一个HTML代码片段。

代码语言:javascript
复制
//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可以做一些

代码语言:javascript
复制
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();
}

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6121953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档