zoukankan      html  css  js  c++  java
  • 利用itext生成pdf的简单例子

    一、itext简介

    iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。

    iText的安装非常方便,在http://www.lowagie.com/iText/download.html网站上下载iText.jar文件后,只需要在系统的CLASSPATH中加入iText.jar的路径,在程序中就可以使用iText类库了

    声明:本博客用到iText版本为7.0.2版本。

    二 、生成简单的pdf文件

    1.先生成一个文档的文件

    //其中fileName为所要创建pdf文件的路径。

    public static OutputStream createFile(String fileName) {

    File file = new File(fileName);

    //创建一个文件之前判断他的父路径的文件夹是否存在,不存在需要创建

    if (!new File(file.getParent()).exists())

    new File(file.getParent()).mkdirs();

    try {

    //创建该文件夹
    file.createNewFile();
    } catch (IOException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    }

    //获取所要创建pdf的文件的输出流

    OutputStream os = null;
    try {
    os = new FileOutputStream(file);
    } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    return os;

    }

    2.创建一个document的文档对象.

     2.1 

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

      PdfWriter pdfWriter=new PdfWriter(createFile("你所要创建的pdf文件路径"));

    2.2创建pdfDocument的对象与Writer的对象关联

      PdfDocument pdfDocument = new PdfDocument(pdfWriter);

    2.3设定创建pdf的纸张大小

      PageSize pageSize = PageSize.A4;

    2.4创建Document的对象

      Document document = new Document(pdfDocument, pageSize);

    三、添加内容

    // 设定标题居中显示

    float w = pageSize.getWidth() - document.getLeftMargin() - document.getRightMargin();
    List<TabStop> tabstops = new ArrayList();
    tabstops.add(new TabStop(w / 2, TabAlignment.CENTER));
    tabstops.add(new TabStop(w, TabAlignment.LEFT));

    // 段落
    Paragraph p = new Paragraph();
    p.addTabStops(tabstops);
    p.add(new Tab()).add("Text in the middle").add(new Tab());
    p.add(new Tab()).add("How To Create An PDF File?").add(new Tab());

    document.add(p);

    document.flush();

    //关闭document

    document.close();

    三、对中文的处理

    1.对于中文的处理需要我添加一个itext-asian-5.2.0.jar包,可以对中文进行处理。而你可能下载不能是这个版本,可能会引起错误的。

    一下是对之前版本的处理:

    假如你加入的iTextAsian.jar的版本为5.0.6;会 出现异常 Font 'STSong-Light' with 'UniGB-UCS2-H'

      我使用的是iText 5.0.6 加入了iTextAsian.jar就报错.

      com.itextpdf.text.DocumentException: Font 'STSongStd-Light' with 'UniGB-UCS2-H' is not recognized.

      参考博客:x

      找的原因和解决方法:

      原因:iText5以上就改了命名空间了.是 com/itextpdf/text/pdf/fonts/

      但是iTextAsian还没有改.他的命名空间是 com/lowagie /text/pdf/fonts/

      所以报错..

      解决方法.:

      1.用winrar解压iTextAsian.jar

      2. 将com文件夹下面的lowagie 修改为itextpdf .

      3.进入cmd . 切换到iTextAsian目录.

      4.执行命令 jar cvf iTextAsian.jar com/itextpdf/text/pdf/fonts/*

      5.将生成的iTextAsian.jar文件替换原来的.

      问题解决.

     //解决中文的代码:

    PdfFont font = null;
    try {
    font = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H", false);
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    然后在段落中设定pdf字体

    // 段落
    Paragraph p = new Paragraph();
    p.setFont(font);
    p.addTabStops(tabstops);
    p.add(new Tab()).add("我们很好的快来的").add(new Tab());
    p.add("您好!");

  • 相关阅读:
    461. Hamming Distance
    342. Power of Four
    326. Power of Three
    368. Largest Divisible Subset java solutions
    95. Unique Binary Search Trees II java solutions
    303. Range Sum Query
    160. Intersection of Two Linked Lists java solutions
    88. Merge Sorted Array java solutions
    67. Add Binary java solutions
    14. Longest Common Prefix java solutions
  • 原文地址:https://www.cnblogs.com/git-niu/p/6898907.html
Copyright © 2011-2022 走看看