• 【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 } 
  • 相关阅读:
    本站将进行有关《大道至简》的讨论~
    启动一个Rich Web Client的项目:Qomo OpenProject
    JavaScript面向对象的支持(1)
    从基础开始:Qomo OpenProject中的一些关键词(2)
    代码规范性与品质问题~
    任何想法的致命问题,并不在于没有实施条件,而在于根本不被实施
    再谈borland与MS对BUG的不同态度~
    善于使用资源的程序员才是好程序员
    伴随开发人员成长的问题:工程重要,还是算法重要?细节重要,还是架构重要?
    JavaScript面向对象的支持(2)
  • 原文地址:https://www.cnblogs.com/tankqiu/p/4254645.html
Copyright © 2020-2023  润新知