zoukankan      html  css  js  c++  java
  • 使用iText操作pdf文件

    使用iText操作pdf文件

            前段时间写过一篇文章《java读取pdf文件的内容》,pig0045给我回复,说可以直接利用iText搞定,我很感激,因为以前处理pdf文件并不多,对这块相关组件并不了解,pig0045给我介绍了一个新的方法,谢谢!欣喜之余,马上google了一把iText,发现iText在生成pdf文件方面功能很强大,而在读取pdf文件内容方面似乎涉及并不多(也许是我没查到,有不同观点的朋友,大家探讨一下阿)。
            同时我也查了下java领域针对pdf的相关组件,发现有很多开源的东东,都可以操作pdf,恩,很不错的。大致介绍几个:xpdf,iText,PDFBox,感兴趣的话,大家可以自己查一下。
            好了,回到文章主题,查了下iText后,我也去稍微看了下相关的api,做了一些简单的demo,虽然网上相关介绍很多,但是自己写一遍程序再用自己的语言记录下来,理解会更为深刻一点。
    准备工作:到http://www.lowagie.com/iText/下载最新的iText的jar包,并将其放到classpath中。
    一.Hello World
    iText创建pdf文件是十分简单的,为了演示其极其简单性,我们做一个HelloWorld吧,让大家体验一下。
    在这个pdf文件中,我们只显示一句话"Hello World",实现方式如下:
            // 创建一个文档对象
            Document doc = new Document();
            
    try {
                
    // 定义输出位置并把文档对象装入输出对象中
                PdfWriter.getInstance(doc, new FileOutputStream("/root/hello.pdf"));
                
    // 打开文档对象
                doc.open();
                
    // 加入文字“Hello World”
                doc.add(new Paragraph("HelloWorld"));
                
    // 关闭文档对象,释放资源
                doc.close();
            }
     catch (FileNotFoundException e) {
                e.printStackTrace();
            }
     catch (DocumentException e) {
                e.printStackTrace();
            }
    怎么样?很简单吧?下面我们对以上代码稍作解释。
    Document(文档)是创建pdf需要使用的第一个类,一旦创建了文档,要向pdf文件里写入内容,则需要一个写入器,而PdfWriter就是这样的一个写入器。Paragraph这个类表示一个缩进的段落。运行以上程序,我们就会在/root目录下看到hello.pdf文件。

    但是在实际工作中,我们不可能做这么简单的工作,下面就介绍一下常用的操作。
    二.设置页边距
    如果我们希望定义页面大小和页边距,可以通过使用Document的构造方法实现:
        public Document();

        
    public Document(Rectangle pageSize);

        
    public Document(Rectangle pageSize,
           
    int marginLeft,
           
    int marginRight,
           
    int marginTop,
           
    int marginBottom);
    如下:
        Rectangle pSize=new Rectangle(144,90);
            
    //文档的背景色
            pSize.setBackgroundColor(Color.blue);             
            
    //创建一个文档对象,设置初始化大小和页边距
            Document doc=new Document(pSize,5,5,5,5);
    在上面的例子中我们通过Rectangle设置了文档的大小,其实iText已经为我们定义好了许多常用的页面,比如:A0-A10,我们可以直接调用,如下:
     Document doc=new Document(PageSize.A4,5,5,5,5);

    三.设置字体
    iText可以设置显示文本的字体,大小,颜色等,如下:
                // 加入文字“Hello World”,并设置字体为粗体,大小为20,颜色为红色
                doc.add(new Paragraph("HelloWorld", FontFactory.getFont(
                        FontFactory.COURIER, 
    20, Font.BOLD, new Color(25500))));
    而要实现中文支持,我们需要到http://itextdocs.lowagie.com/downloads/iTextAsian.jar下载中文支持包,然后把它放入classpath中(我试了几次,都无法下载,这里先不说这块了)。
    四.编辑表格
    pdf中的table和html中的table差不多,只是其单元格是cell,如下代码加入了一个2*2的表格,代码很简单,就不过多解释了。
            Document doc = new Document();
            
    try {
                
    // 定义输出位置并把文档对象装入输出对象中
                PdfWriter.getInstance(doc, new FileOutputStream("/root/hello.pdf"));
                
    // 打开文档对象
                doc.open();
                Table t 
    = new Table(2,2);
                t.setBorderColor(
    new Color(00255));//设置边框颜色为蓝色
                t.setPadding(5);
                t.setSpacing(
    5);//设置单元格边界
                t.setBorderWidth(1);//设置边框宽度
                Cell c1 = new Cell("header1");
                c1.setHeader(
    true);
                t.addCell(c1);
                c1 
    = new Cell("Header2");
                t.addCell(c1);
                t.endHeaders();
                t.addCell(
    "1.1");
                t.addCell(
    "1.2");
                doc.add(t);
                
    // 关闭文档对象,释放资源
                doc.close();
            }
     catch (FileNotFoundException e) {
                e.printStackTrace();
            }
     catch (DocumentException e) {
                e.printStackTrace();
            }

    五.插入图片
    插入图片和swing插入图片差不多,大家可以参考一下:
            Document doc = new Document();
            Image jpeg;
            
    try {
                PdfWriter.getInstance(doc, 
    new FileOutputStream("/root/hello.pdf"));
                doc.open();
                jpeg 
    = Image.getInstance("/root/1.gif");
                
    //图片居中
                jpeg.setAlignment(Image.ALIGN_CENTER);
                doc.add(jpeg);
                doc.close();
            }
     catch (BadElementException e) {
                e.printStackTrace();
            }
     catch (MalformedURLException e) {
                e.printStackTrace();
            }
     catch (IOException e) {
                e.printStackTrace();
            }
     catch (DocumentException e) {
                e.printStackTrace();
            }


               好了,到这里我大致也介绍完了,欢迎大家拍砖,呵呵
  • 相关阅读:
    ETL之数据库
    Git的简单实用
    Linux-easy mock部署
    Linux-docker安装mysql
    Linux-安装docker
    Linux-centos7安装Python3和pip3
    Linux-VMware下安装centos7
    Python之hasattr()、getattr()和setattr()
    jsonpath 信息抽取类库
    Python之内置测试框架unittest
  • 原文地址:https://www.cnblogs.com/hehe520/p/6330234.html
Copyright © 2011-2022 走看看