欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java实现Img与PDF相互转换

程序员文章站 2023-12-04 10:43:16
本文实例为大家分享了java实现img与pdf相互转换的具体代码,供大家参考,具体内容如下 不善于表达,就直接贴出代码吧。请大牛忽视我。 import ja...

本文实例为大家分享了java实现img与pdf相互转换的具体代码,供大家参考,具体内容如下

不善于表达,就直接贴出代码吧。请大牛忽视我。

import java.awt.image.bufferedimage; 
import java.io.bytearrayoutputstream; 
import java.io.file; 
import java.io.fileinputstream; 
import java.io.fileoutputstream; 
import java.io.inputstream; 
import java.io.randomaccessfile; 
import java.nio.bytebuffer; 
import java.nio.channels.filechannel; 
import java.util.map; 
import java.util.map.entry; 
import java.util.treemap; 
 
import com.utils.imgfiletool; 
import com.lowagie.text.document; 
import com.lowagie.text.image; 
import com.lowagie.text.rectangle; 
import com.lowagie.text.pdf.pdfcopy; 
import com.lowagie.text.pdf.pdfimportedpage; 
import com.lowagie.text.pdf.pdfreader; 
import com.lowagie.text.pdf.pdfwriter; 
import com.sun.image.codec.jpeg.jpegcodec; 
import com.sun.image.codec.jpeg.jpegimageencoder; 
import com.sun.pdfview.pdffile; 
import com.sun.pdfview.pdfpage; 
 
/** 
 * 
 * @author hubiao 
 * @datetime 2014-06-07 
 *   本工具对实现对img与pdf相互转换。 
 *   运行测试需要导入以下2个jar包 
 *     itext-2.0.2.jar   
 *     pdfrenderer.jar 
 * 
 */ 
@suppresswarnings("unused") 
public class imgpdfutils { 
  public static void main(string[] args) throws exception { 
    //pdf包提取 pdf 
    //pdfextraction(); 
     
    //pdf转jpg 
    //pdftojpg("e:\\java\\资料pdf\\1.pdf","e:\\java\\资料pdf\\1.jpg",1); 
     
    //将多个jpg直接合并成pdf包 
    //extractionpdf("f:\\temp\\project\\数据\\dfdsfds\\巴黎公社活动家传略_img","f:\\temp\\project\\数据\\dfdsfds\\巴黎公社活动家传略_img.pdf"); 
     
    //jpg转pdf 
    //jpgtopdf(); 
     
    //文件排序 
    //listorder(); 
     
    imgfiletool.imgmeragetopdf(new file("f:\\temp\\project\\数据\\dfdsfds\\巴黎公社活动家传略_img").listfiles(),new file("f:\\temp\\project\\数据\\dfdsfds\\","巴黎公社活动家传略.pdf")); 
  } 
   
