zoukankan      html  css  js  c++  java
  • 【使用Itext处理PDF文档(新建PDF文件、修改PDF文件、PDF中插入图片、将PDF文件转换为图片)】

    iText简介

    iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。 iText的安装非常方便,下载iText.jar文件后,只需要在系统的CLASSPATH中加入iText.jar的路径,在程序中就可以使用iText类库了。
     
    1、包的引用
     1 import java.io.FileNotFoundException;
     2 import java.io.FileOutputStream;
     3 import java.io.IOException;
     4 import java.net.MalformedURLException;
     5 import com.itextpdf.text.Document;
     6 import com.itextpdf.text.DocumentException;
     7 import com.itextpdf.text.Element;
     8 import com.itextpdf.text.Font;
     9 import com.itextpdf.text.Font.FontFamily;
    10 import com.itextpdf.text.Image;
    11 import com.itextpdf.text.PageSize;
    12 import com.itextpdf.text.Paragraph;
    13 import com.itextpdf.text.Phrase;
    14 import com.itextpdf.text.pdf.BaseFont;
    15 import com.itextpdf.text.pdf.ColumnText;
    16 import com.itextpdf.text.pdf.PdfContentByte;
    17 import com.itextpdf.text.pdf.PdfReader;
    18 import com.itextpdf.text.pdf.PdfStamper;
    19 import com.itextpdf.text.pdf.PdfWriter;

    2、创建PDF文件

      1 public void createPDF()
      2     {
      3         try
      4         {
      5             String RESULT = "F:\java56班\eclipse-SDK-4.2-win32\pdfiText.pdf";
      6             Document document = new Document();
      7             PdfWriter writer = PdfWriter.getInstance(document,
      8                     new FileOutputStream(RESULT));
      9             document.open();
     10             PdfContentByte canvas = writer.getDirectContentUnder();
     11             writer.setCompressionLevel(0);
     12             canvas.saveState(); // q
     13             canvas.beginText(); // BT
     14             canvas.moveText(36, 788); // 36 788 Td
     15             canvas.setFontAndSize(BaseFont.createFont(), 12); // /F1 12 Tf
     16             // canvas.showText("Hello World"); // (Hello World)Tj
     17             canvas.showText("你好"); // (Hello World)Tj
     18             canvas.endText(); // ET
     19             canvas.restoreState(); // Q
     20             document.close();
     21         } catch (FileNotFoundException e)
     22         {
     23             // TODO Auto-generated catch block
     24             e.printStackTrace();
     25         } catch (DocumentException e)
     26         {
     27             // TODO Auto-generated catch block
     28             e.printStackTrace();
     29         } catch (IOException e)
     30         {
     31             // TODO Auto-generated catch block
     32             e.printStackTrace();
     33         }
     34     }
     35 
     36     public void createPDF2()
     37     {
     38         try
     39         {
     40             String RESULT = "F:\java56班\eclipse-SDK-4.2-win32\pdfiText.pdf";
     41             Document document = new Document();
     42             PdfWriter writer = PdfWriter.getInstance(document,
     43                     new FileOutputStream(RESULT));
     44             document.open();
     45             writer.setCompressionLevel(0);
     46             // Phrase hello = new Phrase("Hello World");
     47             Phrase hello = new Phrase("你好");
     48             PdfContentByte canvas = writer.getDirectContentUnder();
     49             ColumnText.showTextAligned(canvas, Element.ALIGN_LEFT, hello, 200,
     50                     800, 0);
     51             document.close();
     52         } catch (FileNotFoundException e)
     53         {
     54             // TODO Auto-generated catch block
     55             e.printStackTrace();
     56         } catch (DocumentException e)
     57         {
     58             // TODO Auto-generated catch block
     59             e.printStackTrace();
     60         }
     61     }
     62 
     63     public void createPDF3()
     64     {
     65         try
     66         {
     67             String resource_jpg = "F:\java56班\eclipse-SDK-4.2-win32\1.png";//
     68             String RESULT = "F:\java56班\eclipse-SDK-4.2-win32\pdfiText.pdf";
     69             Paragraph p = new Paragraph("Foobar Film Festival", new Font(FontFamily.HELVETICA, 24));
     70             p.setAlignment(Element.ALIGN_CENTER);
     71             Document document = new Document();//
     72             PdfWriter writer = PdfWriter.getInstance(document,new FileOutputStream(RESULT));
     73             document.open();
     74             document.add(p);
     75             Image img = Image.getInstance(resource_jpg);
     76             img.setAbsolutePosition(
     77                     (PageSize.POSTCARD.getWidth() - img.getScaledWidth()) / 2,
     78                     (PageSize.POSTCARD.getHeight() - img.getScaledHeight()) / 2);
     79             
     80 //            img.setAbsolutePosition(0, 0);
     81             document.add(img);
     82             document.newPage();
     83             document.add(p);
     84             document.add(img);
     85             PdfContentByte over = writer.getDirectContent();
     86             over.saveState();
     87             float sinus = (float) Math.sin(Math.PI / 60);
     88             float cosinus = (float) Math.cos(Math.PI / 60);
     89             BaseFont bf = BaseFont.createFont();
     90             over.beginText();
     91             over.setTextRenderingMode(PdfContentByte.TEXT_RENDER_MODE_FILL_STROKE);
     92             over.setLineWidth(1.5f);
     93             over.setRGBColorStroke(0xFF, 0x00, 0x00);
     94             over.setRGBColorFill(0xFF, 0xFF, 0xFF);
     95             over.setFontAndSize(bf, 36);
     96             over.setTextMatrix(cosinus, sinus, -sinus, cosinus, 50, 324);
     97             over.showText("SOLD OUT");
     98             over.endText();
     99             over.restoreState();
    100             PdfContentByte under = writer.getDirectContentUnder();
    101             under.saveState();
    102             under.setRGBColorFill(0xFF, 0xD7, 0x00);
    103             under.rectangle(5, 5, PageSize.POSTCARD.getWidth() - 10,
    104                     PageSize.POSTCARD.getHeight() - 10);
    105             under.fill();
    106             under.restoreState();
    107             
    108             document.close();
    109         } catch (FileNotFoundException e)
    110         {
    111             // TODO Auto-generated catch block
    112             e.printStackTrace();
    113         } catch (DocumentException e)
    114         {
    115             // TODO Auto-generated catch block
    116             e.printStackTrace();
    117         } catch (MalformedURLException e)
    118         {
    119             // TODO Auto-generated catch block
    120             e.printStackTrace();
    121         } catch (IOException e)
    122         {
    123             // TODO Auto-generated catch block
    124             e.printStackTrace();
    125         }
    126     }

    3、在绝对位置插入图片

     1 public void addImageAbsolu()
     2     {
     3         try
     4         {
     5             String resource_jpg = "F:\java56班\eclipse-SDK-4.2-win32\1.png";//
     6             String RESULT = "F:\java56班\eclipse-SDK-4.2-win32\pdfiText.pdf";
     7             Document document = new Document();
     8             PdfWriter writer = PdfWriter.getInstance(document,new FileOutputStream(RESULT));
     9             document.open();
    10 //            PDPage page = (PDPage)doc.getDocumentCatalog().getAllPages().get( 0 );
    11             Image img = Image.getInstance(resource_jpg);
    12             img.setAbsolutePosition(
    13                     (PageSize.POSTCARD.getWidth() - img.getScaledWidth()) / 2,
    14                     (PageSize.POSTCARD.getHeight() - img.getScaledHeight()) / 2);
    15             
    16 //            img.setAbsolutePosition(0, 0);
    17             document.add(img);
    18             document.close();
    19         } catch (FileNotFoundException e)
    20         {
    21             // TODO Auto-generated catch block
    22             e.printStackTrace();
    23         } catch (DocumentException e)
    24         {
    25             // TODO Auto-generated catch block
    26             e.printStackTrace();
    27         } catch (MalformedURLException e)
    28         {
    29             // TODO Auto-generated catch block
    30             e.printStackTrace();
    31         } catch (IOException e)
    32         {
    33             // TODO Auto-generated catch block
    34             e.printStackTrace();
    35         }
    36     }
    37     
    38     public void addImageAbsolu2()
    39     {
    40         try
    41         {
    42             String resource_jpg = "F:\java56班\eclipse-SDK-4.2-win32\1.png";//
    43             String result = "F:\java56班\eclipse-SDK-4.2-win32\pdfiText.pdf";
    44             String result2 = "F:\java56班\eclipse-SDK-4.2-win32\pdfiText2.pdf";
    45             //创建一个pdf读入流 
    46             PdfReader reader = new PdfReader(result);  
    47             //根据一个pdfreader创建一个pdfStamper.用来生成新的pdf. 
    48             PdfStamper stamper = new PdfStamper(reader,new FileOutputStream(result2));
    49             //获得pdfstamper在当前页的上层打印内容.也就是说 这些内容会覆盖在原先的pdf内容之上. 
    50             PdfContentByte over = stamper.getOverContent(0); 
    51             
    52             
    53             Document document = new Document();
    54             PdfWriter writer = PdfWriter.getInstance(document,new FileOutputStream(result));
    55             document.open();
    56 //            PDPage page = (PDPage)doc.getDocumentCatalog().getAllPages().get( 0 );
    57             Image img = Image.getInstance(resource_jpg);
    58             img.setAbsolutePosition(0, 0);
    59             document.add(img);
    60             document.close();
    61         } catch (FileNotFoundException e)
    62         {
    63             // TODO Auto-generated catch block
    64             e.printStackTrace();
    65         } catch (DocumentException e)
    66         {
    67             // TODO Auto-generated catch block
    68             e.printStackTrace();
    69         } catch (MalformedURLException e)
    70         {
    71             // TODO Auto-generated catch block
    72             e.printStackTrace();
    73         } catch (IOException e)
    74         {
    75             // TODO Auto-generated catch block
    76             e.printStackTrace();
    77         }
    78     }

    4、PDF文件转换为图片

    package demo1;
    
    import java.awt.image.BufferedImage;
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.FileOutputStream;
    import java.io.OutputStream;
    
    import javax.imageio.ImageIO;
    import javax.imageio.stream.ImageOutputStream;
    
    import org.apache.pdfbox.pdmodel.PDDocument;
    import org.apache.pdfbox.pdmodel.PDPage;
    import org.apache.pdfbox.util.ImageIOUtil;
    
    import com.itextpdf.text.pdf.PdfReader;
    import com.itextpdf.text.pdf.PdfStamper;
    
    public class PdfPageToImg
    {
    
        /**
         * PDFBOX转图片
         * 
         * @param pdfUrl
         *            pdf的路径
         * @param imgTempUrl
         *            图片输出路径
         */
        public static void pdfToImage(String pdfUrl, String imgTempUrl)
        {
            try
            {
                // 读入PDF
                PdfReader pdfReader = new PdfReader(pdfUrl);
                // 计算PDF页码数
                int pageCount = pdfReader.getNumberOfPages();
                // 循环每个页码
                for (int i = pageCount; i >= pdfReader.getNumberOfPages(); i--)
                {
                    ByteArrayOutputStream out = new ByteArrayOutputStream();
                    PdfStamper pdfStamper = null;
                    PDDocument pdDocument = null;
    
                    pdfReader = new PdfReader(pdfUrl);
                    pdfReader.selectPages(String.valueOf(i));
                    pdfStamper = new PdfStamper(pdfReader, out);
                    pdfStamper.close();
                    // 利用PdfBox生成图像
                    pdDocument = PDDocument.load(new ByteArrayInputStream(out
                            .toByteArray()));
                    OutputStream outputStream = new FileOutputStream(imgTempUrl
                            + "ImgName" + "-" + i + ".bmp");
    
                    ImageOutputStream output = ImageIO
                            .createImageOutputStream(outputStream);
                    PDPage page = (PDPage) pdDocument.getDocumentCatalog()
                            .getAllPages().get(0);
                    BufferedImage image = page.convertToImage(
                            BufferedImage.TYPE_INT_RGB, 96);
                    ImageIOUtil.writeImage(image, "bmp", outputStream, 96);
                    if (output != null)
                    {
                        output.flush();
                        output.close();
                    }
                    pdDocument.close();
                }
            } catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    
        public static void main(String[] args)
        {
            String pdfUrl = "F:\java56班\eclipse-SDK-4.2-win32\iText入门基础教程[2].pdf";
            String imgTempUrl = "F:\java56班\eclipse-SDK-4.2-win32\img\";
            pdfToImage(pdfUrl, imgTempUrl);
        }
    }

    5、图片集转换为PDF文件

     1 package demo1;
     2 
     3 import java.io.File;
     4 import java.io.FileOutputStream;
     5 import java.io.IOException;
     6 import com.itextpdf.text.Document;
     7 import com.itextpdf.text.DocumentException;
     8 import com.itextpdf.text.Image;
     9 import com.itextpdf.text.Rectangle;
    10 import com.itextpdf.text.pdf.PdfWriter;
    11 
    12 public class ImgToPDF
    13 {
    14 
    15     /**
    16      * 
    17      * @param destPath
    18      *            生成pdf文件的路劲
    19      * @param images
    20      *            需要转换的图片路径的数组
    21      * @throws IOException
    22      * @throws DocumentException
    23      */
    24     public static void imagesToPdf(String destPath, String imagesPath)
    25     {
    26         try
    27         {
    28             // 第一步:创建一个document对象。
    29             Document document = new Document();
    30             document.setMargins(0, 0, 0, 0);
    31             // 第二步:
    32             // 创建一个PdfWriter实例,
    33             PdfWriter.getInstance(document, new FileOutputStream(destPath));
    34             // 第三步:打开文档。
    35             document.open();
    36             // 第四步:在文档中增加图片。
    37             File files = new File(imagesPath);
    38             String[] images = files.list();
    39             int len = images.length;
    40 
    41             for (int i = 0; i < len; i++)
    42             {
    43                 if (images[i].toLowerCase().endsWith(".bmp"))
    44                 {
    45                     String temp = imagesPath + "\" + images[i];
    46                     Image img = Image.getInstance(temp);
    47                     img.setAlignment(Image.ALIGN_CENTER);
    48                     // 根据图片大小设置页面,一定要先设置页面,再newPage(),否则无效
    49                     document.setPageSize(new Rectangle(img.getWidth(), img
    50                             .getHeight()));
    51                     document.newPage();
    52                     document.add(img);
    53                 }
    54             }
    55             // 第五步:关闭文档。
    56             document.close();
    57         } catch (Exception e)
    58         {
    59             // TODO Auto-generated catch block
    60             e.printStackTrace();
    61         }
    62     }
    63 
    64     public static void main(String[] args)
    65     {
    66         String destPath = "F:\java56班\eclipse-SDK-4.2-win32\img\imagesToPdf.pdf";
    67         String imagesPath = "F:\java56班\eclipse-SDK-4.2-win32\img\";
    68         imagesToPdf(destPath, imagesPath);
    69     }
    70 
    71 }

    2015-01-26

     
  • 相关阅读:

    php多版本环境变量设置
    vagrantbox 磁盘扩容
    # Csv数据导入导出
    php把数组写入文件
    log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging.LogFactory).
    springmvc 多个拦截器执行的顺序
    yum 源修改
    连接(JOIN)运算
    SQL基本概述
  • 原文地址:https://www.cnblogs.com/tankqiu/p/4251561.html
Copyright © 2011-2022 走看看