前言

译文连接:http://howtodoinjava.com/apache-commons/create-pdf-files-in-java-itext-tutorial/

对于excel文件的读写操作,相信大家都比较熟悉,使用apache的POI库即可。本篇文章,我将基于iText库编写各式各样的代码示例去创建PDF文件。这些例子会按它们各自的功能分类,为了使大家能更加形象的看到代码所生成的PDF文件内容,每一个例子我都会附加上一张PDF文件截图。我已经尽可能的把我能找到的有用的例子放在这里,如果你觉得我错过了一些用例,随时在评论里留下你的建议,我会把这些例子添加进去。

iText库概述

好的一面是,iText是开源的API,但是需要注意,虽然iText是开源,如果你出于商业目的使用它,仍然需要购买商业许可证。你可以从http://itextpdf.com上免费获取iText的Java类库,iText库非常强大,支持HTML、RTF、XML以及PDF文件的生产,你可以在文档中使用各种各样的字体,并且,还可以使用同样的代码生成上述不同类型的文件,这真的是一个很棒的特性,不是吗?

iText库包含一系列接口,可以生成不同字体的PDF文件,在PDF中创建表格,添加水印等等功能。当然,iText还有许许多多其它的功能,这将留给读者去探索。

如果你的项目是maven工程的话,在pom.xml文件中添加如下依赖,即可以给自己的应用程序添加iText库支持。

<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.0.6</version>
</dependency>

当然,你也可以自己去下载最新的jar文件,然后添加到工程里,下载地址。

iText库常用类

让我们先列出几个接下来例子中要用到的重要的类,熟悉熟悉。

com.itextpdf.text.Document:这是iText库中最常用的类,它代表了一个pdf实例。如果你需要从零开始生成一个PDF文件,你需要使用这个Document类。首先创建(new)该实例,然后打开(open)它,并添加(add)内容,最后关闭(close)该实例,即可生成一个pdf文件。

com.itextpdf.text.Paragraph:表示一个缩进的文本段落,在段落中,你可以设置对齐方式,缩进,段落前后间隔等。

com.itextpdf.text.Chapter:表示PDF的一个章节,他通过一个Paragraph类型的标题和整形章数创建。

com.itextpdf.text.Font:这个类包含了所有规范好的字体,包括family of font,大小,样式和颜色,所有这些字体都被声明为静态常量。

com.itextpdf.text.List:表示一个列表;

com.itextpdf.text.pdf.PDFPTable:表示一个表格;

com.itextpdf.text.Anchor:表示一个锚,类似于HTML页面的链接。

com.itextpdf.text.pdf.PdfWriter:当这个PdfWriter被添加到PdfDocument后,所有添加到Document的内容将会写入到与文件或网络关联的输出流中。

com.itextpdf.text.pdf.PdfReader:用于读取PDF文件;

iText Hello World示例

让我们先从简单的“Hello World”程序开始,在这个程序中,我将会创建一个PDF文件,里面的内容为一条简单的语句。

package cn.edu.hdu.chenpi.cpdemo.itext;import java.io.FileNotFoundException;
import java.io.FileOutputStream;import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;public class JavaPdfHelloWorld {public static void main(String[] args) {Document document = new Document();try {PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("HelloWorld.pdf"));document.open();document.add(new Paragraph("A Hello World PDF document."));document.close();writer.close();} catch (DocumentException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();}}
}

给PDF文件设置文件属性

这个例子将展示如何给PDF文件设置各种属性,如作者名字,创建日期,创建者,或者标题。

        Document document = new Document();try{PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("SetAttributeExample.pdf"));document.open();document.add(new Paragraph("Some content here"));//Set attributes heredocument.addAuthor("Lokesh Gupta");document.addCreationDate();document.addCreator("HowToDoInJava.com");document.addTitle("Set Attribute Example");document.addSubject("An example to show how attributes can be added to pdf files.");document.close();writer.close();} catch (Exception e){e.printStackTrace();}

PDF中添加图片

下面例子展示如何往PDF文件中添加图片。例子中图片来源包含了两种方式:本地图片或URL。

并且,我添加了一些代码,用于设置图片在文档中的位置。

        Document document = new Document();try{PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("AddImageExample.pdf"));document.open();document.add(new Paragraph("Image Example"));//Add ImageImage image1 = Image.getInstance("C:\\temp.jpg");//Fixed Positioning
            image1.setAbsolutePosition(100f, 550f);//Scale to new height and new width of imageimage1.scaleAbsolute(200, 200);//Add to document
            document.add(image1);String imageUrl = "http://www.eclipse.org/xtend/images/java8_logo.png";Image image2 = Image.getInstance(new URL(imageUrl));document.add(image2);document.close();writer.close();} catch (Exception e){e.printStackTrace();}

