我花了更多的研究比我自己想要的更多,所以我将在这里发布一个全面的答案.似乎这样做的信息分散在许多不同的网站上,我想把它放在一个地方. 这个答案 可能是一回事,但我的眼睛茫然,因为它在Java字符串中,而不是在html模板中.这是问题:
我正在渲染PDF,我想在页面底部写一个页脚,上面写着"Page n of m",其中"n"是您所在的页码,"m"是文档中的总页数.我怎么做?
现在我使用xhtmlrenderer将html转换为PDF.我的maven依赖如下:
<dependency>
<groupId>org.mvel</groupId>
<artifactId>mvel2</artifactId>
<version>2.1.0.drools2</version>
<scope>compile</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.xhtmlrenderer</groupId>
<artifactId>core-renderer</artifactId>
<version>R8</version>
<scope>compile</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.0.8</version>
<scope>compile</scope>
<optional>true</optional>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我试图在每个PDF页面重复表头.所以我使用css:.
-fs-table-paginate: paginate解释CSS就在这里.
table {
-fs-table-paginate: paginate;
}`
Run Code Online (Sandbox Code Playgroud)
当与值(-fs-table-paginate)paginate一起使用时,修改表格布局算法以在后续页面上重复表格页眉和页脚,并改善跨页面的单元格的外观(例如通过关闭和重新打开边框),但就是这样.如果桌子的最小宽度比页面宽,它将被切断.
当添加上面的CSS时,我的表的边框是分离的.


所以我觉得table { -fs-table-paginate: paginate; }我的桌子border-collapse:collapse无效了.
那么我该怎么做才能解决这个问题,让桌子边框崩溃?
我的应用程序CSS表格如下
-fs-table-paginate
Run Code Online (Sandbox Code Playgroud)
并且当-fs-table-paginate: paginate; 有时添加表头时不正常.标题将无法正确显示.并且下面的表头会增加一个额外的空行.如下:

有人知道这些想法吗?
我正在使用flyingsaucer通过servlet将xhtml文档呈现为pdf,该servlet返回生成的pdf文档.xhtml文档具有从另一个servlet请求的图像.图像servlet在返回适当的图像之前检查谁登录.下面的代码显示了如何请求图像:
<img height="140" width="140" src="http://localhost:8080/myapp/servlet/DisplayPic" />
Run Code Online (Sandbox Code Playgroud)
我的问题是图像的http请求来自pdf渲染器而不是登录用户,因此图像servlet不知道谁登录,因此不返回所需的图像.
我目前正在使用下面的代码来呈现xhtml文档:
ITextRenderer renderer = new ITextRenderer();
renderer.setDocumentFromString(xhtmlDocumentAsString);
renderer.layout();
os = response.getOutputStream();
renderer.createPDF(os);
Run Code Online (Sandbox Code Playgroud)
我需要在请求图像servlet时维护用户的会话,或者为渲染器提供用于该特定xhtml元素的图像.我认为后者可以使用a完成,ReplacedElementFactory但我无法挖掘出任何可以帮助我的示例代码.
我正在尝试为我的客户实现自动报告生成工具.我需要以pdf格式创建报告,我非常适合使用Jquery flot创建图形.我只需要一种方法来获取pdf中的图形.
我尝试使用飞碟(xhtmlrenderer)捕获图形的图像,但它似乎没有帮助我,因为图形是由JavaScript创建的.
xhtmlrenderer可以捕获用javascript创建的元素吗?
或者是他们可以捕获图形图像的任何其他工具?
我正在使用飞碟xhtmlrenderer来构建pdf文档.到目前为止一切正常 - 现在我们应该在pdf中生成阿拉伯语文本.Xhtmlrenderer以相反的顺序呈现阿拉伯语文本.
我在网上(可能在他们自己的网站上)读过xhtmlrenderer不支持bidi/rtl的地方.但IText本身包含通过ColumnText和PdfPTable处理阿拉伯语和希伯来语的示例(可在此处找到源代码:http://sourceforge.net/projects/itextpdf/files/Examples/examples-155/examples-155.zip/download - arabic_hebrew.java),那些工作正常.
我试图在xhtmlrenderer的ReplacedElementFactory/ITextReplacedElement中使用itext api,但找不到定位元素的好例子.有没有人试过这样做?或者可能有一个更简单(或至少工作)的解决方案?
我有一个xhtml文档,我正在使用flyingsaucer变成PDF.xhtml有几个标签,内嵌base64编码图像.xhtml的来源是动态的,因此图像标签所在的结构可能会有所不同.这是标签的样子:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAagAAAEuCAYAAADbW4YFAAAgAElEQVR4Aex9CYBdRZ ...
Run Code Online (Sandbox Code Playgroud)
当我在浏览器中查看html时,图像显示正确,但是,img元素不会在最终的PDF中呈现.以下是我如何渲染它来创建PDF.
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(builder.parse(source), "");
renderer.layout();
renderer.createPDF(response.getOutputStream(),true);
Run Code Online (Sandbox Code Playgroud)
任何人都可以让我知道我应该采取什么方法来实现这一目标?我看到了这个帖子,但是,我正在使用内联图像,所以我看不出如何使用Edd的解决方案来实现这一点.
提前致谢
java pdf-generation embedded-resource flying-saucer xhtmlrenderer
我正在尝试将资源打包到一个 jar 中,但是我无法让 Flying Saucer 在类路径上找到 css -我无法轻松构建 URL 以无缝解决这个问题。
飞碟有没有办法在类路径上指定资源包来解析项目和图像?
注意:我在一个没有文件系统写入权限的 webstart 应用程序中运行它,所以 jar 扩展不是一个真正的选择。
我有包含以下链接的 HTML:
<p class="Results">Web :
SPLIT<a href="http://www.google.fr/">http://www</a>
SPLIT<a href="http://www.google.fr/">.google</a>
SPLIT<a href="http://www.google.fr/">.fr/</a>
</p>
Run Code Online (Sandbox Code Playgroud)
我们正在使用 .html 将 HTML 转换为 PDF flying-saucer。
我打开了以下结果的 PDF,但链接不可点击。似乎href没有添加 s。
如果我删除这个SPLIT词,链接是可点击的,但只是因为link detector如果它们是有效的 URL ,内置阅读器使它们可点击。
任何想法为什么我的链接在最终的 PDF 中被删除?
代码:
ITextRenderer itextRender = null;
Tidy tidy = new Tidy();
tidy.setXmlOut(true);
tidy.setShowWarnings(false);
// tidy.setXmlTags(false);
tidy.setInputEncoding(UTF_8_DN);
tidy.setOutputEncoding(UTF_8_DN);
tidy.setXHTML(true);//
tidy.setMakeClean(true);
dataStream = new ByteArrayInputStream(data);
stream = new ByteArrayOutputStream(32 * 1024);
Post process - Convert Html into Xhtml valid format
org.w3c.dom.Document w3cDoc = tidy.parseDOM(dataStream, stream);
itextRender = …Run Code Online (Sandbox Code Playgroud) 我已经使用飞碟一段时间了,结果非常棒.
我可以像这样通过uri设置文档
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(xhtmlUri);
Run Code Online (Sandbox Code Playgroud)
这很好,因为它将解析相对于给定URI的所有相对css资源等.但是,我现在正在生成xhtml,并希望将其直接呈现为PDF(不保存文件).ITextRenderer中的相应方法似乎是:
private Document loadDocument(final String uri) {
return _sharedContext.getUac().getXMLResource(uri).getDocument();
}
public void setDocument(String uri) {
setDocument(loadDocument(uri), uri);
}
public void setDocument(Document doc, String url) {
setDocument(doc, url, new XhtmlNamespaceHandler());
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我现有的代码只给出了uri,ITextRenderer并Document为我创建了这个代码.
Document从格式化的xhtml字符串创建最短的方法是什么?我更喜欢使用现有的Flying Saucer库,而不必导入另一个XML解析jar(只是为了一致的错误和功能).
我正在使用Flying Saucer从xhtml创建一个pdf,托管在tomcat服务器上.pdf中包含的大多数图像都是公开可用的(徽标等),但其中一些图像在登录后受到保护(即,如果用户已登录,则通过servlet流式传输).
当我在浏览器中粘贴网址时,图像当然显示正常,因为浏览器会发送带有请求的会话.但是当Flying Saucer渲染pdf时,它不包括受保护的图像,因为它对会话一无所知.
所以,我的问题是; 是否有任何方法可以包含Flying Saucer的字节流来解决,就像可以添加可解析的字体一样?我试图像这样,但有没有简单的方法来设置UAC的ITextRenderer,并抱怨每次我试过一次.