栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java实现Img与PDF相互转换

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java实现Img与PDF相互转换

本文实例为大家分享了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; 
 
 
@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 tree = new TreeMap(); 
    for(File f : listFiles) 
    { 
      tree.put(Integer.parseInt(f.getName().replaceAll(".jpg$", "")), f); 
    } 
    for(Entry eif : tree.entrySet()) 
    { 
      System.out.println(eif.getKey()+"="+eif.getValue().toString()); 
    } 
  } 
   
  public static boolean imgMerageToPdf(File[] list, File file)throws Exception { 
    //1:对图片文件通过TreeMap以名称进行自然排序 
    Map mif = new TreeMap(); 
    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 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; 
  } 
   
  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();     
  } 
   
  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(); 
  } 
   
  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(); 
  } 
   
} 

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/141073.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号