我正在使用Flying Saucer(将CSS/HTML转储到iText到PDF)创建PDF,我正在尝试使用CSS3将图像页眉和页脚应用到每个页面.
我基本上想把这个div放在每个页面的左上角:
<div id="pageHeader">
<img src="..." width="250" height="25"/>
</div>
Run Code Online (Sandbox Code Playgroud)
我的CSS看起来有点像这样:
@page {
size: 8.5in 11in;
margin: 0.5in;
@top-left {
content: "Hello";
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让我把这个div放进去content
?
我意识到之前已经问过这个问题(我查看了所有解决方案并尝试了所有这些)但我仍然在尝试生成一个带有页眉和页脚的pdf文档,并在每个页面上重复.
我正在使用flying saucer
R8,iText2.0.8
我已经尝试了许多不同的方法来使其工作,但到目前为止无济于事.我测试的一些方法是https://gist.github.com/626264,使用运行元素和边距框 http://pigeonholdings.com/projects/flyingsaucer/R8/doc/guide/users-guide-R8.html# xil_40(css3功能),飞碟r7指南,不适用于r8 http://today.java.net/pub/a/today/2007/06/26/generating-pdfs-with-flying-saucer -and-itext.html #page-specific-features,很多其他方法对我不起作用.
我的标题div
包含2个带图像的div,我的页脚仅用于页面编号.html被放入一个StringBuffer
被调用的buf中.
buf.append("<head>");
buf.append("<title>blabla</title> ");
buf.append("<style type='text/css' media='print'> ");
buf.append("@page { size:8.5in 11in; padding:1em; @bottom-left { content: element(footer); } } ");
buf.append("#footer { font-size: 90%; font-style: italic; position: running(footer); top: 0; left: 0; }");
buf.append("#pagenumber:before { content: counter(page); } ");
buf.append("#pagecount:before { content: counter(pages); } ");
buf.append("</style></head>");
buf.append("<body>");
buf.append("<div class='header' style='clear:both;'>");
buf.append("<div id='moneyLogo' style='float:left'>");
buf.append("<img src='logo.jpg' alt='Some alt text' />");
buf.append("</div>"); …
Run Code Online (Sandbox Code Playgroud) 我花了更多的研究比我自己想要的更多,所以我将在这里发布一个全面的答案.似乎这样做的信息分散在许多不同的网站上,我想把它放在一个地方. 这个答案 可能是一回事,但我的眼睛茫然,因为它在Java字符串中,而不是在html模板中.这是问题:
我正在渲染PDF,我想在页面底部写一个页脚,上面写着"Page n of m",其中"n"是您所在的页码,"m"是文档中的总页数.我怎么做?
我有一个Spring应用程序,需要构建对PDF生成的支持.我正在考虑将飞碟与Thymeleaf一起使用来渲染PDF.但是,我找不到有关将飞碟与Thymeleaf一起使用的更多信息.有没有其他人一起使用这些技术?
现在我使用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;
有时添加表头时不正常.标题将无法正确显示.并且下面的表头会增加一个额外的空行.如下:
有人知道这些想法吗?
我将波兰字体嵌入到从HTML转换的PDF中时遇到问题.
我的HTML代码在正文中有样式:
<BODY style="font-family: Tahoma, Arial, sans-serif;font-size : 8pt;">
Run Code Online (Sandbox Code Playgroud)
我尝试了两种将这种HTML转换为PDF的方法:
对于FOP,我可以将所有使用过的字体添加到其配置文件中,然后创建PDF,嵌入这些字体(如果字体用于HTML).在生成的PDF中,我在Identity-H编码中使用了Tahoma字体.它看起来不错 - 所有波兰语字母都按预期显示.
然后我尝试用iText进行这样的转换:看起来比较简单,因为我不需要为每个HTML创建转换.不幸的是,我不知道如何将使用过的字体嵌入到生成的PDF中.我发现的大多数示例都是从头开始创建PDF,我不知道如何将这些方法应用于Flying Saucer ITextRenderer或转换中使用的其他对象.
我当前的代码尝试PDFCreationListener.preOpen()
通过获取ITextFontResolver
和添加字体来添加字体fs.addFont(path, true);
.但我创建的所有.pdf都没有我想要的字体.
第二个问题是结果PDF没有波兰语字母.飞碟或iText有问题吗?Acrobat显示创建的PDF文档使用带Ansi编码的Helvetica和ArialMT作为字体.我认为这个Ansi编码不好.如何设置波兰语编码(Identity-H)?
我正在使用Flying Saucer将XHTML转换为PDF文档.我已经得到了仅使用基本HTML和内联CSS的代码,但是,现在我正在尝试将图像作为一种标题添加到PDF中.我想知道的是,如果有任何方式通过读取图像文件作为Java Image对象添加图像,然后以某种方式添加到PDF(或XHTML - 就像它获取虚拟"url"表示我可以用来渲染PDF的Image对象.有没有人做过这样的事情?
提前感谢您提供的任何帮助!
我的Web应用程序允许用户在CKEditor中编写富文本,然后使用Flying Saucer库将结果导出为PDF.
由于他们需要编写希腊字符,我选择通过执行以下操作将Arial Unicode MS添加到可用字体:
config.font_names = "*several fonts...*; Arial Unicode MS/Arial Unicode MS, serif";
Run Code Online (Sandbox Code Playgroud)
此字体现在在CKEditor菜单中正确显示,但是当我将此字体应用于任何元素时,我得到以下结果:
<span style="font-family:arial unicode ms,serif;"> some text </span>
Run Code Online (Sandbox Code Playgroud)
你可以注意到,我丢失了UpperCase字符.这在PDF导出期间效果非常糟糕,因为Flying Saucer无法识别字体,因此使用不支持Unicode字符的Helvetica,因此希腊字符不会显示在PDF中.
如果我从代码源手动更改
<span style="font-family:arial unicode ms,serif;"> some text </span>
Run Code Online (Sandbox Code Playgroud)
至
<span style="font-family:Arial Unicode MS,serif;"> some text </span>
Run Code Online (Sandbox Code Playgroud)
然后按预期工作,显示希腊字符.
以前有人遇到过这个问题吗?有没有办法避免将UpperCase字符更改为LowerCase?我真的想避免做任何类型的后期处理,如:
htmlString = htmlString.replace("arial unicode ms", "Arial Unicode MS");
Run Code Online (Sandbox Code Playgroud) 在 JavaFX 应用程序中使用 FlyingSaucer,出于各种原因避免使用 WebView:
FlyingSaucer 使用 Swing,这需要将其XHTMLPanel
( 的子类JPanel
)包装在 a 中SwingNode
以与 JavaFX 一起使用。一切正常,应用程序实时呈现 Markdown,并且响应迅速。这是在 Linux 上运行的应用程序的演示视频。
Windows 上的文本渲染是模糊的。在 中运行时JFrame
,没有被 包裹SwingNode
,但仍是视频中显示的同一应用程序的一部分,文本质量完美无瑕。屏幕截图显示了应用程序的主窗口(底部),其中包括SwingNode
前面提到的JFrame
(顶部)。您可能需要放大“l”或“k”的直边才能看到为什么一个清晰而另一个模糊:
这只发生在 Windows 上。通过系统的字体预览程序在 Windows 上查看字体时,字体会使用 LCD 颜色进行抗锯齿处理。该应用程序使用灰度。我怀疑如果有办法强制渲染使用颜色进行抗锯齿而不是灰度,问题可能会消失。再说一次,在它自己的内部运行时JFrame
,没有问题,并且不使用 LCD 颜色。
这JFrame
是具有完美渲染的代码:
private static class Flawless {
private final XHTMLPanel panel = new XHTMLPanel();
private final JFrame frame = new JFrame( …
Run Code Online (Sandbox Code Playgroud) 我正在使用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
但我无法挖掘出任何可以帮助我的示例代码.