前言:因为项目需要生成PDF文件,所以去找了一下能够生成PDF的Java工具,看到了iText可以说好评如潮,于是想找来教程学习一番,但是晚上的教程要么是太过基础,要么是直接甩一大票代码,实在是难受,于是自己写一份希望对初学者有些帮助。由于个人水平有限,有误指出请多多指正。

  • 代码已上传至码云:zZ丨 / iTextDemo
  • 字体文件和生成的PDF在src/main/resources文件夹中

  1. 获取工具

    既然是用的第三方工具,当然要先拿到jar包再说,这里介绍两种方式:

    1. Maven
      使用Maven的话可以参考官方提供的方式:Maven Dependencies
      总结一下就是添加以下依赖:

      <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.12</version>
      </dependency>
    2. 直接引入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
  2. 生成第一个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了。

  3. 解释一下第一个例子
    先能运行,然后分析其中的原理:
    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();
  4. 解决中文问题
    在上面的例子中,如果将“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系统中这个文件的名字是“华文宋体 常规”)

  5. 学以致用,写封信吧
    有三个知识点:

    • 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文件相关推荐

  1. Java/web/jsp根据pdf模板生成荣誉证书PDF文件

    Java/web/jsp根据pdf模板生成荣誉证书PDF文件 1.前言 最近博主在开发一个大学生学分管理系统,按照对方用户的要求,他们需要一个生成PDF荣誉证书的功能. 于是Java根据pdf模板生成 ...

  2. java根据pdf模板生成新的pdf

    文章目录 第一步 制作模板 第二步 引入POM 第三步 根据模板生成PDF 如何填充图片数据 如何让填充的数据进行换行 总结 最近有需求要根据现有的PDF模板生成新的PDF出来,网上资料一大堆,主要总 ...

  3. 根据pdf模板生成新的pdf文件(Java)

    根据pdf模板生成新的pdf文件 一.项目依赖 二.所用工具类 三.其他资料 一.项目依赖 1.maven版本:3.5.x 2.pom文件依赖 <!--itext的依赖jar--> < ...

  4. 多个PDF怎么合并成一个PDF文件?好用的方法学习一下

    最近有小伙伴咨询说平时工作中接收到和之前已存留的PDF文件太多了,很多都是统一个类型的文件都分成了很多个单独的文件,整理起来比较麻烦,也不知道该如何去整合.那么多个PDF怎么合并成一个PDF文件呢?今 ...

  5. 多个pdf怎么合并成一个pdf?教您几招快速合并的方法!

    多个pdf怎么合并成一个pdf?通常来说,将多个PDF文件进行合并是非常重要的.在我们日常工作中,我们经常需要使用PDF文件,比如合同.报告等.将多个相关的PDF文件合并成一个更大的文件可以方便我们查 ...

  6. 多个pdf怎么合并成一个pdf

    如何合并多个PDF文件? 除word,PPT,Excel等文件格式外,PDF文件也越来越成为我们日常工作中的主流常用文件格式.我们处理工作文档是可能经常遇到许多分分散的PDF文件,那么我们如何更有效的 ...

  7. 如何修改PDF,怎么把一个PDF拆分成多个

    时代的发展使大家在工作中使用到PDF文件也越来越频繁,对于PDF文件,很多刚刚使用的小伙伴觉得展示效果不错,但是修改起来很是麻烦,PDF文件的修改编辑是需要用到PDF编辑器的,在编辑文件的时候,需要将 ...

  8. 如何在PDF中插入另一个PDF文件的页面

    编辑PDF文件的时候,如果要在当前文档中插入另一个PDF文件可分为俩种情况,一是插入另一个PDF中的较少部分页面.另外就是插入较多或者是整个文件了.对于这两种情况可以采用不同的方法来操作. 插入另一个 ...

  9. 怎样把多个pdf合并为一份?多个pdf怎么合并成一个pdf?

    怎么把单个的pdf文件合并在一起?怎么把几个单独的pdf文件合并为一个?有时候我们需要把多个pdf合并成一个pdf,但是还有些小伙伴不知道pdf合并成一个pdf软件哪个好?有时候我们需要把多个pdf合 ...

最新文章

  1. java ide 2017_Intellij ide 2017.2新建javaweb项目,并且部署
  2. 清华博士教你如何用推荐算法技术「找到女朋友」
  3. 视频云直播:场景、技术及优化
  4. vue 页面生成pdf并下载 vue页面转PDF
  5. 四川大学2015年数学分析考研试题
  6. html span离div块有边距,html块 div span
  7. db2存储过程简单写法
  8. python从0开始学编程第三天第9讲_【原创笔记1】Python从0学起——Starting from 0 learning Python(The First Day)...
  9. 离散数学计算机专业论文,【计算机专业《离散数学》教学研究】计算机专业离散数学...
  10. 缺少tlqcu_qcu1.conf文件
  11. 案例:数据提取/数据获取/爬虫—工具篇—影刀
  12. 香槟分校计算机科学排名,伊利诺伊大学厄巴纳香槟分校计算机科学computer science专业排名第29名(2020THE泰晤士高等教育世界大学排名)...
  13. No installations recognized以及nvm use失败问题
  14. 蚂蚁金服宫孙:guava探究系列之优雅校验数据
  15. win7关机一直卡在正在关机
  16. BS EN 438-4装饰用薄板材压实层压制件的分类和规范
  17. java中paint_Java中paint怎么用
  18. 【Eclipse】--Eclipse折叠代码插件folding
  19. 软件工程 - 个人主页 - 可行性分析与需求分析文档
  20. 微信朋友圈分享链接调用外部浏览器打开指定URL链接是如何实现的

热门文章

  1. Bzoj1115 石子游戏Kam
  2. 判断是否有统计意义/差异具有显著性/具有显著差异/零假设(希望证明为错误的假设)/卡方检验
  3. SQL Server 【附】创建商品管理数据库、学生选课数据库的SQL语句
  4. Hadoop集群里面经常使用的几个脚本文件
  5. 12306抢票算法居然被曝光了!!!居然是redis实现的
  6. 高可用分布式存储 etcd 的实现原理
  7. Ubuntu 更新源地址列表更改方法
  8. 2015年计算机外文参考文献,计算机毕业设计外文参考文献
  9. samba guest ok
  10. Mybatis Plus 入门 简单的CRUD 使用详解 条件查询 分页查询 DML操作 MP代码生成器