Java实现pdf转化为png图片
2014-12-22 11:24
1031 查看
从https://java.net/projects/pdf-renderer下载最新的PDFRenderer-0.9.1.jar
Java实现代码为:
追踪源码,看会调用微软的一些绘图特性,具体不明白,放弃。
选用JPedal实现pdf转化为png图片。在http://sourceforge.net/projects/jpedal/下载jpedal_lgpl.jar
java实现代码:
Java实现代码为:
package com.hq.png; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import java.io.File; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import javax.imageio.ImageIO; import com.sun.pdfview.PDFFile; import com.sun.pdfview.PDFPage; import com.sun.pdfview.PDFRenderer; public class TestViewPdf { public static void main(String[] args) { new TestViewPdf().Pdf_Png(1); } public void Pdf_Png(int pageNumber) { int pagen = pageNumber; //File file = new File("/home/develop/xq/P9.pdf"); File file = new File("d:/GT_24.pdf"); PDFFile pdffile = null; // set up the PDF reading try { RandomAccessFile raf = new RandomAccessFile(file, "r"); FileChannel channel = raf.getChannel(); ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size()); pdffile = new PDFFile(buf); } catch (Exception e) { e.printStackTrace(); } if (pagen < pdffile.getNumPages()) { return; } // print 出该 pdf 文档的页数 System.out.println(pdffile.getNumPages()); // 设置将第 pagen 页生成 png 图片 PDFPage page = pdffile.getPage(pagen); // create and configure a graphics object int width = (int) page.getBBox().getWidth(); int height = (int) page.getBBox().getHeight(); BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); Graphics2D g2 = img.createGraphics(); //g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // do the actual drawing PDFRenderer renderer = new PDFRenderer(page, g2, new Rectangle(0, 0, width, height), null, Color.WHITE); try { page.waitForFinish(); } catch (Exception e) { e.printStackTrace(); } renderer.run(); g2.dispose(); try { //ImageIO.write(img, "png", new File("/home/develop/xq/123.png")); ImageIO.write(img, "png", new File("d:/123.png")); } catch (Exception e) { e.printStackTrace(); } } }该程序在windows下运行正常,在linux下报空指针。
java.lang.NullPointerException at com.sun.pdfview.font.TTFFont.getOutline(TTFFont.java:198) at com.sun.pdfview.font.CIDFontType2.getOutline(CIDFontType2.java:270) at com.sun.pdfview.font.OutlineFont.getGlyph(OutlineFont.java:130) at com.sun.pdfview.font.PDFFont.getCachedGlyph(PDFFont.java:437) at com.sun.pdfview.font.PDFFontEncoding.getGlyphFromCMap(PDFFontEncoding.java:155) at com.sun.pdfview.font.PDFFontEncoding.getGlyphs(PDFFontEncoding.java:115) at com.sun.pdfview.font.PDFFont.getGlyphs(PDFFont.java:403) at com.sun.pdfview.PDFTextFormat.doText(PDFTextFormat.java:269) at com.sun.pdfview.PDFTextFormat.doText(PDFTextFormat.java:301) at com.sun.pdfview.PDFParser.iterate(PDFParser.java:761) at com.sun.pdfview.BaseWatchable.run(BaseWatchable.java:101) at java.lang.Thread.run(Thread.java:662)
追踪源码,看会调用微软的一些绘图特性,具体不明白,放弃。
选用JPedal实现pdf转化为png图片。在http://sourceforge.net/projects/jpedal/下载jpedal_lgpl.jar
java实现代码:
package com.hq.png; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import org.jpedal.PdfDecoder; import org.jpedal.exception.PdfException; import org.jpedal.fonts.FontMappings; public class JPedal { public static void main(String[] args) throws IOException, PdfException, InterruptedException { /**instance of PdfDecoder to convert PDF into image*/ PdfDecoder decode_pdf = new PdfDecoder(true); /**set mappings for non-embedded fonts to use*/ FontMappings.setFontReplacements(); /**open the PDF file - can also be a URL or a byte array*/ try { decode_pdf.openPdfFile("/home/user/develop/xq/P9.pdf"); //file //decode_pdf.openPdfFile("C:/myPDF.pdf", "password"); //encrypted file //decode_pdf.openPdfArray(bytes); //bytes is byte[] array with PDF //decode_pdf.openPdfFileFromURL("http://www.mysite.com/myPDF.pdf",false); /**get page 1 as an image*/ //page range if you want to extract all pages with a loop int start = 1, end = decode_pdf.getPageCount(); for(int i=start;i<end+1;i++){ BufferedImage img=decode_pdf.getPageAsImage(i); ImageIO.write(img, "png", new File("/home/user/develop/xq/123.png")); } /**close the pdf file*/ decode_pdf.closePdfFile(); } catch (PdfException e) { e.printStackTrace(); } } }
相关文章推荐
- java将图片缩放实现类(能将jpg、bmp、png、gif图片文件,进行等比或非等比的大小转换)
- java实现MsOffice文档向pdf转化之OpenOffice软件
- java实现图片转化为字符图片--统计字符所占的面积
- PDF转图片Java实现
- Java 多线程拷贝文件夹并调用tinyPng算法接口压缩图片实现(生产消费变种)
- 将PPT转化为PDF我的JAVA代码实现!
- Java使用wkhtmltox实现HTML代码生成PDF文档或者图片
- java实现图片转化为字符图片--最终代码
- Java实现emf图片自己留转png(jpg)图片字节流
- Java 实现 pdf文件添加 图片水印 itextpdf 5.5.2
- 一般PNG图片压缩的Java实现
- java实现图片转化为字节流,字节流还原成图片
- 一般PNG图片压缩的Java实现
- java实现pdf转图片pdf
- Java 转换png jpg gif格式图片的相互转换的实现
- java实现MsOffice文档向pdf文档转化
- java实现base64字符串转换png图片
- java 将PDF 转化为图片
- java利用wkhtmltopdf实现html转化pdf
- Java使用wkhtmltox实现HTML代码生成PDF文档或者图片