Java批量打印图片解决方案
有两个解决方法:直接打印一个图片集合;将多个图片放到一个文件里,再打印这个文件。
1、直接打印图片集合
首先实现单个图片的打印(用到javax下的print包)。根据图片格式选择不同的打印方式(支持gif、jpg、png格式的图片)。
其次实现多个图片的打印。用多次调用打印程序的方式实现图片的打印,但是会出现问题:每次打印都是重复调用打印机,不能实现调用一次打印机就批量完成打印,最多实现:一次批量打印,只取一次打印机,然后多次调用这个打印机打印单张图片。
考虑将几个图片在打印前合并成一个,然后打印出来。这种方式打印图片是将图片转化成流的形式打印,有方法实现将几个图片流数据合并成一个流,然后将流数据打印出来。问题又出现了:这种合并流的方式是将几个不同的图片合并到一个图片里,没有分页;同时没有考虑这种流的合成方式对图片本身内容的影像(未验证)。
2、将多个图片合一,然后打印
从目标达成方面考虑,将图片合一有两种格式:word和pdf。但是考虑到是图片信息在word中显的问题,特别是技术实现和效果方面考虑,最后选择将批量图片制作成pdf格式的文件,交付打印。
目前关于将图片转换成pdf文件应用最广泛的是itext,iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。 这里也可以用纯加java的方式将图片呢合并成pdf文件。
在长春人事档案目录里面,有实现图片转换为pdf的源代码,大家有用到的可以去这个目录(com.yinhai.file.ImageUtils.java)里面,里面实现了两个静态方法:
1)imageToPdf(String 需要转化为pdf的图片所在文件夹,String 新生成pdf文件的路径)
要将图片文件转换为pdf文件要分三步走:
首先,得到需要转化的图片。通过传递过来的文件夹到里面的图片文件。
其次,得到一个空的pdf文件。
先创建一个空的文件:Document doc = new Document(),其次定义这个文件的输出地址打印到图片Instance(doc, new FileOutputStream(pdfFilePath));这样就创建了一个空白的pdf模板。Doc.open(),开启文档,使pdf模板可写。
最后,将图片放到pdf文件中
先根据图片位置,取得图片对象Image jpg = Path()),再根据图片对象的长宽确定显示比例(有两种方式,选了一种比较容易被接受的方式,这里的percent是百分比,取整,以宽度、长度作为缩放的依据):int percent=getPercent(heigth, width),jpg.scalePercent(percent)。确定好图片的格式后,将图片放入到pdf模板中,doc.add(jpg)放图片的过程可以循环。最后关闭文件,doc.close()图片转换为pdf完成。
2)drawImage(String 文件路径) 单个图片打印方法
获得打印机
获得要打印的图片格式DocFlavor dof = DocFlavor.INPUT_STREAM.GIF(三种选择,gif、png、jpg),设置打印属性,默认从第一页开始打印PrintRequestAttributeSet pras = new H
ashPrintRequestAttributeSet();pras.add(new Copies(1)); 通过图片格式和打印属性得到支持此种打印的打印机,这里会得到所有符合条件的打印机:PrintService[] pss = PrintServiceLookup.lookupPrintServices(dof,pras)。
获得图片信息
以流的形式取得图片信息,FileInputStream fin = new FileInputStream(fileName);
开始打印
打印机先获取打印工作DocPrintJob job = ps.createPrintJob(),设置打印内容Doc doc = new SimpleDoc(fin,dof, new HashDocAttributeSet()),打印job.print(doc, pras)。
关于pdf打印的java实现很有问题。Java的打印说是打印机Driver支持PDF的Flavor的话,JPS(Java Printing Service)会检测到你的driver的这个特性,能够成功的打印PDF文档出来,但是,大部分情况下,这种情形是不成立的。另外有实现pdf打印的方法,不是授权费贵(商业产品)就是技术实现困难,不容易掌握。所以用了一个简单的方法实现pdf打印:那就是将形成的pdf下载到本机打开,然后再手动打印。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论