PDF中创建表格

以下代码展示了如何在PDF文件中创建表格

Document document = new Document();try {PdfWriter writer = PdfWriter.getInstance(document,new FileOutputStream("AddTableExample.pdf"));document.open();PdfPTable table = new PdfPTable(3); // 3 columns.table.setWidthPercentage(100); // Width 100%table.setSpacingBefore(10f); // Space before tabletable.setSpacingAfter(10f); // Space after table// Set Column widthsfloat[] columnWidths = { 1f, 1f, 1f };table.setWidths(columnWidths);PdfPCell cell1 = new PdfPCell(new Paragraph("Cell 1"));cell1.setBorderColor(BaseColor.BLUE);cell1.setPaddingLeft(10);cell1.setHorizontalAlignment(Element.ALIGN_CENTER);cell1.setVerticalAlignment(Element.ALIGN_MIDDLE);PdfPCell cell2 = new PdfPCell(new Paragraph("Cell 2"));cell2.setBorderColor(BaseColor.GREEN);cell2.setPaddingLeft(10);cell2.setHorizontalAlignment(Element.ALIGN_CENTER);cell2.setVerticalAlignment(Element.ALIGN_MIDDLE);PdfPCell cell3 = new PdfPCell(new Paragraph("Cell 3"));cell3.setBorderColor(BaseColor.RED);cell3.setPaddingLeft(10);cell3.setHorizontalAlignment(Element.ALIGN_CENTER);cell3.setVerticalAlignment(Element.ALIGN_MIDDLE);// To avoid having the cell border and the content overlap, if you// are having thick cell borders// cell1.setUserBorderPadding(true);// cell2.setUserBorderPadding(true);// cell3.setUserBorderPadding(true);
table.addCell(cell1);table.addCell(cell2);table.addCell(cell3);document.add(table);document.close();writer.close();} catch (Exception e) {e.printStackTrace();}

PDF中创建列表

这个例子将会帮助你理解iText库是如何在PDF文件里创建列表的。

Document document = new Document();try{PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("ListExample.pdf"));document.open();document.add(new Paragraph("List Example")); //Add ordered listList orderedList = new List(List.ORDERED);orderedList.add(new ListItem("Item 1"));orderedList.add(new ListItem("Item 2"));orderedList.add(new ListItem("Item 3"));document.add(orderedList);//Add un-ordered listList unorderedList = new List(List.UNORDERED);unorderedList.add(new ListItem("Item 1"));unorderedList.add(new ListItem("Item 2"));unorderedList.add(new ListItem("Item 3"));document.add(unorderedList);//Add roman listRomanList romanList = new RomanList();romanList.add(new ListItem("Item 1"));romanList.add(new ListItem("Item 2"));romanList.add(new ListItem("Item 3"));document.add(romanList);//Add Greek listGreekList greekList = new GreekList();greekList.add(new ListItem("Item 1"));greekList.add(new ListItem("Item 2"));greekList.add(new ListItem("Item 3"));document.add(greekList);//ZapfDingbatsList List ExampleZapfDingbatsList zapfDingbatsList = new ZapfDingbatsList(43, 30);zapfDingbatsList.add(new ListItem("Item 1"));zapfDingbatsList.add(new ListItem("Item 2"));zapfDingbatsList.add(new ListItem("Item 3"));document.add(zapfDingbatsList);//List and Sublist ExamplesList nestedList = new List(List.UNORDERED);nestedList.add(new ListItem("Item 1"));List sublist = new List(true, false, 30);sublist.setListSymbol(new Chunk("", FontFactory.getFont(FontFactory.HELVETICA, 6)));sublist.add("A");sublist.add("B");nestedList.add(sublist);nestedList.add(new ListItem("Item 2"));sublist = new List(true, false, 30);sublist.setListSymbol(new Chunk("", FontFactory.getFont(FontFactory.HELVETICA, 6)));sublist.add("C");sublist.add("D");nestedList.add(sublist);document.add(nestedList);document.close();writer.close();} catch (Exception e){e.printStackTrace();}

View Code

PDF中设置样式/格式化输出

让我们来看一些给PDF文件内容设置样式的例子,例子中包含了字体、章、节的使用。

