从零开始学习使用iText PDF(1):生成第一个PDF文件
2017-11-29 15:52
896 查看
前言:因为项目需要生成PDF文件,所以去找了一下能够生成PDF的Java工具,看到了iText可以说好评如潮,于是想找来教程学习一番,但是晚上的教程要么是太过基础,要么是直接甩一大票代码,实在是难受,于是自己写一份希望对初学者有些帮助。由于个人水平有限,有误指出请多多指正。
代码已上传至码云:zZ丨 / iTextDemo
字体文件和生成的PDF在src/main/resources文件夹中
获取工具
既然是用的第三方工具,当然要先拿到jar包再说,这里介绍两种方式:
Maven
使用Maven的话可以参考官方提供的方式:Maven Dependencies
总结一下就是添加以下依赖:
直接引入jar包
官方下载地址:https://repo.itextsupport.com/releases/com/itextpdf/itextpdf/5.5.12/itextpdf-5.5.12.jar
我也将jar包传到CSDN资源库了:http://download.csdn.net/download/zz_life/10137577
生成第一个PDF文件
第一个程序当然是从hello world做起啦
运行一下,就能在”D:/iTextDemo”目录下找到生成的第一个文件HelloWorld.pdf了。
解释一下第一个例子
先能运行,然后分析其中的原理:
所以HelloWorld中的关键代码加上注释就是这样的:
解决中文问题
在上面的例子中,如果将“Hello World!”换成中文的话,你会发现生成的文件中什么都没有,这是因为iText原本是不支持中文的,解决中文的方法有很多,这里只介绍一种最直接简单的:
只比HelloWorld的例子多了一步生成Font,便解决了中文问题。(当然需要系统中有STSONG.TTF这个文件,在Windows7系统中这个文件的名字是“华文宋体 常规”)
学以致用,写封信吧
有三个知识点:
代码已上传至码云:zZ丨 / iTextDemo
字体文件和生成的PDF在src/main/resources文件夹中
获取工具
既然是用的第三方工具,当然要先拿到jar包再说,这里介绍两种方式:
Maven
使用Maven的话可以参考官方提供的方式:Maven Dependencies
总结一下就是添加以下依赖:
<dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.12</version> </dependency>
直接引入jar包
官方下载地址:https://repo.itextsupport.com/releases/com/itextpdf/itextpdf/5.5.12/itextpdf-5.5.12.jar
我也将jar包传到CSDN资源库了:http://download.csdn.net/download/zz_life/10137577
生成第一个PDF文件
第一个程序当然是从hello world做起啦
import java.io.File; 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 HelloWorld { public static void main(String[] args) throws FileNotFoundException, DocumentException { // 生成File所在文件夹 String filename = "D:/iTextDemo/HelloWorld.pdf"; File file = new File(filename); file.getParentFile().mkdirs(); // 生成PDF文档 Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream(filename)); document.open(); document.add(new Paragraph("Hello World!")); document.close(); } }
运行一下,就能在”D:/iTextDemo”目录下找到生成的第一个文件HelloWorld.pdf了。
解释一下第一个例子
先能运行,然后分析其中的原理:
Document类:等于是一个PDF文件,类似于File的存在。
PdfWriter类:看名字就知道啦,Writer,用于写文件。
Paragraph类:类名翻译过来是“段落”,一般是代表一段文字(小学学的“自然段”),其实也可以包含一些非文字的内容,这个下次再说。
所以HelloWorld中的关键代码加上注释就是这样的:
// 生成一个默认属性的PDF文件 Document document = new Document(); // 定义一个输出流,将内容写入到filename中 PdfWriter.getInstance(document, new FileOutputStream(filename)); // 开始写文件 document.open(); // 加入一段话“Hello World!” document.add(new Paragraph("Hello World!")); // 结束写入 document.close();
解决中文问题
在上面的例子中,如果将“Hello World!”换成中文的话,你会发现生成的文件中什么都没有,这是因为iText原本是不支持中文的,解决中文的方法有很多,这里只介绍一种最直接简单的:
public class ChineseDisplay { public static void main(String[] args) throws DocumentException, IOException { // 生成File所在文件夹 String filename = "D:/iTextDemo/ChineseDisplay.pdf"; File file = new File(filename); file.getParentFile().mkdirs(); // 中文字体 BaseFont fontChinese = BaseFont.createFont("C:/Windows/Fonts/STSONG.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream(filename)); document.open(); document.add(new Paragraph("你好,世界!", new Font(fontChinese, 12))); document.close(); } }
只比HelloWorld的例子多了一步生成Font,便解决了中文问题。(当然需要系统中有STSONG.TTF这个文件,在Windows7系统中这个文件的名字是“华文宋体 常规”)
学以致用,写封信吧
有三个知识点:
Paragraph.setIndentationLeft(float indentation):整体缩进
Paragraph.setFirstLineIndent(float firstLineIndent):首行缩进
Paragraph.setAlignment(int alignment):设置对齐方式,
Paragraph常用的对齐方式有3种
Element.ALIGN_LEFT:左对齐
Element.ALIGN_CENTER:居中
Element.ALIGN_RIGHT:右对齐
public class Letter { public static void main(String[] args) throws DocumentException, IOException { // 生成File所在文件夹 String filename = "D:/iTextDemo/Letter.pdf"; File file = new File(filename); file.getParentFile().mkdirs(); // 中文字体 BaseFont fontChinese = BaseFont.createFont("C:/Windows/Fonts/STSONG.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream(filename)); document.open(); Font normalFont = new Font(fontChinese, 12); Paragraph to = new Paragraph("亲爱的李雷:", normalFont); document.add(to); Paragraph hello = new Paragraph("你好!", normalFont); hello.setIndentationLeft(24); // 整体缩进 document.add(hello); Paragraph content = new Paragraph("我现在正在学习iText,正好写一封信给你,为了整点内容凑个换行,我这个不怎么擅长写作文的人也是拼了。", normalFont); content.setFirstLineIndent(24); // 首行缩进 document.add(content); Paragraph from = new Paragraph("韩梅梅\n2017年11月29日", normalFont); from.setAlignment(Element.ALIGN_RIGHT); // 居右显示 document.add(from); document.close(); } }
相关文章推荐
- Java使用Freemarker和iText生成PDF文件
- itext使用模板生成pdf文件
- 使用freemaker和itext从html模板生成pdf文件
- java使用IText生成PDF格式文件
- 【Java】使用iText生成PDF文件
- 从零开始学习使用iText PDF(2):跟着官网学几个例子
- 滴水穿石--Java 生成PDF文件--iText使用之插入图片和中文乱码
- 生成PDF文件-使用iText制作复杂表格
- 【Java】maven工程使用iText生成PDF文件
- Java使用Freemarker和iText生成带有图片的PDF文件
- 滴水穿石--Java 生成PDF文件--iText使用之入门
- 使用iText生成PDF文件
- iTEXT生成PDF文件使用方法 实例 示例 Servlet输出PDF文档方法
- Itext 生成 pdf文件使用方法:
- 关于Java Web 使用 iText 将数据库中的 表 的数据 生成 PDF 格式文件(升級版本)
- 使用itext组件生成PDF文件
- 在springmvc中使用itext生成pdf文件
- Android使用iText生成pdf文件并读取pdf内容
- 使用iText生成pdf文件
- 使用ITEXT生成pdf文件,使用POI、jxl对excel文件进行读取