【PDF单页转化为图片输出 注意:英文或图片类的PDF可转化,中文抛异常】
1 public static void main(String[] args) throws IOException 2 { 3 /** 4 * PDF单页转化为图片输出 注意:英文或图片类的PDF可转化,中文抛异常 5 */ 6 PDDocument doc; 7 try 8 { 9 String inputFile = "F:\\java56班\\eclipse-SDK-4.2-win32\\iText入门基础教程[2].pdf"; 10 String imagepath = "F:\\java56班\\eclipse-SDK-4.2-win32\\img\\"; 11 doc = PDDocument.load(inputFile); 12 List pages = doc.getDocumentCatalog().getAllPages(); 13 if (pages.size() > 0) 14 { 15 for (int i = 0; i < pages.size(); i++) 16 { 17 PDPage page = (PDPage) pages.get(i); 18 BufferedImage image = page.convertToImage(); 19 File file = new File(imagepath + "pdf_to_jpg_test_" + i + ".jpg"); 20 ImageIO.write(image, "jpg", file); 21 } 22 } 23 } catch (IOException e) 24 { 25 e.printStackTrace(); 26 } 27 28 }
PDF单页转化为图片输出 注意:英文或图片类的PDF可转化,中文抛异常
1 package demo2; 2 3 /** 4 * authory kingviker 5 * time : 2012-12-12 6 */ 7 import java.io.FileOutputStream; 8 import java.io.IOException; 9 10 import com.itextpdf.text.DocumentException; 11 import com.itextpdf.text.Font; 12 import com.itextpdf.text.Image; 13 import com.itextpdf.text.pdf.BaseFont; 14 import com.itextpdf.text.pdf.PdfArray; 15 import com.itextpdf.text.pdf.PdfContentByte; 16 import com.itextpdf.text.pdf.PdfDictionary; 17 import com.itextpdf.text.pdf.PdfName; 18 import com.itextpdf.text.pdf.PdfObject; 19 import com.itextpdf.text.pdf.PdfReader; 20 import com.itextpdf.text.pdf.PdfStamper; 21 22 public class AddContentToPDF { 23 24 //http://summerbell.iteye.com/blog/366720 25 26 //http://www.cnblogs.com/lqminn/archive/2012/12/11/2813832.html 27 public static void main(String[] args) throws IOException, DocumentException { 28 29 String resource_jpg = "F:\\java56班\\eclipse-SDK-4.2-win32\\1.jpg";// 30 String result = "F:\\java56班\\eclipse-SDK-4.2-win32\\陈师曾印谱.pdf"; 31 String result2 = "F:\\java56班\\eclipse-SDK-4.2-win32\\pdfiText2.pdf"; 32 //创建一个pdf读入流 33 PdfReader reader = new PdfReader(result); 34 //根据一个pdfreader创建一个pdfStamper.用来生成新的pdf. 35 PdfStamper stamper = new PdfStamper(reader, 36 new FileOutputStream(result2)); 37 38 //这个字体是itext-asian.jar中自带的 所以不用考虑操作系统环境问题. 39 40 //http://summerbell.iteye.com/blog/366720 41 BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); // set font 42 //baseFont不支持字体样式设定.但是font字体要求操作系统支持此字体会带来移植问题. 43 Font font = new Font(bf,10); 44 font.setStyle(Font.BOLD); 45 font.getBaseFont(); 46 //页数是从1开始的 47 for (int i=1; i<=reader.getNumberOfPages(); i++){ 48 49 //获得pdfstamper在当前页的上层打印内容.也就是说 这些内容会覆盖在原先的pdf内容之上. 50 PdfContentByte over = stamper.getOverContent(i); 51 //用pdfreader获得当前页字典对象.包含了该页的一些数据.比如该页的坐标轴信息. 52 PdfDictionary p = reader.getPageN(i); 53 //拿到mediaBox 里面放着该页pdf的大小信息. 54 PdfObject po = p.get(new PdfName("MediaBox")); 55 System.out.println(po.isArray()); 56 //po是一个数组对象.里面包含了该页pdf的坐标轴范围. 57 PdfArray pa = (PdfArray) po; 58 System.out.println(pa.size()); 59 //看看y轴的最大值. 60 System.out.println(pa.getAsNumber(pa.size()-1)); 61 //开始写入文本 62 over.beginText(); 63 //设置字体和大小 64 over.setFontAndSize(font.getBaseFont(), 10); 65 //设置字体的输出位置 66 over.setTextMatrix(107, 540); 67 //要输出的text 68 String text = "使用时需要在系统的环境变量Path中加入iText的路劲,在程序中就可以使用了" + 69 "用iText生成PDF文档需要5个步骤:"; 70 over.showText("我要加[终稿]字样 " + i); 71 over.endText(); 72 //创建一个image对象. 73 Image image = Image.getInstance(resource_jpg); 74 //设置image对象的输出位置pa.getAsNumber(pa.size()-1).floatValue() 是该页pdf坐标轴的y轴的最大值 75 image.setAbsolutePosition(0,pa.getAsNumber(pa.size()-1).floatValue()-100);//0, 0, 841.92, 595.32 76 over.addImage(image); 77 78 //画一个圈. 79 over.setRGBColorStroke(0xFF, 0x00, 0x00); 80 over.setLineWidth(5f); 81 over.ellipse(250, 450, 350, 550); 82 over.stroke(); 83 } 84 85 stamper.close(); 86 87 } 88 }