Font blueFont = FontFactory.getFont(FontFactory.HELVETICA, 8, Font.NORMAL, new CMYKColor(255, 0, 0, 0));Font redFont = FontFactory.getFont(FontFactory.COURIER, 12, Font.BOLD, new CMYKColor(0, 255, 0, 0));Font yellowFont = FontFactory.getFont(FontFactory.COURIER, 14, Font.BOLD, new CMYKColor(0, 0, 255, 0));Document document = new Document();try{PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("StylingExample.pdf"));document.open();//document.add(new Paragraph("Styling Example"));//Paragraph with color and font stylesParagraph paragraphOne = new Paragraph("Some colored paragraph text", redFont);document.add(paragraphOne);//Create chapter and sectionsParagraph chapterTitle = new Paragraph("Chapter Title", yellowFont);Chapter chapter1 = new Chapter(chapterTitle, 1);chapter1.setNumberDepth(0);Paragraph sectionTitle = new Paragraph("Section Title", redFont);Section section1 = chapter1.addSection(sectionTitle);Paragraph sectionContent = new Paragraph("Section Text content", blueFont);section1.add(sectionContent);document.add(chapter1);document.close();writer.close();} catch (Exception e){e.printStackTrace();}

给PDF文件设置密码

接下来,让我们看下如何给pdf文件生产保护密码,如下,使用writer.setEncryption()方法即可给pdf文件设置密码。

private static String USER_PASSWORD = "password";private static String OWNER_PASSWORD = "lokesh";public static void main(String[] args) {try{OutputStream file = new FileOutputStream(new File("PasswordProtected.pdf"));Document document = new Document();PdfWriter writer = PdfWriter.getInstance(document, file);writer.setEncryption(USER_PASSWORD.getBytes(),OWNER_PASSWORD.getBytes(), PdfWriter.ALLOW_PRINTING,PdfWriter.ENCRYPTION_AES_128);document.open();document.add(new Paragraph("Password Protected pdf example !!"));document.close();file.close();} catch (Exception e) {e.printStackTrace();}}

给PDF文件设置权限

在这个例子中,我将设置一些权限用于限制其它用户访问PDF文件,如下是一些权限设置值:

 PdfWriter.ALLOW_PRINTINGPdfWriter.ALLOW_ASSEMBLYPdfWriter.ALLOW_COPYPdfWriter.ALLOW_DEGRADED_PRINTINGPdfWriter.ALLOW_FILL_INPdfWriter.ALLOW_MODIFY_ANNOTATIONSPdfWriter.ALLOW_MODIFY_CONTENTSPdfWriter.ALLOW_SCREENREADERS

你可以通过对不同的值执行或操作来实现多权限设置,举个例子:PdfWriter.ALLOW_PRINTING | PdfWriter.ALLOW_COPY。

    public static void main(String[] args) {try {OutputStream file = new FileOutputStream(new File("LimitedAccess.pdf"));Document document = new Document();PdfWriter writer = PdfWriter.getInstance(document, file);writer.setEncryption("".getBytes(), "".getBytes(),PdfWriter.ALLOW_PRINTING , //Only printing allowed; Try to copy text !!
                    PdfWriter.ENCRYPTION_AES_128);document.open();document.add(new Paragraph("Limited Access File !!"));document.close();file.close();} catch (Exception e) {e.printStackTrace();}}

读取/修改已有的PDF文件

本例子将展示如何使用iText库实现PDF文件的读取和修改。在这个例子中,我将读取一个PDF文件,并往每一页添加一些内容。

public static void main(String[] args) {try{//Read file using PdfReaderPdfReader pdfReader = new PdfReader("HelloWorld.pdf");//Modify file using PdfReaderPdfStamper pdfStamper = new PdfStamper(pdfReader, new FileOutputStream("HelloWorld-modified.pdf"));Image image = Image.getInstance("temp.jpg");image.scaleAbsolute(100, 50);image.setAbsolutePosition(100f, 700f);for(int i=1; i<= pdfReader.getNumberOfPages(); i++){PdfContentByte content = pdfStamper.getUnderContent(i);content.addImage(image);}pdfStamper.close();} catch (IOException e) {e.printStackTrace();} catch (DocumentException e) {e.printStackTrace();}
}

往HTTP response输出流中写入PDF内容

这是本篇文章的最后一个例子,我将会往HttpServletResponse的输出流中写入一些PDF内容。在CS环境中,当你需要将PDF文件转成流的形式的时候,这非常有用。

Document document = new Document();
try{response.setContentType("application/pdf");PdfWriter.getInstance(document, response.getOutputStream());document.open();document.add(new Paragraph("howtodoinjava.com"));document.add(new Paragraph(new Date().toString()));//Add more content here
}catch(Exception e){e.printStackTrace();
}document.close();
}

以上就是关于iText 库的所有例子了,如果有什么地方不清楚,或你想增加更多的例子,欢迎留下你的评论。

