Tag: flying saucer

在flying-saucer的pdf页面之间打破了嵌入的图像

我对图像有一些问题(所有图像都嵌入在html中作为base64字符串)。 我用css img {page-break-inside: avoid;} 它有帮助但并非总是如此。 在某些情况下,可以正确处理相同的图像,而在其他情况下在页面之间划分。 这取决于许多因素,例如: 图像被指定为块元素 以前的图像是或不是块元素 分开之前有一些大的形象 我还注意到,如果问题至少发生一次,那么当文档不适合页面时,文档末尾的所有图像都会被破坏。 我正在使用这种方法将RepleacedElementFactory用于嵌入式图像: http : //www.intelligrape.com/blog/using-data-urls-for-embedding-images-in-flying-saucer-generated-pdfs/ 唯一的区别是我正在改变一些尺寸 public ReplacedElement createReplacedElement(LayoutContext c, BlockBox box, UserAgentCallback uac, int cssWidth, int cssHeight) { Element e = box.getElement(); if (e == null) { return null; } String nodeName = e.getNodeName(); if (nodeName.equals(“img”)) { String attribute = e.getAttribute(“src”); FSImage fsImage; […]

在HTTP请求中创建的PDF将无法在Internet Explorer中打开

我有servlet根据请求中的一些参数动态生成PDF到响应。 当我尝试在IE中打开/下载此文件时,我收到以下消息: “无法从[site]下载[filename]。无法打开此Internet站点。请求的站点要么不可用,要么找不到。请稍后再试。” 这是我设置的响应: response.setHeader(“Content-Disposition”, “attachment;filename=” + title + “.pdf”); response.setContentType(“application/pdf”); 其他浏览器一切正常。 更新: 我尝试过内联而不是附件。 这将打开一个新窗口而不是打开/保存对话框(我希望有对话框),错误消息消失了,但新窗口在IE中只是空的。 仍在使用其他浏览器。 我试过简单,双重,没有引号围绕文件名,不包含任何未转义的字符。 双重和没有引号没有区别,但单个文件附加到文件名,我当然不想要。 文件名不包含未转义的字符。 我已经检查了这个页面上的测试,它表示所有浏览器都会传递带有文件名,没有引号的附件 。 这是从一开始就使用的。 添加Content-Lenght标头没有区别。 顺便说一句,飞碟用于制作PDF。

ITextRenderer:将页面高度调整为内容

我正在使用ITextRenderer从HTML生成PDF,我需要做的是收银机收据。 此收据具有动态宽度,当然还有动态内容。 这就是说,内容的高度总是不同的,现在我正在努力寻找一种方法来调整PDF页面的高度到内容。 如果它太大,收据最后会有一个长的白色部分,如果要缩短PDF的分页,我需要它只在一个页面中。 我正在使用@page {size: Wpx Hpx;}来设置页面大小,但根据宽度和数据计算内容高度几乎是不可能的(会非常痛苦)。 这是生成PDF的代码: ITextRenderer renderer = new ITextRenderer(); byte[] bytes = htmlDocumentString.toString().getBytes(“UTF-8”); ByteArrayInputStream bais = new ByteArrayInputStream(bytes); DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); InputSource is = new InputSource(bais); Document doc = builder.parse(is); renderer.setDocument(doc, null); renderer.layout(); renderer.createPDF(outputStream); outputStream.flush(); outputStream.close(); 我也试过renderer.getSharedContext().setPrint(false); 但是这引发了NPE。 还@page {-fs-page-sequence: “none”;}没有任何运气。 ————–“解决方案”—————- 我找到的解决方案甚至不是很接近完美,但有效! @page { size: Wpx 1px; } […]

Flying Saucer XHTML的相对路径?

我正在使用Flying Saucer将一些PDF文档从字符串渲染为XHTML。 我的代码是这样的: iTextRenderer.setDocument(documentGenerator.generate(xhtmlDocumentAsString)); iTextRenderer.layout(); iTextRenderer.createPDF(outputStream); 我想要了解的是,当使用这种方法时,XHTML中的相对路径从哪里解决? 例如,对于图像或样式表。 我能够使用此方法成功生成基于文本的文档,但我需要了解如何引用我的图像和CSS。

如何将SVG图像添加到使用HTML和Flying Saucer库(和Batik)构建的PDF?

我正在使用飞碟库(旧的但开源的)使用XHTML生成PDF。 我有这个工作,但我也想添加SVG图像。 我开始致力于整合蜡染试图让它工作,但我遇到了问题。 未绘制SVG图像。 XHTML仍然呈现,但它似乎没有显示SVG。 我已经让SVG在单独的PDF上渲染,但从未与飞碟结果一起渲染。 我添加了通常的ReplacedElementFactory(它也适用于常规图像,但还没有包含该代码)。 唯一相关的方法(确实被调用和所有内容)如下: @Override public ReplacedElement createReplacedElement(LayoutContext layoutContext, BlockBox blockBox, UserAgentCallback userAgentCallback, int cssWidth, int cssHeight) { Element element = blockBox.getElement(); if (element == null) { return null; } String nodeName = element.getNodeName(); if (“img”.equals(nodeName)) { SAXSVGDocumentFactory factory = new SAXSVGDocumentFactory(XMLResourceDescriptor.getXMLParserClassName()); SVGDocument svgImage = null; try { svgImage = factory.createSVGDocument(new […]

使用Flying Saucer将图像渲染为PDF格式的内存

我正在使用Flying Saucer将XHTML转换为PDF文档。 我已经得到了只使用基本HTML和内联CSS的代码,但是,现在我正在尝试将图像作为一种标题添加到PDF中。 我想知道的是,如果有任何方式通过在图像文件中读取Java Image对象来添加图像,然后以某种方式将其添加到PDF(或XHTML – 就像它获取虚拟“url”一样表示我可以用来渲染PDF的Image对象。 有没有人做过这样的事情? 预先感谢您提供的任何帮助!

使用飞碟(xHTMLRenderer)和iText生成页眉/页脚

我意识到之前已经问过这个问题(我查看了所有的解决方案并尝试了所有这些)但我仍然在尝试生成一个带有页眉和页脚的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 (css3function),飞碟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被放入一个名为buf的StringBuffer 。 buf.append(“”); buf.append(“blabla “); buf.append(” “); 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); […]

有没有办法提高FlyingSaucer的性能?

我已经按照这篇文章使用FlyingSaucer将XHTML转换为PDF,它很棒,但有一个主要的垮台……它的速度非常慢! 我发现从XHTML渲染PDF需要1到2分钟,无论该页面有多简单。 基本代码: import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import org.xhtmlrenderer.pdf.ITextRenderer; import com.lowagie.text.DocumentException; public class FirstDoc { public static void main(String[] args) throws IOException, DocumentException { String inputFile = “firstdoc.xhtml”; String url = new File(inputFile).toURI().toURL().toString(); String outputFile = “firstdoc.pdf”; OutputStream os = new FileOutputStream(outputFile); ITextRenderer renderer = new ITextRenderer(); renderer.setDocument(url); renderer.layout(); renderer.createPDF(os); os.close(); […]