java批量打印图片

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

J ava批量打印图片解决方案

有两个解决方法:直接打印一个图片集合;将多个图片放到一个文件里,再打印这个文件。

一、直接打印图片集合

首先实现单个图片的打印(用到javax下的print包)。根据图片格式选择不同的打印方式(支持gif、jpg、png格式的图片)。

其次实现多个图片的打印。用多次调用打印程序的方式实现图片的打印,但是会出现问题:每次打印都是重复调用打印机,不能实现调用一次打印机就批量完成打印,最多实现:一次批量打印,只取一次打印机,然后多次调用这个打印机打印单张图片。

考虑将几个图片在打印前合并成一个,然后打印出来。这种方式打印图片是将图片转化成流的形式打印,有方法实现将几个图片流数据合并成一个流,然后将流数据打印出来。问题又出现了:这种合并流的方式是将几个不同的图片合并到一个图片里,没有分页;同时没有考虑这种流的合成方式对图片本身内容的影像(未验证)。

二、将多个图片合一,然后打印

从目标达成方面考虑,将图片合一有两种格式: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(),其次定义这个文件的输出地址PdfWriter.getInstance(doc, new FileOutputStream(pdfFilePath));这样就创建了一个空白的pdf模板。Doc.open(),开启文档,使pdf模板可写。

最后,将图片放到pdf文件中

先根据图片位置,取得图片对象Image jpg = Image.getInstance(image.getPath()),再根据图片对象的长宽确定显示比例(有两种方式,选了一种比较容易被接受的方式,这里的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 HashPrintRequestAttributeSet();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下载到本机打开,然后再手动打印。

相关文档
最新文档