从零开始学习使用iText PDF(1):生成第一个PDF文件
前言:因为项目需要生成PDF文件,所以去找了一下能够生成PDF的Java工具,看到了iText可以说好评如潮,于是想找来教程学习一番,但是晚上的教程要么是太过基础,要么是直接甩一大票代码,实在是难受,于是自己写一份希望对初学者有些帮助。由于个人水平有限,有误指出请多多指正。
- 代码已上传至码云: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();}
}
从零开始学习使用iText PDF(1):生成第一个PDF文件相关推荐
- Java/web/jsp根据pdf模板生成荣誉证书PDF文件
Java/web/jsp根据pdf模板生成荣誉证书PDF文件 1.前言 最近博主在开发一个大学生学分管理系统,按照对方用户的要求,他们需要一个生成PDF荣誉证书的功能. 于是Java根据pdf模板生成 ...
- java根据pdf模板生成新的pdf
文章目录 第一步 制作模板 第二步 引入POM 第三步 根据模板生成PDF 如何填充图片数据 如何让填充的数据进行换行 总结 最近有需求要根据现有的PDF模板生成新的PDF出来,网上资料一大堆,主要总 ...
- 根据pdf模板生成新的pdf文件(Java)
根据pdf模板生成新的pdf文件 一.项目依赖 二.所用工具类 三.其他资料 一.项目依赖 1.maven版本:3.5.x 2.pom文件依赖 <!--itext的依赖jar--> < ...
- 多个PDF怎么合并成一个PDF文件?好用的方法学习一下
最近有小伙伴咨询说平时工作中接收到和之前已存留的PDF文件太多了,很多都是统一个类型的文件都分成了很多个单独的文件,整理起来比较麻烦,也不知道该如何去整合.那么多个PDF怎么合并成一个PDF文件呢?今 ...
- 多个pdf怎么合并成一个pdf?教您几招快速合并的方法!
多个pdf怎么合并成一个pdf?通常来说,将多个PDF文件进行合并是非常重要的.在我们日常工作中,我们经常需要使用PDF文件,比如合同.报告等.将多个相关的PDF文件合并成一个更大的文件可以方便我们查 ...
- 多个pdf怎么合并成一个pdf
如何合并多个PDF文件? 除word,PPT,Excel等文件格式外,PDF文件也越来越成为我们日常工作中的主流常用文件格式.我们处理工作文档是可能经常遇到许多分分散的PDF文件,那么我们如何更有效的 ...
- 如何修改PDF,怎么把一个PDF拆分成多个
时代的发展使大家在工作中使用到PDF文件也越来越频繁,对于PDF文件,很多刚刚使用的小伙伴觉得展示效果不错,但是修改起来很是麻烦,PDF文件的修改编辑是需要用到PDF编辑器的,在编辑文件的时候,需要将 ...
- 如何在PDF中插入另一个PDF文件的页面
编辑PDF文件的时候,如果要在当前文档中插入另一个PDF文件可分为俩种情况,一是插入另一个PDF中的较少部分页面.另外就是插入较多或者是整个文件了.对于这两种情况可以采用不同的方法来操作. 插入另一个 ...
- 怎样把多个pdf合并为一份?多个pdf怎么合并成一个pdf?
怎么把单个的pdf文件合并在一起?怎么把几个单独的pdf文件合并为一个?有时候我们需要把多个pdf合并成一个pdf,但是还有些小伙伴不知道pdf合并成一个pdf软件哪个好?有时候我们需要把多个pdf合 ...
最新文章
- java ide 2017_Intellij ide 2017.2新建javaweb项目,并且部署
- 清华博士教你如何用推荐算法技术「找到女朋友」
- 视频云直播:场景、技术及优化
- vue 页面生成pdf并下载 vue页面转PDF
- 四川大学2015年数学分析考研试题
- html span离div块有边距,html块 div span
- db2存储过程简单写法
- python从0开始学编程第三天第9讲_【原创笔记1】Python从0学起——Starting from 0 learning Python(The First Day)...
- 离散数学计算机专业论文,【计算机专业《离散数学》教学研究】计算机专业离散数学...
- 缺少tlqcu_qcu1.conf文件
- 案例:数据提取/数据获取/爬虫—工具篇—影刀
- 香槟分校计算机科学排名,伊利诺伊大学厄巴纳香槟分校计算机科学computer science专业排名第29名(2020THE泰晤士高等教育世界大学排名)...
- No installations recognized以及nvm use失败问题
- 蚂蚁金服宫孙:guava探究系列之优雅校验数据
- win7关机一直卡在正在关机
- BS EN 438-4装饰用薄板材压实层压制件的分类和规范
- java中paint_Java中paint怎么用
- 【Eclipse】--Eclipse折叠代码插件folding
- 软件工程 - 个人主页 - 可行性分析与需求分析文档
- 微信朋友圈分享链接调用外部浏览器打开指定URL链接是如何实现的
热门文章
- Bzoj1115 石子游戏Kam
- 判断是否有统计意义/差异具有显著性/具有显著差异/零假设(希望证明为错误的假设)/卡方检验
- SQL Server 【附】创建商品管理数据库、学生选课数据库的SQL语句
- Hadoop集群里面经常使用的几个脚本文件
- 12306抢票算法居然被曝光了!!!居然是redis实现的
- 高可用分布式存储 etcd 的实现原理
- Ubuntu 更新源地址列表更改方法
- 2015年计算机外文参考文献,计算机毕业设计外文参考文献
- samba guest ok
- Mybatis Plus 入门 简单的CRUD 使用详解 条件查询 分页查询 DML操作 MP代码生成器