java做 pdf转换成图片 时出现Unknown CMap: UniGB-UCS2-H?急~
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java做 pdf转换成图片 时出现Unknown CMap: UniGB-UCS2-H?急~相关的知识,希望对你有一定的参考价值。
java.io.IOException: Unknown CMap: UniGB-UCS2-H
at com.sun.pdfview.font.PDFCMap.getCMap(PDFCMap.java:67)
at com.sun.pdfview.font.PDFFontEncoding.<init>(PDFFontEncoding.java:73)
at com.sun.pdfview.font.PDFFont.getFont(PDFFont.java:133)
at com.sun.pdfview.PDFParser.getFontFrom(PDFParser.java:1166)
at com.sun.pdfview.PDFParser.iterate(PDFParser.java:719)
at com.sun.pdfview.BaseWatchable.run(BaseWatchable.java:101)
at java.lang.Thread.run(Thread.java:662)
java.io.IOException: Unknown CMap: UniGB-UCS2-H
at com.sun.pdfview.font.PDFCMap.getCMap(PDFCMap.java:67)
at com.sun.pdfview.font.PDFFontEncoding.<init>(PDFFontEncoding.java:73)
at com.sun.pdfview.font.PDFFont.getFont(PDFFont.java:133)
at com.sun.pdfview.PDFParser.getFontFrom(PDFParser.java:1166)
at com.sun.pdfview.PDFParser.iterate(PDFParser.java:719)
at com.sun.pdfview.BaseWatchable.run(BaseWatchable.java:101)
at java.lang.Thread.run(Thread.java:662)
你复制也复制一个有点技术含量的,这个回答本人已经看过n次,而且是文不对题
java 实现pdf转换成图片
参考1:java实现pdf转换成图片
来源:java 实现pdf转换成图片_ZZ的博客-CSDN博客_java pdf 转图片
1.maven添加jar
<!-- https://mvnrepository.com/artifact/org.apache.pdfbox/fontbox -->
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>fontbox</artifactId>
<version>2.0.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox -->
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
2.实现代码
/**
* 转换全部的pdf
* @param fileAddress 文件地址
* @param filename PDF文件名
* @param type 图片类型
*/
public static void pdf2png(String fileAddress,String filename,String type)
// 将pdf装图片 并且自定义图片得格式大小
File file = new File(fileAddress+"\\\\"+filename+".pdf");
try
PDDocument doc = PDDocument.load(file);
PDFRenderer renderer = new PDFRenderer(doc);
int pageCount = doc.getNumberOfPages();
for (int i = 0; i < pageCount; i++)
BufferedImage image = renderer.renderImageWithDPI(i, 144); // Windows native DPI
// BufferedImage srcImage = resize(image, 240, 240);//产生缩略图
ImageIO.write(image, type, new File(fileAddress+"\\\\"+filename+"_"+(i+1)+"."+type));
catch (IOException e)
e.printStackTrace();
/**
*自由确定起始页和终止页
* @param fileAddress 文件地址
* @param filename pdf文件名
* @param indexOfStart 开始页 开始转换的页码,从0开始
* @param indexOfEnd 结束页 停止转换的页码,-1为全部
* @param type 图片类型
*/
public static void pdf2png(String fileAddress,String filename,int indexOfStart,int indexOfEnd,String type)
// 将pdf装图片 并且自定义图片得格式大小
File file = new File(fileAddress+"\\\\"+filename+".pdf");
try
PDDocument doc = PDDocument.load(file);
PDFRenderer renderer = new PDFRenderer(doc);
int pageCount = doc.getNumberOfPages();
for (int i = indexOfStart; i < indexOfEnd; i++)
BufferedImage image = renderer.renderImageWithDPI(i, 144); // Windows native DPI
// BufferedImage srcImage = resize(image, 240, 240);//产生缩略图
ImageIO.write(image, type, new File(fileAddress+"\\\\"+filename+"_"+(i+1)+"."+type));
catch (IOException e)
e.printStackTrace();
参考2:java中pdf转图片的方法
JAVA中实现pdf转图片可以通过第三方提供的架包,这里介绍几种常用的,可以根据自身需求选择使用。
一、icepdf。有收费版和开源版,几种方法里最推荐的。转换的效果比较好,能识别我手头文件中的中文,就是转换后可能字体的关系部分字间距有点宽。因为,字体支持是要收费的,所以转换的图片会带有官方的水印。去水印的方法可以查看另一篇文章:icepdf去水印方法
1、下载icepdf的架包,并导入项目中,这里用到4个,如下:
2、附上代码例子:
String filePath = "c:/test.pdf";
Document document = new Document();
document.setFile(filePath);
float scale = 2.5f;//缩放比例
float rotation = 0f;//旋转角度
for (int i = 0; i < document.getNumberOfPages(); i++)
BufferedImage image = (BufferedImage)
document.getPageImage(i, GraphicsRenderingHints.SCREEN, org.icepdf.core.pobjects.Page.BOUNDARY_CROPBOX, rotation, scale);
RenderedImage rendImage = image;
try
File file = new File("c:/iecPDF_" + i + ".png");
ImageIO.write(rendImage, "png", file);
catch (IOException e)
e.printStackTrace();
image.flush();
document.dispose();
例子中是pdf转png格式的,也可以将12、13行改成jpg,转出jpg格式的,但是从转换效果来看png的清晰度会相对较高。有个小技巧是12行改成jpg,但13行使用png,也就是转换成jpg格式但有png清晰度的图片。
二、pdfbox。转换效果还可以,能识别我手中文件大部分内容,有部分内容无法识别。
1、下载pdfbox的架包,并导入项目,这里用到2个,如下:
2、附上代码例子:
File file = new File("c:\\\\test.pdf");
try
PDDocument doc = PDDocument.load(file);
PDFRenderer renderer = new PDFRenderer(doc);
int pageCount = doc.getNumberOfPages();
for(int i=0;i<pageCount;i++)
BufferedImage image = renderer.renderImageWithDPI(i, 296);
// BufferedImage image = renderer.renderImage(i, 2.5f);
ImageIO.write(image, "PNG", new File("C:\\\\pdfbox_image.png"));
catch (IOException e)
e.printStackTrace();
例子中rederImageWithDPI的第二个参数为dpi分辨率单位,可根据需求调节大小,代码第八行提供了架包里另一种转图片的方法,第二个参数为缩放比。
三、jpedal。效果不太理想,貌似对中文支持不太好,下面的lgpl版本是开源版。
1、下载jpedal的架包,并导入项目中,如下:
2、附上代码例子:
PdfDecoder decode_pdf = new PdfDecoder(true);
try
decode_pdf.openPdfFile("c:\\\\test.pdf"); //file
// decode_pdf.openPdfFile("C:/jpedalPDF.pdf", "password"); //encrypted file
// decode_pdf.openPdfArray(bytes); //bytes is byte[] array with PDF
// decode_pdf.openPdfFileFromURL("http://www.mysite.com/jpedalPDF.pdf",false);
// decode_pdf.openPdfFileFromInputStream(in, false);
int start = 1, end = decode_pdf.getPageCount();
for(int i = start; i < end+1; i++)
BufferedImage img=decode_pdf.getPageAsImage(i);
try
ImageIO.write(img, "png", new File("C:\\\\jpedal_image.png"));
catch (IOException e)
e.printStackTrace();
decode_pdf.closePdfFile();
catch (PdfException e)
e.printStackTrace();
参考3:Java中PDF的转换(图片)与展示
来源:Java中PDF的转换(图片)与展示 - 简书 (jianshu.com)
解决的问题
有些时候我们需要在项目中展示PDF,但是直接在浏览器中加入PDF展示的插件,存在兼容性问题,某些浏览器显示效果不理想,所以我们可以将PDF转为图片,然后已图片的方式展示,效果很好。
那么怎么将PDF转为图片呢?有两种方式:
产品 | 特点 |
---|---|
Apache 的 PDF box | 免费;速度稍慢一点,但可以接受 |
E-iceblue 的 Spire.PDF for Java | 转换效果很好;速度快;功能强大,支持转多种格式;收费 |
Spire.PDF for Java 的转换效果很好,但是如果不购买,转换过后会添加一些水印文字
参考链接:https://www.cnblogs.com/Yesi/p/11233238.html
PDF Box的使用
<dependency>
<groupId>net.sf.cssbox</groupId>
<artifactId>pdf2dom</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.12</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox-tools</artifactId>
<version>2.0.12</version>
</dependency>
多页PDF生成多张图片
新建一个 PdfUtil 工具类
public class PdfUtil
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(PdfUtil.class);
/***
* PDF文件转PNG图片,全部页数
*
* @param pdfFilePath pdf完整路径
* @param dpi dpi越大转换后越清晰,相对转换速度越慢
*/
public static void pdf2Image(String pdfFilePath, int dpi)
File file = new File(pdfFilePath);
PDDocument pdDocument;
try
String imgPdfPath = file.getParent();
int dot = file.getName().lastIndexOf('.');
// 获取图片文件名
String imagePdfName = file.getName().substring(0, dot);
pdDocument = PDDocument.load(file);
PDFRenderer renderer = new PDFRenderer(pdDocument);
/* dpi越大转换后越清晰,相对转换速度越慢 */
PdfReader reader = new PdfReader(pdfFilePath);
int pages = reader.getNumberOfPages();
StringBuffer imgFilePath;
for (int i = 0; i < pages; i++)
String imgFilePathPrefix = imgPdfPath + File.separator + imagePdfName;
imgFilePath = new StringBuffer();
imgFilePath.append(imgFilePathPrefix);
imgFilePath.append("_");
imgFilePath.append((i + 1));
imgFilePath.append(".png");
File dstFile = new File(imgFilePath.toString());
BufferedImage image = renderer.renderImageWithDPI(i, dpi);
ImageIO.write(image, "png", dstFile);
log.info("PDF文档转PNG图片成功!");
catch (IOException e)
e.printStackTrace();
多页PDF组合成一张图片
public class PdfUtil
public static final int DEFAULT_DPI = 150;
/**
* pdf转图片
* 多页PDF会每页转换为一张图片,下面会有多页组合成一页的方法
*
* @param pdfFile pdf文件路径
* @param outPath 图片输出路径
* @param dpi 相当于图片的分辨率,值越大越清晰,但是转换时间变长
*/
public static void pdf2multiImage(String pdfFile, String outPath, int dpi)
if (ObjectUtil.isEmpty(dpi))
// 如果没有设置DPI,默认设置为150
dpi = DEFAULT_DPI;
try (PDDocument pdf = PDDocument.load(new FileInputStream(pdfFile)))
int actSize = pdf.getNumberOfPages();
List<BufferedImage> picList = Lists.newArrayList();
for (int i = 0; i < actSize; i++)
BufferedImage image = new PDFRenderer(pdf).renderImageWithDPI(i, dpi, ImageType.RGB);
picList.add(image);
// 组合图片
ImageUtil.yPic(picList, outPath);
catch (IOException e)
e.printStackTrace();
新建 ImageUtil 类
public class ImageUtil
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(ImageUtil.class);
/**
* 将宽度相同的图片,竖向追加在一起 ##注意:宽度必须相同
*
* @param picList 文件流数组
* @param outPath 输出路径
*/
public static void yPic(List<BufferedImage> picList, String outPath) // 纵向处理图片
if (picList == null || picList.size() <= 0)
log.info("图片数组为空!");
return;
try
// 总高度
int height = 0,
// 总宽度
width = 0,
// 临时的高度 , 或保存偏移高度
offsetHeight = 0,
// 临时的高度,主要保存每个高度
tmpHeight = 0,
// 图片的数量
picNum = picList.size();
// 保存每个文件的高度
int[] heightArray = new int[picNum];
// 保存图片流
BufferedImage buffer = null;
// 保存所有的图片的RGB
List<int[]> imgRgb = new ArrayList<int[]>();
// 保存一张图片中的RGB数据
int[] tmpImgRgb;
for (int i = 0; i < picNum; i++)
buffer = picList.get(i);
// 图片高度
heightArray[i] = offsetHeight = buffer.getHeight();
if (i == 0)
// 图片宽度
width = buffer.getWidth();
// 获取总高度
height += offsetHeight;
// 从图片中读取RGB
tmpImgRgb = new int[width * offsetHeight];
tmpImgRgb = buffer.getRGB(0, 0, width, offsetHeight, tmpImgRgb, 0, width);
imgRgb.add(tmpImgRgb);
// 设置偏移高度为0
offsetHeight = 0;
// 生成新图片
BufferedImage imageResult = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
for (int i = 0; i < picNum; i++)
tmpHeight = heightArray[i];
if (i != 0)
// 计算偏移高度
offsetHeight += tmpHeight;
// 写入流中
imageResult.setRGB(0, offsetHeight, width, tmpHeight, imgRgb.get(i), 0, width);
File outFile = new File(outPath);
// 写图片
ImageIO.write(imageResult, "png", outFile);
catch (Exception e)
e.printStackTrace();
参考4:使用Java将PDF文件转成图片
来源:使用Java将PDF文件转成图片 | IT瘾 (itindex.net)
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.ByteBuffer;
import java.nio.channels.FileChannel;
import javax.swing.SwingUtilities;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.sun.pdfview.PDFFile;
import com.sun.pdfview.PDFPage;
/**
* Created by David on 2016/11/15.
*/
public class Pdf2Pic
public static void setup() throws IOException
// load a pdf from a byte buffer
File file = new File("/Users/David/Downloads/testoss.pdf");
RandomAccessFile raf = new RandomAccessFile(file, "r");
FileChannel channel = raf.getChannel();
ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel
.size());
PDFFile pdffile = new PDFFile(buf);
System.out.println("页数: " + pdffile.getNumPages());
String getPdfFilePath = System.getProperty("user.dir")+File.separator+"pdfPicFile";
//目录不存在,则创建目录
File p=new File(getPdfFilePath);
if(!p.exists())
p.mkdir();
System.out.println("getPdfFilePath is :"+getPdfFilePath);
for (int i = 1; i <= pdffile.getNumPages(); i++)
// draw the first page to an image
PDFPage page = pdffile.getPage(i);
// get the width and height for the doc at the default zoom
Rectangle rect = new Rectangle(0, 0, (int) page.getBBox()
.getWidth(), (int) page.getBBox().getHeight());
// generate the image
Image img = page.getImage(rect.width, rect.height, // width &
// height
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( getPdfFilePath+File.separator + i + ".jpg"); // 输出到文件流
System.out.println("成功保存图片到 : " +getPdfFilePath+File.separator + i + ".jpg");
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(tag); // JPEG编码
out.close();
// show the image in a frame
// JFrame frame = new JFrame("PDF Test");
// frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// frame.add(new JLabel(new ImageIcon(img)));
// frame.pack();
// frame.setVisible(true);
public static void main(final String[] args)
SwingUtilities.invokeLater(new Runnable()
public void run()
try
Pdf2Pic.setup();
catch (IOException ex)
ex.printStackTrace();
);
pom.xml依赖配置(将附件中的该jar包上传到nexus内部仓库):
<dependency>
<groupId>com.sun.pdfview</groupId>
<artifactId>pdfrenderer</artifactId>
<version>0.9.0</version>
</dependency>
- 本文附件下载:
- PDFRenderer-0.9.0.jar (2 MB)
参考5:Java 将PDF 转为Word、图片、SVG、XPS、Html、PDF/A
来源:Java 将PDF 转为Word、图片、SVG、XPS、Html、PDF/A - 云+社区 - 腾讯云 (tencent.com)
本文将介绍通过Java编程来实现PDF文档转换的方法。包括:
- PDF转为Word
- PDF转为图片
- PDF转为Html
- PDF转为SVG 4.1 将PDF每一页转为单个的SVG 4.2 将一个包含多页的PDF文档转为一个SVG
- PDF转为XPS
- PDF转为PDF/A
使用工具:Free Spire.PDF for Java(免费版)
Jar文件获取及导入:
方法1:通过官网下载下载jar包。下载后,解压文件,并将lib文件夹下的Spire.Pdf.jar文件导入Java程序。
方法2:可通过maven仓库安装导入。参考导入方法
PDF 转Word
PdfDocument pdf = new PdfDocument("test.pdf");
pdf.saveToFile("ToWord.docx",FileFormat.DOCX);
PDF转图片
支持的图片格式包括Jpeg, Jpg, Png, Bmp, Tiff, Gif, EMF等。这里以保存为Png格式为例。
import com.spire.pdf.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class PDFtoimage
public static void main(String[] args) throws IOException
PdfDocument pdf = new PdfDocument("test.pdf");
BufferedImage image;
for(int i = 0; i< pdf.getPages().getCount();i++)
image = pdf.saveAsImage(i);
File file = new File( String.format("ToImage-img-%d.png", i));
ImageIO.write(image, "PNG", file);
pdf.close();
PDF转Html
PdfDocument pdf = new PdfDocument("test.pdf");
pdf.saveToFile("ToHTML.html", FileFormat.HTML);
PDF转SVG
//转为单个svg
PdfDocument pdf = new PdfDocument("test.pdf");
pdf.saveToFile("ToSVG.svg", FileFormat.SVG);
//多页pdf转为一个svg
PdfDocument pdf = new PdfDocument("sampe.pdf");
pdf.getConvertOptions().setOutputToOneSvg(true);
pdf.saveToFile("ToOneSvg.svg",FileFormat.SVG);
PDF 转XPS
PdfDocument pdf = new PdfDocument("test.pdf");
pdf.saveToFile("ToXPS.xps", FileFormat.XPS);
PDF转PDF/A
import com.spire.pdf.*;
import com.spire.pdf.graphics.PdfMargins;
import java.awt.geom.Dimension2D;
public class PDFtoPDFA
public static void main(String[]args)
//加载测试文档
PdfDocument pdf = new PdfDocument();
pdf.loadFromFile("test.pdf");
//转换为Pdf_A_1_B格式
PdfNewDocument newDoc = new PdfNewDocument();
newDoc.setConformance(PdfConformanceLevel.Pdf_A_1_B);
PdfPageBase page;
for ( int i=0;i< pdf.getPages().getCount();i++)
page = pdf.getPages().get(i);
Dimension2D size = page.getSize();
PdfPageBase p = newDoc.getPages().add(size, new PdfMargins(0));
page.createTemplate().draw(p, 0, 0);
//保存结果文件
newDoc.save("ToPDFA.pdf");
newDoc.close();
参考6:java实现pdf转图片
来源:java实现pdf转换图片 - pengsn - 博客园 (cnblogs.com)
一、需求
将PDF文档类转换成图片形式。
二、实现方式
2.1 pdfbox
PDDocument doc = null;
try
doc = PDDocument.load(sourceFile);
PDFRenderer renderer = new PDFRenderer(doc);
int pageCount = doc.getNumberOfPages();
for (int i = 0; i < pageCount; i++)
BufferedImage image = renderer.renderImageWithDPI(i, DPI); // 162.8
ImageIO.write(image, ConvertImageConst.JPG, new File(filepathNoSuffix + File.separator + i + ConvertImageConst.SUFFIX_JPG));
log.info("jpg_ok. space-time: , pageSize= ", (System.currentTimeMillis() - startTime), pageCount);
return pageCount;
catch (IOException e)
log.error("pdfDocumentRender IOException ", e);
catch (Error e)
log.error("pdfDocumentRender Error ", e);
finally
try
if (doc != null)
doc.close();
catch (IOException e)
log.error("pdfDocumentRender finally IOError ", e.getMessage());
lock.unlock();
2.2 ghostscript
gswin64 -dSAFER -dBATCH -dNOPAUSE -r300 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=jpeg -sOutputFile=test%03d.jpg 0002.pdf
命令:
gswin64 主程序
-params:
-sDEVICE=jpeg // jpeg格式
-sOutputFile=test%03d.jpg // 输出的图片名称 %03d 三位数字 %d 一位数字
0002.pdf //待转换的pdf文件
三、比较
实现方式 | 优点 | 缺点 |
pdfbox | maven引入既可开发 | 转换速度慢,且可能内存溢出 |
ghostscript | 转换速度快 | 依赖ghostscript插件 |
参考7:java实现pdf转图片
来源:Java实现PDF转图片_hxt的博客-CSDN博客_java pdf转图片
pdfbox转换后清晰度相对来说是比较高的
引入依赖:
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.20</version>
</dependency>
工具类:
public class PdfToImageUtil
/**
* dpi越大转换后越清晰,相对转换速度越慢
*/
private static final Integer DPI = 100;
/**
* 转换后的图片类型
*/
private static final String IMG_TYPE = "png";
/**
* PDF转图片
*
* @param fileContent PDF文件的二进制流
* @return 图片文件的二进制流
*/
public static List<byte[]> pdfToImage(byte[] fileContent) throws IOException
List<byte[]> result = new ArrayList<>();
try (PDDocument document = PDDocument.load(fileContent))
PDFRenderer renderer = new PDFRenderer(document);
for (int i = 0; i < document.getNumberOfPages(); ++i)
BufferedImage bufferedImage = renderer.renderImageWithDPI(i, DPI);
ByteArrayOutputStream out = new ByteArrayOutputStream();
ImageIO.write(bufferedImage, IMG_TYPE, out);
result.add(out.toByteArray());
return result;
参考8:java pdf转图片
来源:Java PDF转图片 - haxnt - 博客园 (cnblogs.com)
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency>
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import com.lowagie.text.pdf.PdfReader;
public class test1
public static void main(String[] args)
pdf2Image("D:/1.pdf", "D:/pdf", 130);
/***
* PDF文件转PNG图片,全部页数
*
* @param PdfFilePath pdf完整路径
* @param imgFilePath 图片存放的文件夹
* @param dpi dpi越大转换后越清晰,相对转换速度越慢
* @return
*/
public static void pdf2Image(String PdfFilePath, String dstImgFolder, int dpi)
File file = new File(PdfFilePath);
PDDocument pdDocument;
try
String imgPDFPath = file.getParent();
int dot = file.getName().lastIndexOf('.');
String imagePDFName = file.getName().substring(0, dot); // 获取图片文件名
String imgFolderPath = null;
if (dstImgFolder.equals(""))
imgFolderPath = imgPDFPath + File.separator + imagePDFName;// 获取图片存放的文件夹路径
else
imgFolderPath = dstImgFolder + File.separator + imagePDFName;
if (createDirectory(imgFolderPath))
pdDocument = PDDocument.load(file);
PDFRenderer renderer = new PDFRenderer(pdDocument);
/* dpi越大转换后越清晰,相对转换速度越慢 */
PdfReader reader = new PdfReader(PdfFilePath);
int pages = reader.getNumberOfPages();
StringBuffer imgFilePath = null;
for (int i = 0; i < pages; i++)
String imgFilePathPrefix = imgFolderPath + File.separator + imagePDFName;
imgFilePath = new StringBuffer();
imgFilePath.append(imgFilePathPrefix);
imgFilePath.append("_");
imgFilePath.append(String.valueOf(i + 1));
imgFilePath.append(".png");
File dstFile = new File(imgFilePath.toString());
BufferedImage image = renderer.renderImageWithDPI(i, dpi);
ImageIO.write(image, "png", dstFile);
System.out.println("PDF文档转PNG图片成功!");
else
System.out.println("PDF文档转PNG图片失败:" + "创建" + imgFolderPath + "失败");
catch (IOException e)
e.printStackTrace();
private static boolean createDirectory(String folder)
File dir = new File(folder);
if (dir.exists())
return true;
else
return dir.mkdirs();
以上是关于java做 pdf转换成图片 时出现Unknown CMap: UniGB-UCS2-H?急~的主要内容,如果未能解决你的问题,请参考以下文章
尝试在 Java 中生成非常大的 PDF 文件时出现 ***Error
pdf转换成PPt时出现乱码,比如说就是那些希腊字母显示不出来等,该怎么办?
mssql在JDBC通用更新时出现 不支持从 UNKNOWN 到 UNKNOWN 的转换。