一直以来说写一个关于Java操作PDF的工具类,也没有时间去写,今天抽空写一个简单的工具类,拥有PDF中 换行,字体大小,字体设置,字体颜色,首行缩进,居中,居左,居右,增加新一页等功能,如果需要Table表格的可以用Cell这个方法就可以实现,这个工具类参数也比较多点,自己想优化的,可以写一个实体类来封装。

好了,废话不多说了。

首先我们引入需要的第三方jar包

<!-- https://mvnrepository.com/artifact/com.lowagie/itext -->
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.</version>
</dependency> <!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.</version>
</dependency>

iText是著名的开放项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。

下面我们直接就用代码来描述。

package com.herbert.test;

import com.lowagie.text.*;
import com.lowagie.text.Font;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfWriter; import java.awt.*;
import java.io.FileOutputStream;
import java.io.IOException; /**
* Created by Herbert on 2019/1/21.
*/
public class PDFUtil { /**
* document对象
*/
private static Document document = null; /**
* 创建一个书写器,布局文本位置
* @param leftSize 居左
* @param rightSize 居右
* @param onSize 居上
* @param underSize 居下
* @param path 存储位置
* @throws Exception 初始化PDF错误
*/
public PDFUtil(Integer leftSize , Integer rightSize , Integer onSize , Integer underSize, String path) throws Exception {
try{
// 新建document对象 第一个参数是页面大小。接下来的参数分别是左、右、上和下页边距。
document = new Document(PageSize.A4, leftSize, rightSize, onSize, underSize);
// 建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中。
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(path));
// 打开文件
document.open();
}catch (Exception e){
e.printStackTrace();
System.out.println("PDF初始化错误");
}
} /**
* 书写每一个段落选择的字体
*
* @param fontType
* 0 //楷体字
* 1 //仿宋体
* 2 //黑体
* 字体需要可在追加
* @return
* @throws IOException
* @throws DocumentException
*/
public BaseFont addFontType(Integer fontType) {
BaseFont baseFont = null;
try{ switch (fontType){
case :
//楷体字
baseFont = BaseFont.createFont("c://windows//fonts//simkai.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
break;
case :
//仿宋体
baseFont = BaseFont.createFont("c://windows//fonts//SIMFANG.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
break;
case :
//黑体
baseFont = BaseFont.createFont("c://windows//fonts//SIMHEI.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
break;
}
return baseFont;
}catch (Exception e){
System.out.println("选择字体异常");
e.printStackTrace(); }
return baseFont;
} /**
* 添加段落 - 段落位置( 0 居左 1 居中 2 居右)
* @param fontType 选择字体
* 0 //楷体字
* 1 //仿宋体
* 2 //黑体
* @param fontSize 字体大小
* @param color 字体颜色
* @param alignment 0 居左 1 居中 2 居右
* @param text 文本内容
*/
public void addParagraph(Integer fontType , Integer fontSize,Color color ,Integer alignment ,String text){
try{
BaseFont chinese =addFontType(fontType);
Font font = new Font(chinese, fontSize, Font.COURIER,color);
Paragraph paragraph =new Paragraph(text,font);
//居中显示
paragraph.setAlignment(alignment);
document.add(paragraph);
}catch (Exception e){
e.printStackTrace();
System.out.println("添加段落异常");
}
} /**
* 添加段落 - 首行缩进
* @param fontType 选择字体
* 0 //楷体字
* 1 //仿宋体
* 2 //黑体
* @param fontSize 字体大小
* @param color 字体颜色
* @param index 首行缩进
* @param text 文本内容
*/
public void addTextIndent(Integer fontType , Integer fontSize,Color color ,Integer index ,String text){
try{
BaseFont chinese =addFontType(fontType);
Font font = new Font(chinese, fontSize, Font.COURIER,color);
Paragraph paragraph =new Paragraph(text,font);
//设置首行缩进
paragraph.setFirstLineIndent(index);
document.add(paragraph);
}catch (Exception e){
e.printStackTrace();
System.out.println("添加段落异常");
}
} /**
* 添加新的一页
*/
public void addPage(){
try{
document.newPage();
}catch (Exception e){
e.printStackTrace();
System.out.println("添加段落异常");
}
} /**
* 换行
* 传入1是一行,以此递增
* @param lineNum 换的行数
*/
public void newLine(Integer lineNum) {
try{
for(int i = ; i<lineNum ; i++){
document.add(new Paragraph("\n"));
}
}catch (Exception e){
e.printStackTrace();
System.out.println("换行错误");
}
} /**
* 关闭文档
*/
public void close (){ // 关闭文档
document.close();
} public static void main(String args[]) throws Exception {
PDFUtil pdfUtil = new PDFUtil(, , , ,"E:\\herbert\\test.pdf");
pdfUtil.addParagraph(,,new Color(, , ),,"我是0个测试案例--居左");
pdfUtil.newLine();
pdfUtil.addParagraph(,,new Color(, , ),,"我是1个测试案例--居中 空行");
pdfUtil.addParagraph(,,new Color(, , ),,"我是2个测试案例--居右");
pdfUtil.addPage();
pdfUtil.addParagraph(,,new Color(, , ),,"我是3个测试案例--新增页");
pdfUtil.addParagraph(,,new Color(, , ),,"我是0个测试案例--居左");
pdfUtil.addTextIndent(,,new Color(, , ),,"我是3个测试案例--首行缩进");
pdfUtil.close(); } }

测试截图

注意事项:

1:这个方法目前只能在window上进行操作,如果在其他服务器上,由于使用window自带中文字体,需要对方法进行改进

2:目前只是对段落进行简单的操作,如果写发票那样的PDF文件,建议通过模板来实现,这样格式比较规整

Java 借助poi操作PDF工具类的更多相关文章

  1. java里poi操作Excel工具类【我改】

    参考原文: https://www.cnblogs.com/yizhang/p/7244917.html 我改: package test; import java.io.File; import j ...

  2. 自己封装的poi操作Excel工具类

    自己封装的poi操作Excel工具类 在上一篇文章<使用poi读写Excel>中分享了一下poi操作Excel的简单示例,这次要分享一下我封装的一个Excel操作的工具类. 该工具类主要完 ...

  3. java中文件操作的工具类

    代码: package com.lky.pojo; import java.io.BufferedReader; import java.io.BufferedWriter; import java. ...

  4. Java POI操作Excle工具类

    用到了jxl.jar和poi.jar 一些基本的操作Excel的操作方法: import java.io.File; import java.io.FileInputStream; import ja ...

  5. java img图片转pdf 工具类

    package com.elitel.hljhr.comm.web.main.controller; import java.io.File; import java.io.FileNotFoundE ...

  6. java里poi操作excel的工具类(兼容各版本)

    转: java里poi操作excel的工具类(兼容各版本) 下面是文件内具体内容,文件下载: import java.io.FileNotFoundException; import java.io. ...

  7. Redis操作Set工具类封装,Java Redis Set命令封装

    Redis操作Set工具类封装,Java Redis Set命令封装 >>>>>>>>>>>>>>>>& ...

  8. Redis操作List工具类封装,Java Redis List命令封装

    Redis操作List工具类封装,Java Redis List命令封装 >>>>>>>>>>>>>>>> ...

  9. Java操作Redis工具类

    依赖 jar 包 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis< ...

随机推荐

  1. Servlet与JSP概念理解

    Servlet是用Java编写的服务端程序.需要部署到servlet容器上才能运行,tomcat 就是一个servlet容器. 1.Servlet的生命周期 客户端请求该 Servlet --> ...

  2. struts2和springmvc性能比较2

    我们用struts2时采用的传统的配置文件的方式,并没有使用传说中的0配置.spring3 mvc可以认为已经100%零配置了(除了配置spring mvc-servlet.xml外). Spring ...

  3. 云服务器——之Linux下安装tomcat

    在上一篇文章中已经准备好了tomcat安装的基本环境jdk的安装,那么我们现在来记录tomcat的安装. 第一步:下载tomcat安装包 http://tomcat.apache.org/ 第二步:通 ...

  4. Python不使用元类创建缓存实例

    问题 当创建类实例时我们想返回一个缓存引用,让其指向上一个用同样参数(如果有的话)创建出来的类实例. 这个问题常常出现在当我们想确保针对一组输入参数只会有一个类实例存在时. 解决方法: 使用一个与类本 ...

  5. Dart-Tour2-类

    类 Dart语法样式: https://www.dartlang.org/guides/language/effective-dart/style语法:https://www.dartlang.org ...

  6. 状态模式(State)-设计模式

    软件模式是将模式的一般概念应用于软件开发领域,即软件开发的 总体指导思路或参照样板.软件模式并非仅限于设计模式,还包括 架构模式.分析模式和过程模式等,实际上,在软件生存期的每一个阶段都存在着一些被认 ...

  7. Simpo

    Time: 2017-01-16 - Download Github: https://github.com/KeliCheng/Simpo一款快速发布文字和图片到社交网站的macOS菜单栏App,目 ...

  8. Swift Property

    Swift中有下列几种属性 存储属性(Stored properties):存储实例的常量和变量,与类.结构体.枚举的实例相关 计算属性(Computed properties):通过某种方式计算出来 ...

  9. JavaScript 语言精粹笔记3

    方法 毒瘤 糟粕 记录一下阅读蝴蝶书的笔记,本篇为书中最后一部分:方法.代码风格.优美的特性.毒瘤.糟粕等. 方法 这一章主要介绍了一些方法集.这里写几个我不太熟悉的方法和要点吧. array.joi ...

  10. 编写一个可复用的SpringBoot应用运维脚本

    前提 作为Java开发者,很多场景下会使用SpringBoot开发Web应用,目前微服务主流SpringCloud全家桶也是基于SpringBoot搭建的.SpringBoot应用部署到服务器上,需要 ...