java如何将pdf转换成image

本文实例为大家分享了java将pdf转换image的具体代码,供大家参考,具体内容如下

首先使用了使用了apache的PDFBox组件1.8.4版本

package pdf; 

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.List; 

import javax.imageio.ImageIO; 

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage; 

public class PDFBox { 

  @SuppressWarnings("rawtypes")
  public static void main(String[] args) throws IOException {
    String p=System.getProperty("user.dir") + "/"+"zk.pdf";   

    PDDocument doc = PDDocument.load(p);
    int pageCount = doc.getNumberOfPages();
    System.out.println(pageCount);
    Date start = new Date();
    try {
      List pages = doc.getDocumentCatalog().getAllPages();
      for(int i=0;i<pages.size();i++){
        PDPage page = (PDPage) pages.get(i);
        @SuppressWarnings("unused")
        int width = new Float(page.getTrimBox().getWidth()).intValue();
        @SuppressWarnings("unused")
        int height = new Float(page.getTrimBox().getHeight()).intValue();
        BufferedImage image = page.convertToImage();
        ImageIO.write(image, "jpg", new File("img" + File.separator + (i + 1) + ".jpg"));
        System.out.println("image in the page -->"+(i+1));
      }
    } catch (Exception e) {
      e.printStackTrace();
    }finally{
      if(doc != null){
        doc.close();
      }
    }
    Date end = new Date();
    System.out.println(end.getTime()-start.getTime());
    System.out.println("over");
  } 

} 

但是其问题在于问题:

当PDF文档为180M大小时直接报解析异常

当PDF页数为500多页时处理非常慢

其后尝试使用了pdf-renderer 1.0.5 版本

package pdf; 

import java.awt.Image;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel; 

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.sun.pdfview.PDFFile;
import com.sun.pdfview.PDFPage; 

public class PDFRenderer { 

  public static void main(String[] args) throws IOException{
    String pdfRealePath=System.getProperty("user.dir") + "/"+"zk.pdf";
    File file = new File(pdfRealePath);
    RandomAccessFile raf = new RandomAccessFile(file, "r");
    FileChannel channel = raf.getChannel();
    MappedByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY,
        0, channel.size());
    PDFFile pdffile = new PDFFile(buf); 

    for (int i = 1; i <= pdffile.getNumPages(); i++) {
      PDFPage page = pdffile.getPage(i);
      Rectangle rect = new Rectangle(0, 0, ((int) page.getBBox()
          .getWidth()), ((int) page.getBBox().getHeight()));
      Image img = page.getImage(rect.width, rect.height, rect, null,true,true);
      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("img" + File.separator + (i + 1) + ".jpg"); // 输出到文件流
      JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
      JPEGEncodeParam param2 = encoder.getDefaultJPEGEncodeParam(tag);
      param2.setQuality(1f, false);// 1f是提高生成的图片质量
      encoder.setJPEGEncodeParam(param2);
      encoder.encode(tag); // JPEG编码
      out.close();
      System.out.println("image in the page -->"+(i+1));
    }
  }
}

但是其问题在于问题: 当pdf的版本不为1.4时,直接报错:Expected 'xref' at start of table

pdfbox与pdfrenderer相比较来说,转换的效率要低得多。200页左右的pdf花费的时间是后者的6倍左右。同时,对于中文字体的支持存在些问题。

但是对于却不存在pdf版本不同无法转换的问题。

pdfrenderer 不能转换1.4以上版本,查找了解决办法但是没有找到。

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

您可能感兴趣的文章:

  • java实现Img与PDF相互转换
  • java中pdf转图片的实现方法
(0)

