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中的条形码相关推荐

  1. Flying Saucer生成pdf报表

    使用Flying Saucer生成pdf报表: 1.首先看一下Flying Saucer的官方介绍: https://github.com/flyingsaucerproject/flyingsauc ...

  2. 使用Flying Saucer生成pdf

    使用Flying Saucer生成pdf 实现思路: 利用FreeMarker编写HTML模板,通过Flying Saucer生成pdf. 一.maven添加依赖 本项目使用maven构建,基于spr ...

  3. freemark与flying saucer生成PDF

    freemark与flying saucer生成PDF 1.导入flying saucer与freemark的包. 2.利用freemark生成html文件. 3.利用flying saucer进行p ...

  4. flyingsaucer转换多个html,用 flying saucer 生成pdf文件 Css及html的问题

    我用  flying saucer  生成PDF文件,因为要生成文章,而文章是由tinymce发布的.可能有些文章发布出去后格式有问题,比如说标签不规范,有的没有闭合. 这样 flying sauce ...

  5. itext文本域自动换行_iText+Flying Saucer生成pdf文档,中文不显示和不自动换行问题...

    一.重写Breaker,添加中文识别 // Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov. // Jad home page: ...

  6. itext文本域自动换行_iText+Flying Saucer生成pdf文档,重写Breaker中文可以换行,但是英文单词会截断问题

    网上有好多重新的Breaker的案例或者代码,但是如果其中涉及到英文,那么单词也会直接被拦腰截断,这不是我们想要的结果,我有重写了一下Breaker,完美解决这个问题,废话不多说,代码如下: pack ...

  7. 【Latex学习】在生成pdf中加入书签/目录/提纲

    [Latex学习]在生成pdf中加入书签/目录/提纲 [Latex学习]在生成pdf中加入书签/目录/提纲 生成目录 生成pdf书签/目录/提纲 - 方法1 生成pdf书签/目录/提纲 - 方法2 去 ...

  8. 用pdfmake生成pdf中文文档

    生成pdf文件,有两种实现的方法,一种是直接使用text生成pdf,不需要获取元素,一种是获取html元素,通过元素生成:通过对这两种方法的使用,我最终选择了使用text生成.在此过程中使用到了pad ...

  9. java 设置pdf 编码格式_Java 在PDF中添加条形码

    条形码,是由宽度不等的多个黑条和空白所组成,用以表达一组信息的图形标识符.通过给文档添加条形码,可以直观,快捷地访问和分享一些重要的信息.本文就将通过使用Java程序来演示如何在PDF文档中添加Cod ...

最新文章

  1. 海底声纳Sonar探测编辑软件开发纪事
  2. Windows Home Server中文版使用全攻略
  3. 【Linux】一步一步学Linux——host命令(162)
  4. document.body 与 document.documentElement区别介绍
  5. android Launcher——启动过程详解
  6. php rewrite重写,yaf 自定义重写路由rewrite
  7. 0x68111002_黑苹果10.12.2驱动R9 270显卡成功一例
  8. JavaParse入门
  9. 活法 - 第三章 磨练灵魂、提升心志
  10. Java 相关知识的学习(第一章至第三章)
  11. git/gitgub
  12. 红米k30s至尊纪念版发布会直播地址红米k30s至尊纪念版发布会在线观看入口
  13. 探究App推广之路:流量思维永不死 ☞ iphone中App store上架优化建议
  14. js以索引形式遍历map对象
  15. Python的PIL库中的getpixel方法 putpixel方法
  16. MRI影像学习笔记(一)
  17. 数据库手工注入中的闭合
  18. 小程序 --获取微信头像昵称
  19. Proxy error: Could not proxy request /students from localhost:8080 to http://localhost:5000/.See ht
  20. k8s-2:nfs搭建

热门文章

  1. 以太坊地址和公钥_以太坊交易签名解析源码解读
  2. (转)HttpURLConnection与 HttpClient 区别
  3. jvm(4)-虚拟机性能监控与故障处理工具
  4. selenium自动化测试_为什么在生产中进行Selenium自动化测试对于您的下一个版本至关重要?...
  5. 用jackson转json_用Jackson编写大JSON文件
  6. 装饰器模式java_Java 8的装饰器模式
  7. JMetro版本11.5.11和8.5.11发布
  8. 硒4 Alpha –期望什么?
  9. 使用React Native和Spring Boot构建一个移动应用
  10. 通过这5个简单的技巧减少GC开销