- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
代码片段在问题的底部
我成功地能够使用 servlet 和 Flying Saucer/iText 在客户端的浏览器中呈现 PDF。但是,我无法弄清楚如何将样式表包含在 PDF 渲染中。
我尝试了以下方法,但到目前为止都没有效果:
buf.append("<head><link rel='stylesheet' type='text/css' href='PDFservlet.css' /></head>")
并将“PDFservlet.css”放在web根目录下,servlet类文件所在的目录,就在“classes”目录下href='\PDFservlet.css'
和将“PDFservlet.css”放在我的网站根目录下的不同位置外,与上述相同不确定在这里还能尝试什么以及如何在客户端浏览器中呈现 PDF 时识别此 CSS 表。
你们谁能告诉我我做错了什么吗?
此外,我在呈现 PDF 后收到一个 java.io.IOException: Stream closed
,但不确定它的来源。
我正在本地测试并运行 WebLogic Server 10.3.3。
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws javax.servlet.ServletException, java.io.IOException
{
resp.setContentType("application/pdf");
StringBuffer buf = new StringBuffer();
buf.append("<html>");
// put in some style
buf.append("<head><link rel='stylesheet' type='text/css' href='PDFservlet.css' /></head>");
// generate the rest of the HTML...
buf.append("<body>");
buf.append(" <div id='container'>");
buf.append(" <div id='check_num'>1000</div>");
buf.append(" <div id='address'><b>Estate Of JAMES SMITH</b><br />35 Addison Avenue<br />New York, NY 00000<br />(123)456-7890</div>");
buf.append(" <div id='date'><i>Date</i> <u>02/08/2012</u></div>");
buf.append(" <div id='void_message'><b>VOID 180 DAYS FROM CHECK DATE</b></div>");
buf.append(" <div id='pay_line_container'>");
buf.append(" <div id='pay_line_message'><i>Pay To The Order Of:</i></div>");
buf.append(" <div id='pay_line'></div>");
buf.append(" <div id='pay_line_pay_to'>Richard Richards XXIII</div>");
buf.append(" <div id='pay_line_amount'>$ 5.00</div>");
buf.append(" </div>");
buf.append(" <div id='pay_line2_container'>");
buf.append(" <div id='pay_line2'></div>");
buf.append(" <div id='pay_line2_amount_description'>Five and 00/100</div>");
buf.append(" <div id='pay_line2_dollars'>DOLLARS</div>");
buf.append(" </div>");
buf.append(" <div id='void_stamp'><b>VOID</b></div>");
buf.append(" <div id='for_line'><i>For:</i> <u>test</u></div>");
buf.append(" <div id='bank_info'><b>TD BANKNORTH</b><br />MAINE</div>");
buf.append(" <div id='signature_line'></div>");
buf.append(" <div id='bank_numbers'><b>c1000c a123456789a 987654321c</b></div>");
buf.append(" </div>");
buf.append("</body>");
buf.append("</html>");
System.out.println(buf.toString());
// parse our markup into an xml Document
try {
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(new StringBufferInputStream(buf.toString()));
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(doc, null);
renderer.layout();
OutputStream os = resp.getOutputStream();
renderer.createPDF(os);
os.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
编辑我
将服务器端代码上的 CSS 文件的内容读入字符串对我来说是一种替代方法(readFile
方法基于 Jon Skeet 在 How do I create a Java string from the contents of a file? 的帖子):
buf.append("<head><style>");
buf.append(readFile(getServletContext().getRealPath("/PDFservlet.css"), "UTF-8"));
buf.append("</style></head>");
这似乎是一种可行的替代方法吗?
编辑二
我为 iText 创建了一个聊天室,我希望你们中的一些人可以时不时地看一看。我在 iText/flying-saucer 方面遇到了几个问题,我认为在你们中的一些专家的帮助下可以很容易地解决这些问题。如果有机会,请查看并发布您可能能够解决 iText 问题的任何有用 Material :https://chat.stackoverflow.com/rooms/8945/itext
最佳答案
有多种方法可以解决这个问题,一种是你的,其他的是:
1:设置文档的 url。你打电话renderer.setDocument(doc, null);
第二个参数是基本 url,资源将与其相关。
一个例子:
<link href="my.css" ..
http://example.com/something/my.css
renderer.setDocument(doc, "http://example.com/something/page.html");
2:实现 UserAgentCallback接口(interface)并用renderer.getSharedContext().setUserAgentCallback(myUserAgentCallback);
设置它
关于css - servlet 中的 Flying Saucer/iText PDF 找不到 css 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9722038/
我在 asp.net 应用程序(使用 IKVM)中使用 flysaucer 和 iText 将 HTML 转换为 PDF。如果我将样式直接放在 html 中,它工作正常(即使样式放在样式标签之间),但
我一直在尝试将带有内容的伪元素添加到正在使用飞碟库转换的页面的 CSS 中。在常规浏览器中以 HTML 格式查看页面时,代码运行良好,我可以看到伪元素 (:before)。然而,当使用 Flying
我使用 Flying Saucer 和 itext 将 html 转换为 pdf,为了在垂直方向写入文本,我尝试了简单的 css: style="writing-mode: tb-rl"; 浏览器的变
我有一个组合框,用户可以在其中选择可用的语言。该应用程序包含每种语言的属性文件。在页面的资源部分,资源包是根据用户配置文档中的语言标记(DE、EN ...)计算的。 有什么简单的方法可以根据组合框的值
我已经在页面上嵌入了Youtube播放器,并使用JavaScript生成了“即时”播放列表。观看期间是否可以在播放列表的末尾添加新视频?我可以从列表的开头删除视频吗? 最佳答案 您可以,但是在尝试在视
...特别是在 Groovy 中(因此是标签)? 在 Java 中你不能这样做......但在动态语言(例如 Python)中你通常可以。 在 Eclipse 中尝试做类似在 Spock 特性(即测试
在编写 shell 脚本(据我所知通常没有 .* 后缀)时,我通常会执行以下操作 1) emacs foo2) 输入 #!/bin/sh3) 关闭并重新打开 emacs 以启用 shell-scrip
嗨,我有一个对象:var myobject = new Object;我想在以这种方式循环 jquery 输入集合时动态填充它的属性: $('.test').each(function(){
我认为可以在 C 中即时连接字符串(字符数组)。 char* str1= "hello" " " "world"; 但是当我尝试以下操作时,我会收到一条错误消息(函数 fopen 的参数太少)。为什么
我有下表: store | dow | turnover ------+-----+----------- 1 | 1 | Eu59.426,00 1 | 2 | Eu33.
我需要使用标准 UNIX diff 命令和 python subprocess 模块创建一个差异文件。问题是我必须在不创建临时文件的情况下比较文件和流。我想过通过 os.mkfifo 方法使用命名管道
Fly-Pie 是一个用于 GNOME 的独特的菜单启动器,以操作鼠标为主的用户可以用它进行一些操作。 应用启动器可以方便地快速切换到一个活动窗口,启动新的应用,等等。 Ulau
strftime(),根据 cpan.org: print strftime($template, @lt); 我只是想不出这个正确的 Perl 代码配方。它在我调用 strftime() 的地方不断
这里有没有人得到 word-wrap: break-word 在 flying-saucer 中工作?我在 flying-saucer 中将 html 渲染为 png。我可以找到一个 3 年前的话题
Windows 7,Emacs 25.1 我需要对我的自定义文本进行“即时”拼写检查(例如,强调不正确的单词)。但我在 中写文字两种语言 : 英语和俄语。我想在两种语言的拼写检查之间轻松切换。 什么是
一直在玩飞碟R8,试过从首页隐藏页眉和页脚 我的PDF。 我关注了 hint试图遵循 的 W3C 规范内容:元素() (W3C running elements)在我的 print.css 中。据描述
我正在使用由按钮触发的 FlyTo 动画来放大 map 。平移缩放动画结束后,无法使用鼠标滚轮缩小。 如果我单击基本的缩小控件,它就可以工作,如果我在触摸屏上测试它,它就可以工作。如果我尝试使用鼠标滚
我无法将Wild-fly容器连接到在其他容器中运行的PostgreSQL服务器。但是,我能够从主机连接到数据库。 最佳答案 看看networking和links。我建议联网。网络内部的容器名称可以由d
我正在使用 Flying Saucer/iText 生成报告。现在报告有一个条件,如果特定条件发生,报告应该移动到 pdf 的下一页,并在 PDF 上添加数据等等。 问候帕万 最佳答案 您必须使用 c
您好,我有一个 tabpanel,其中有两个面板,但是当我尝试使用 tabpanel.show() 显示一个面板时。我收到这条消息 Ext.fly() null or not an object do
我是一名优秀的程序员,十分优秀!