学习愉快~

译文连接:http://howtodoinjava.com/apache-commons/create-pdf-files-in-java-itext-tutorial/

转载于:https://www.cnblogs.com/chenpi/p/5534595.html

使用iText库创建PDF文件相关推荐

  1. 【第三方库】PHP实现创建PDF文件和编辑PDF文件

    目录 引入Setasign/fpdf.Setasign/fpdi 解决写入中文时乱码问题 1.下载并放置中文语言包(他人封装):https://github.com/DCgithub21/cd_FPD ...

  2. puppeteer api_使用Node.js和puppeteer API从URL创建PDF文件

    puppeteer api We will continue using Node.js and puppeteer which is a node library. As we saw in our ...

  3. 创建pdf java 字体_如何使用自定义字体从servlet使用iText XMLWorker创建PDF?

    使用iText / XMLWorker示例(大多数是 this one),我可以轻松编写能够使用我自己的额外字体从HTML代码创建PDF文件的简单应用程序,但是只要尝试在某些Web服务代码中使用我的东 ...

  4. PHP创建PDF文件(通过FPDF类库)

    最近项目中需要用到PHP创建PDF文档,初步筛选决定使用FPDF这个纯PHP库来实现,类似的还有TCPDF等,有机会也可以试试. FPDF官网:http://www.fpdf.org  logo是个可 ...

  5. java使用itext生成表格pdf文件

    以下主要讲解的是java使用itext生成表格pdf文件,话不多说,直接上代码 一.首先引入itext所使用的包 <dependency><groupId>com.itextp ...

  6. STM32通过Fatfs创建PDF文件

    上面是我创建的群聊,欢迎新朋友的加入. 最近想用MCU去创建一个PDF文件,曾尝试移植HPDF和PDFGEN,因为这两个本就不是为单片机做的库,移植过程有点复杂了. 后面发现ST论坛有个网友发布了一个 ...

  7. ABBYY在MS Office中创建PDF文件的方法

    2019独角兽企业重金招聘Python工程师标准>>> ABBYY PDF Transformer+是一款可创建.编辑及将PDF文件转换为其他可编辑格式的OCR图文识别软件,不仅可以 ...

  8. python使用fpdf创建pdf文件包含:页眉、页脚并嵌入logo图片、设置使用中文字体

    python使用fpdf创建pdf文件包含:页眉.页脚并嵌入logo图片.设置使用中文字体 #python使用fpdf创建页眉.页脚并嵌入logo图片.设置使用中文字体 from fpdf impor ...

  9. python读取pdf文档书签 bookmark_Python利用PyPDF2库获取PDF文件总页码实例

    Python中可以利用PyPDF2库来获取该pdf文件的总页码,可以根据下面的方法一步步进行下去: 1.首先,要安装PyPDF2库,利用以下命令即可: pip install PyPDF2 2.接着, ...

最新文章

  1. 对数据进行递归排序以树状显示
  2. hdu1528 Card Game Cheater
  3. Ubuntu下添加开机启动脚本
  4. C++新特性探究(9.1):functor仿函数探究
  5. 加入域时出现以下错误:找不到网络路径
  6. adb shell操作文件
  7. java代码 软件_适合新手的java代码编写软件有哪些?
  8. windows datacenter 2012 R2 密钥
  9. 连接服务器打印机文件名无效,局域网打印机连接时显示打印机名无效是何原因? 求教数码高手!...
  10. oracle 批量修改同义词,Oracle批量创建同义词
  11. html bottom没有效果,css 设置margin-top或margin-bottom失效不取作用的解决方法
  12. Honor笔记本 (2018款intel版本)win11升级教程(TPM2.0)
  13. (压位)高精度乘法,高精度加法,高精度减法,高精度除法
  14. 基于51单片机的出租车计价器的设计
  15. Idea 合并分支只选取部分文件的办法
  16. Android Studio Win7安装
  17. 输入法:QQ五笔输入法在Excel2010首次输入时,会在单元格内容产生一个空格
  18. stm32实现串口通信
  19. 2023届秋招前端总结面试题
  20. fails sanity check错误的解决方法

热门文章

  1. Flask实例教程四
  2. WiFi相关基础概念
  3. load data with matlab
  4. 13委托和事件在观察者模式中的应用
  5. C/C++使用keybd_event模拟键盘按键
  6. Jetty 基本使用样例
  7. Dubbo原码解析(version:2.5.3)
  8. Samba服务器搭建案例
  9. careercup-中等难度 17.9
  10. Ubuntu 13.10下安装ns2 2.35遇到的小问题