欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

使用Flying-Saucer生成PDF中的条形码

发布时间:2023/12/3 69 豆豆
生活随笔 收集整理的这篇文章主要介绍了 使用Flying-Saucer生成PDF中的条形码 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

Flying-Saucer是一个不错的库,可以从Java应用程序中生成PDF文档。 只需生成一堆XHTML,然后将其放入渲染器中,然后使用iText生成所需的文档即可。

但是,当涉及条形码时,Flying-Saucer无法访问iText的内置条形码功能(至少我没有找到任何有关它的文档)。

但是,由于采用开放源代码并经过精心设计,因此只需创建一个子类即可完成此任务:Flying-Saucer依赖于名为ReplacedElementFactory的工厂,该工厂可以用自定义对象替换元素。 这也用于嵌入图像,如ITextReplacedElementFactory类所示。 现在,我们可以简单地创建一个子类,用适当的条形码替换图像:

<img src ='0123456789'type ='code128'style ='height:1cm'/>

一个人只需要像这样重写createReplacedElement方法(整个代码可以在这里找到: BarcodeReplacedElementFactory.java(GitHub) ):

@Overridepublic 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")) {if ("code128".equals(e.getAttribute("type"))) {try {Barcode128 code = new Barcode128();code.setCode(e.getAttribute("src"));FSImage fsImage = new ITextFSImage(Image.getInstance(code.createAwtImage(Color.BLACK, Color.WHITE),Color.WHITE));if (cssWidth != -1 || cssHeight != -1) {fsImage.scale(cssWidth, cssHeight);}return new ITextImageElement(fsImage);} catch (Throwable e1) {return null;}}}return super.createReplacedElement(c, box, uac, cssWidth, cssHeight);}

当然,对于<img />,“类型”不是有效的XHTML元素,但是如您在上面的代码中所见,您可以轻松地用data-type或任何其他属性替换它。 无论如何,飞碟似乎并不在乎这一点。

注意:上面的代码只能处理Code128-Barcodes,但是可以轻松扩展以处理EAN等(默认情况下,iText支持一堆条形码)。

为了使我们的工厂正常工作,我们需要将其传递给渲染器,这很简单:

ITextRenderer renderer = new ITextRenderer();renderer.getSharedContext().setReplacedElementFactory(new BarcodeReplacedElementFactory(renderer.getOutputDevice()));renderer.setDocumentFromString(inputAsString);renderer.layout();renderer.createPDF(outputAsStream);

参考:在Andy的软件工程专栏博客中,我们的JCG合作伙伴 Andreas Haufler 用Flying-Saucer生成了PDF中的条形码 。

翻译自: https://www.javacodegeeks.com/2012/12/generating-barcodes-in-pdfs-with-flying-saucer.html

总结

以上是生活随笔为你收集整理的使用Flying-Saucer生成PDF中的条形码的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。