  private static void listorder() { 
     
    file[] listfiles = new file("f:\\temp\\project\\数据\\dfdsfds\\巴黎公社活动家传略_img").listfiles(); 
    treemap<integer, file> tree = new treemap<integer, file>(); 
    for(file f : listfiles) 
    { 
      tree.put(integer.parseint(f.getname().replaceall(".jpg$", "")), f); 
    } 
    for(entry<integer, file> eif : tree.entryset()) 
    { 
      system.out.println(eif.getkey()+"="+eif.getvalue().tostring()); 
    } 
  } 
  /** 
   * @param list 图片集合 
   * @param file 保存路径 
   * @return true,合并完成 
   *   如果文件名不是1.jpg,2.jpg,3.jpg,4.jpg这样的。则需要自己重写treemap的排序方式! 
   */ 
  public static boolean imgmeragetopdf(file[] list, file file)throws exception { 
    //1:对图片文件通过treemap以名称进行自然排序 
    map<integer,file> mif = new treemap<integer,file>(); 
    for(file f : list) 
      mif.put(integer.parseint(f.getname().replaceall(".jpg$", "")), f); 
     
    //2:获取第一个img的宽、高做为pdf文档标准 
    bytearrayoutputstream baos = new bytearrayoutputstream(2048*3); 
    inputstream is = new fileinputstream(mif.get(1)); 
    for(int len;(len=is.read())!=-1;) 
      baos.write(len); 
     
    baos.flush(); 
    image image = image.getinstance(baos.tobytearray()); 
    float width = image.width(); 
    float height = image.height(); 
    baos.close(); 
     
    //3:通过宽高 ,实例化pdf文档对象。 
    document document = new document(new rectangle(width,height)); 
    pdfwriter pdfwr = pdfwriter.getinstance(document, new fileoutputstream(file)); 
    document.open(); 
     
    //4:获取每一个图片文件,转为img对象。装载到document对象中 
    for(entry<integer,file> eif : mif.entryset()) 
    { 
      //4.1:读取到内存中 
      baos = new bytearrayoutputstream(2048*3); 
      is = new fileinputstream(eif.getvalue()); 
      for(int len;(len=is.read())!=-1;) 
        baos.write(len); 
      baos.flush(); 
       
      //4.2通过byte字节生成img对象 
      image = image.getinstance(baos.tobytearray()); 
      image.getinstance(baos.tobytearray()); 
      image.setabsoluteposition(0.0f, 0.0f); 
       
      //4.3:添加到document中 
      document.add(image); 
      document.newpage(); 
      baos.close(); 
    } 
     
    //5:释放资源 
    document.close(); 
    pdfwr.close(); 
     
    return true; 
  } 
  /** 
   * 
   * @param source 源文件 
   * @param target 目标文件 
   * @param x 读取源文件中的第几页 
   */ 
  private static void pdftojpg(string source,string target,int x) throws exception { 
    //创建从中读取和向其中写入(可选)的随机访问文件流,r表示对其只是访问模式 
    randomaccessfile rea = new randomaccessfile(new file(source), "r"); 
 
    //将流读取到内存中,然后还映射一个pdf对象 
    filechannel channel = rea.getchannel(); 
    bytebuffer buf = channel.map(filechannel.mapmode.read_only,0, channel.size()); 
    pdffile pdffile = new pdffile(buf); 
    pdfpage page = pdffile.getpage(x);  
 
    // get the width and height for the doc at the default zoom  
    java.awt.rectangle rect = new java.awt.rectangle(0, 0, (int) page.getbbox()  
        .getwidth(), (int) page.getbbox().getheight());  
 
    // generate the image  
    java.awt.image img = page.getimage(rect.width, rect.height, // width & 
        rect, // clip rect 
        null, // null for the imageobserver 
        true, // fill background with white 
        true // block until drawing is done 
        );  
 
    bufferedimage tag = new bufferedimage(rect.width, rect.height,  
        bufferedimage.type_int_rgb);  
     
    tag.getgraphics().drawimage(img, 0, 0, rect.width, rect.height,  
        null);  
    fileoutputstream out = new fileoutputstream(target); // 输出到文件流  
    jpegimageencoder encoder = jpegcodec.createjpegencoder(out);  
    encoder.encode(tag); // jpeg编码  
    out.close();     
  } 
  /** 
   * @param source 源pdf文件路径 
   * @param target 保存pdf文件路径 
   * @param pagenum 提取pdf中第pagenum页 
   * @throws exception  
   */ 
  private static void pdfextraction(string source,string target,int pagenum) throws exception{ 
    //1:创建pdf读取对象 
    pdfreader pr = new pdfreader(source); 
    system.out.println("this document "+pr.getnumberofpages()+" page"); 
     
    //2:将第page页转为提取,创建document对象 
    document doc = new document(pr.getpagesize(pagenum)); 
     
    //3:通过pdfcopy转其单独存储 
    pdfcopy copy = new pdfcopy(doc, new fileoutputstream(new file(target))); 
    doc.open(); 
    doc.newpage(); 
     
    //4:获取第1页,装载到document中。 
    pdfimportedpage page = copy.getimportedpage(pr,pagenum); 
    copy.addpage(page);  
     
    //5:释放资源 
    copy.close(); 
    doc.close(); 
    pr.close(); 
  } 
  /** 
   * @param pdffile 源pdf文件 
   * @param imgfile  图片文件 
   */ 
  private static void jpgtopdf(file pdffile,file imgfile) throws exception { 
    //文件转img 
    inputstream is = new fileinputstream(pdffile); 
    bytearrayoutputstream baos = new bytearrayoutputstream(); 
    for(int i;(i=is.read())!=-1;) 
    { 
      baos.write(i); 
    } 
    baos.flush(); 
     
    //取得图像的宽和高。 
    image img = image.getinstance(baos.tobytearray()); 
    float width = img.width(); 
    float height = img.height(); 
    img.setabsoluteposition(0.0f, 0.0f);//取消偏移 
    system.out.println("width = "+width+"\theight"+height); 
     
    //img转pdf 
    document doc = new document(new rectangle(width,height)); 
    pdfwriter pw = pdfwriter.getinstance(doc,new fileoutputstream(imgfile)); 
    doc.open(); 
    doc.add(img); 
     
    //释放资源 
    system.out.println(doc.newpage()); 
    pw.flush(); 
    baos.close(); 
    doc.close(); 
    pw.close(); 
  } 
   
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。