相关推荐

  • java中pdf转图片的实现方法

    JAVA中实现pdf转图片可以通过第三方提供的架包,这里介绍几种常用的,可以根据自身需求选择使用. 一.icepdf.有收费版和开源版,几种方法里最推荐的.转换的效果比较好,能识别我手头文件中的中文,就是转换后可能字体的关系部分字间距有点宽.因为,字体支持是要收费的,所以转换的图片会带有官方的水印.去水印的方法可以查看另一篇文章:icepdf去水印方法 1.下载icepdf的架包,并导入项目中,这里用到4个,如下: 2.附上代码例子: String filePath = "c:/test.pdf

  • 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.Input

  • java如何将pdf转换成image

    本文实例为大家分享了java将pdf转换image的具体代码,供大家参考,具体内容如下 首先使用了使用了apache的PDFBox组件1.8.4版本 package pdf; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Date; import java.util.List; import javax.imageio.ImageIO;

  • java编程中字节流转换成字符流的实现方法

    java编程中字节流转换成字符流的实现方法 import java.io.*; /*readLine方法是字符流BufferReader类中的方法 * 而键盘录入的方法是字节流InputStream的方法 * 那么能不能将字节流转成字符流再使用字符流缓冲区中的readLine方法呢? * * InputStreamReader类是字节流转向字符流的桥梁.(它本身是一个字符流所以在构造时接受一个字节流) * * */ public class TransStreamDemo { public st

  • java 读取excel文件转换成json格式的实例代码

    需要读取excel数据转换成json数据,写了个测试功能,转换正常: JSON转换:org.json.jar 测试类:  importFile.java: package com.siemens.util; import java.util.ArrayList; import java.util.List; import org.json.JSONException; import org.json.JSONObject; import org.apache.poi.ss.usermodel.R

  • Java编程一维数组转换成二维数组实例代码

    简介:由于经常在使用矩阵进行计算时,会首先将一维数组转为二维数组.因此,在这里记录一下,也希望对他人有帮助. 实例代码: package deal; public class ArryTest { public static void main(String[] args) { //创建一个一维数组 0,1,2,3...,10 double [] c= new double[10]; for (int i = 0; i < c.length; i++) { c[i]=i; } double[][

  • java实现将数字转换成人民币大写

    Rmb.java public class Rmb { /** *人民币的基本信息和操作 *@author weinee *@version 1.0 */ double number; //人民币的数量 private String[] hanArr = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "

  • python实现pdf转换成word/txt纯文本文件

    本文实例为大家分享了python实现pdf转word/txt,供大家参考,具体内容如下 依赖包:pdfminer3k 可以通过pip安装:也可以到官网下载,解压,进入文件夹,输入命令setup.py install安装软件. 源代码: #!/usr/bin/python # -*- coding: utf-8 -*- import sys import importlib importlib.reload(sys) from pdfminer.pdfparser import PDFParser

  • Java如何将String转换成json对象或json数组

    目录 将String转换成json对象或json数组 字符串转json数组的解决 首先导入 net.sf.json.JSONArray和net.sf.json.JSONObject 两个jar 包 将String转换成json对象或json数组 这里的SmartProejctEquipmentMap 是我自定的一个实体类,可以自己定义转换. 注意:json字符串中键的名称要和实体类一致. @Test public void TestJsonObject() { String datajson =

  • java递归菜单树转换成pojo对象

    复制代码 代码如下: package com.cjonline.foundation.authority.pojo;import java.util.ArrayList;import java.util.Collections;import java.util.Iterator;import java.util.List;import org.apache.log4j.Logger;import com.cjonline.foundation.util.CheckNullEmpty;/** *

  • pdf转换成jpg示例分享

    复制代码 代码如下: using System;  using System.Collections.Generic;  using System.Text;  using System.Runtime.InteropServices;  using System.Collections;  /** Convert PDF to Image Format(JPEG) using Ghostscript API convert a pdf to jpeg using ghostscript com

  • 使用Java把文本内容转换成网页的实现方法分享

    先以简单的文件读写实现为基础,FileHelper类中的readFile方法用于读取文件内容,writeFile方法用于向文件中写入内容. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; public class FileHelper { public static String readFile(String f

随机推荐