使用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中的条形码相关推荐
- Flying Saucer生成pdf报表
使用Flying Saucer生成pdf报表: 1.首先看一下Flying Saucer的官方介绍: https://github.com/flyingsaucerproject/flyingsauc ...
- 使用Flying Saucer生成pdf
使用Flying Saucer生成pdf 实现思路: 利用FreeMarker编写HTML模板,通过Flying Saucer生成pdf. 一.maven添加依赖 本项目使用maven构建,基于spr ...
- freemark与flying saucer生成PDF
freemark与flying saucer生成PDF 1.导入flying saucer与freemark的包. 2.利用freemark生成html文件. 3.利用flying saucer进行p ...
- flyingsaucer转换多个html,用 flying saucer 生成pdf文件 Css及html的问题
我用 flying saucer 生成PDF文件,因为要生成文章,而文章是由tinymce发布的.可能有些文章发布出去后格式有问题,比如说标签不规范,有的没有闭合. 这样 flying sauce ...
- itext文本域自动换行_iText+Flying Saucer生成pdf文档,中文不显示和不自动换行问题...
一.重写Breaker,添加中文识别 // Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov. // Jad home page: ...
- itext文本域自动换行_iText+Flying Saucer生成pdf文档,重写Breaker中文可以换行,但是英文单词会截断问题
网上有好多重新的Breaker的案例或者代码,但是如果其中涉及到英文,那么单词也会直接被拦腰截断,这不是我们想要的结果,我有重写了一下Breaker,完美解决这个问题,废话不多说,代码如下: pack ...
- 【Latex学习】在生成pdf中加入书签/目录/提纲
[Latex学习]在生成pdf中加入书签/目录/提纲 [Latex学习]在生成pdf中加入书签/目录/提纲 生成目录 生成pdf书签/目录/提纲 - 方法1 生成pdf书签/目录/提纲 - 方法2 去 ...
- 用pdfmake生成pdf中文文档
生成pdf文件,有两种实现的方法,一种是直接使用text生成pdf,不需要获取元素,一种是获取html元素,通过元素生成:通过对这两种方法的使用,我最终选择了使用text生成.在此过程中使用到了pad ...
- java 设置pdf 编码格式_Java 在PDF中添加条形码
条形码,是由宽度不等的多个黑条和空白所组成,用以表达一组信息的图形标识符.通过给文档添加条形码,可以直观,快捷地访问和分享一些重要的信息.本文就将通过使用Java程序来演示如何在PDF文档中添加Cod ...
最新文章
- 海底声纳Sonar探测编辑软件开发纪事
- Windows Home Server中文版使用全攻略
- 【Linux】一步一步学Linux——host命令(162)
- document.body 与 document.documentElement区别介绍
- android Launcher——启动过程详解
- php rewrite重写,yaf 自定义重写路由rewrite
- 0x68111002_黑苹果10.12.2驱动R9 270显卡成功一例
- JavaParse入门
- 活法 - 第三章 磨练灵魂、提升心志
- Java 相关知识的学习(第一章至第三章)
- git/gitgub
- 红米k30s至尊纪念版发布会直播地址红米k30s至尊纪念版发布会在线观看入口
- 探究App推广之路:流量思维永不死 ☞ iphone中App store上架优化建议
- js以索引形式遍历map对象
- Python的PIL库中的getpixel方法 putpixel方法
- MRI影像学习笔记(一)
- 数据库手工注入中的闭合
- 小程序 --获取微信头像昵称
- Proxy error: Could not proxy request /students from localhost:8080 to http://localhost:5000/.See ht
- k8s-2:nfs搭建
热门文章
- 以太坊地址和公钥_以太坊交易签名解析源码解读
- (转)HttpURLConnection与 HttpClient 区别
- jvm(4)-虚拟机性能监控与故障处理工具
- selenium自动化测试_为什么在生产中进行Selenium自动化测试对于您的下一个版本至关重要?...
- 用jackson转json_用Jackson编写大JSON文件
- 装饰器模式java_Java 8的装饰器模式
- JMetro版本11.5.11和8.5.11发布
- 硒4 Alpha –期望什么?
- 使用React Native和Spring Boot构建一个移动应用
- 通过这5个简单的技巧减少GC开销