itext的学习使用

来源:互联网 发布:在淘宝买的机票怎么取 编辑:程序博客网 时间:2024/05/21 08:59

本文参考链接:http://blog.csdn.net/wanghuan203/article/details/9112473

http://www.myexception.cn/java-other/2041555.html

一、iText简介

iText是用于生成PDF文档的一个Java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件,也可以生成二维码和条形码。

二、Demo示例

用iText生成PDF文档需要5个步骤: 

  ①建立com.itextpdf.text.Document对象的实例。

        Document document= new Document(); 

  ②建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中。

        PDFWriter.getInstance(document,new FileOutputStream("ITextTest.pdf")); 

  ③打开文档。

        document.open(); 

  ④向文档中添加内容。

        document.add(newParagraph("IText  Test")); 

  ⑤关闭文档。

        document.close(); 

  通过上面的5个步骤,就能产生一个ITextTest.PDF的文件,文件内容为"ITextTest"。代码如下:

  1. importjava.io.FileOutputStream;  
  2. importcom.itextpdf.text.BaseColor;  
  3. importcom.itextpdf.text.Document;  
  4. importcom.itextpdf.text.Element;  
  5. importcom.itextpdf.text.Font;  
  6. importcom.itextpdf.text.Paragraph;  
  7. importcom.itextpdf.text.Rectangle;  
  8. importcom.itextpdf.text.pdf.BaseFont;  
  9. importcom.itextpdf.text.pdf.PdfPTable;  
  10. importcom.itextpdf.text.pdf.PdfWriter;  
  11.    
  12. public class ToPDF{  
  13.        // 表头  
  14.        public static final String[] tableHeader= { "姓名""性别""年龄",  
  15.                      "学院""专业""年级"};  
  16.    
  17.        // 数据表字段数  
  18.        private static final int colNumber = 6;  
  19.    
  20.        // 表格的设置  
  21.        private static final int spacing = 2;  
  22.    
  23.        // 表格的设置  
  24.        private static final int padding = 2;  
  25.    
  26.        // 导出Pdf文挡  
  27.        public static void exportPdfDocument() {  
  28.               // 创建文Pdf文挡50, 50, 50,50左右上下距离  
  29.               Document document = newDocument(new Rectangle(15002000), 505050,  
  30.                             50);  
  31.               try {  
  32.                      //使用PDFWriter进行写文件操作  
  33.                      PdfWriter.getInstance(document,new FileOutputStream(  
  34.                                    "d:\\学生信息.pdf"));  
  35.                      document.open();  
  36.                      // 中文字体  
  37.                      BaseFont bfChinese =BaseFont.createFont("STSong-Light",  
  38.                                    "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);  
  39.                      Font fontChinese = newFont(bfChinese, 12, Font.NORMAL);  
  40.                      // 创建有colNumber(6)列的表格  
  41.                      PdfPTable datatable = newPdfPTable(colNumber);  
  42.                      //定义表格的宽度  
  43.                      int[] cellsWidth = { 82,2853 };  
  44.                      datatable.setWidths(cellsWidth);  
  45.                      // 表格的宽度百分比  
  46.                      datatable.setWidthPercentage(100);  
  47.                      datatable.getDefaultCell().setPadding(padding);  
  48.                      datatable.getDefaultCell().setBorderWidth(spacing);  
  49.                      //设置表格的底色  
  50.                      datatable.getDefaultCell().setBackgroundColor(BaseColor.GREEN);  
  51.                      datatable.getDefaultCell().setHorizontalAlignment(  
  52.                                    Element.ALIGN_CENTER);  
  53.                      // 添加表头元素  
  54.                      for (int i = 0; i <colNumber; i++) {  
  55.                             datatable.addCell(newParagraph(tableHeader[i], fontChinese));  
  56.                      }  
  57.                      // 添加子元素  
  58.                      for (int i = 0; i <colNumber; i++) {  
  59.                             datatable.addCell(newParagraph(tableHeader[i], fontChinese));  
  60.                      }  
  61.                      document.add(datatable);  
  62.               } catch (Exception e) {  
  63.                      e.printStackTrace();  
  64.               }  
  65.               document.close();  
  66.        }  
  67.    
  68.        public static void main(String[] args)throws Exception {  
  69.               exportPdfDocument();  
  70.        }  
  71.    
  72. }  
 

另外使用itext可以生成条形码和二维码 示例如下

条形码相关代码: 

1.String strInfo="9009090909";  2.          3.int barCodeWidth=150;  4.int barCodeHeight=60;  5.int HEIGHT_SPACE = 20;     6.          7.//图片宽度     8.int imageWidth = barCodeWidth;     9.// 图片高度     10.int imageHeight = barCodeHeight + HEIGHT_SPACE ;    11.          12.BufferedImage img = new BufferedImage(imageWidth, imageHeight,BufferedImage.TYPE_INT_RGB);  13.  14.Graphics2D g = (Graphics2D) img.getGraphics();   15.g.fillRect(0, 0, imageWidth, imageHeight);   16.  17.Font font = new java.awt.Font("", java.awt.Font.PLAIN, 12);   18.          19.Barcode128 barcode128 = new Barcode128();  20.          21.FontRenderContext fontRenderContext = g.getFontRenderContext();   22.          23.//条形码(文字)的高度     24.int stringHeight = (int) font.getStringBounds("",fontRenderContext).getHeight();     25.// 图片横坐标开始位置     26.int startX = 0;     27.// 图片纵坐标开始位置     28.int imageStartY = 0;     29.int stringStartY = imageHeight-8;// 条形码(文字)开始位置   30.          31.int codeWidth = (int) font.getStringBounds(strInfo, fontRenderContext).getWidth();  32.barcode128.setCode(strInfo);  33.java.awt.Image codeImg = barcode128.createAwtImage(Color.black, Color.white);  34.  35.g.drawImage(codeImg, startX, imageStartY, barCodeWidth, barCodeHeight, Color.white, null);  36.  37.//为图片添加条形码(文字),位置为条形码图片的下部居中  38.AttributedString ats = new AttributedString(strInfo);   39.ats.addAttribute(TextAttribute.FONT, font, 0, strInfo.length());   40.AttributedCharacterIterator iter = ats.getIterator();  41.  42.// 设置条形码(文字)的颜色    43. g.setColor(Color.BLACK);     44.// 绘制条形码(文字)     45.g.drawString(iter, startX + (barCodeWidth - codeWidth) / 2, stringStartY);   46.g.dispose();   47.  48.ImageIO.write(img, "PNG",new File("D:\\33333.png"));  

二维码相关代码:

1.String strInfo="9009090909";  2.  3.BarcodePDF417 barcodePDF417 = new BarcodePDF417();  4.  5.barcodePDF417.setText(strInfo.getBytes("GBK"));  6.  7.//计算公式为:(17 * codeColumns +3)+18  8.//得到的这个值,正是二维码图片的宽度  9.barcodePDF417.setCodeColumns(7);  10.//二维码的内容也就是setText的值,内容越多,高度也会变高  11.//是一个动态的高  12.barcodePDF417.setYHeight(2);  13.barcodePDF417.setOptions(BarcodePDF417.PDF417_FIXED_COLUMNS | BarcodePDF417.PDF417_USE_ERROR_LEVEL);  14.  15.java.awt.Image pdfImg = barcodePDF417.createAwtImage(Color.black, Color.white);  16.  17.BufferedImage img = new BufferedImage( pdfImg.getWidth(null),pdfImg.getHeight(null), BufferedImage.TYPE_INT_RGB);  18.  19.Graphics g = img.createGraphics();  20.g.drawImage(pdfImg, 0, 0, Color.WHITE, null);  21.g.dispose();   22.  23.ImageIO.write(img, "PNG",new File("D:\\33333.png"));  


 
0 0
原创粉丝点击