Java使用iTextPDF生成PDF文件的实现方法

作者:mangoBUPT 时间:2023-10-15 10:44:13 

iText介绍和说明

因为项目需要生成PDF文件,所以去找了一下能够生成PDF的Java工具,看到了iText可以说好评如潮。

如果你想通过java操作PDF文件,那么 iText 绝对是你的首选。

引入依赖

这里使用的是iText5


 <dependency>
  <groupId>com.itextpdf</groupId>
  <artifactId>itextpdf</artifactId>
  <version>5.5.10</version>
 </dependency>
 <dependency>
  <groupId>com.itextpdf</groupId>
  <artifactId>itext-asian</artifactId>
  <version>5.2.0</version>
 </dependency>

使用步骤简单介绍

快速入手iText拢共需要5步:

  1. 创建文档实例 Document

  2. 获取PdfWriter实例 (需要指定Document实例 和pdf 生成的磁盘路径)

  3. 打开文档

  4. 添加段落内容

  5. 关闭操作文档实例 (操作完成后必须执行文档关闭操作)

创建工具类


public class PdfUtil {
// 标准字体
public static Font NORMALFONT;
// 加粗字体
public static Font BOLDFONT;
//固定高
public static float fixedHeight = 27f;
//间距
public static int spacing = 5;

static {
 try {
  BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
  NORMALFONT = new Font(bfChinese, 10, Font.NORMAL);
  BOLDFONT = new Font(bfChinese, 14, Font.BOLD);
 } catch (Exception e) {
  e.printStackTrace();
 }

}

public static Document createDocument() {
 //生成pdf
 Document document = new Document();
 // 页面大小
 Rectangle rectangle = new Rectangle(PageSize.A4);
 // 页面背景颜色
 rectangle.setBackgroundColor(BaseColor.WHITE);
 document.setPageSize(rectangle);
 // 页边距 左,右,上,下
 document.setMargins(20, 20, 20, 20);
 return document;
}

/**
 * @param text 段落内容
 * @return
 */
public static Paragraph createParagraph(String text, Font font) {
 Paragraph elements = new Paragraph(text, font);
 elements.setSpacingBefore(5);
 elements.setSpacingAfter(5);
 elements.setSpacingAfter(spacing);
 return elements;
}

public static Font createFont(int fontNumber, int fontSize, BaseColor fontColor) {
 //中文字体 ----不然中文会乱码
 BaseFont bf = null;
 try {
  bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
  return new Font(bf, fontNumber, fontSize, fontColor);
 } catch (Exception e) {
  e.printStackTrace();
 }
 return new Font(bf, Font.DEFAULTSIZE, Font.NORMAL, BaseColor.BLACK);
}

/**
 * 隐藏表格边框线
 *
 * @param cell 单元格
 */
public static void disableBorderSide(PdfPCell cell) {
 if (cell != null) {
  cell.disableBorderSide(1);
  cell.disableBorderSide(2);
  cell.disableBorderSide(4);
  cell.disableBorderSide(8);
 }
}

/**
 * 创建居中得单元格
 *
 * @return
 */
public static PdfPCell createCenterPdfPCell() {
 PdfPCell cell = new PdfPCell();
 cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
 cell.setHorizontalAlignment(Element.ALIGN_CENTER);
 cell.setFixedHeight(fixedHeight);
 return cell;
}

/**
 * 创建指定文字得单元格
 *
 * @param text
 * @return
 */
public static PdfPCell createCenterPdfPCell(String text, int rowSpan, int colSpan, Font font) {
 PdfPCell cell = new PdfPCell(new Paragraph(text, font));
 cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
 cell.setHorizontalAlignment(Element.ALIGN_LEFT);
 cell.setFixedHeight(fixedHeight);
 cell.setRowspan(rowSpan);
 cell.setColspan(colSpan);
 return cell;
}

/**
 * @param len 表格列数
 * @return
 */
public static PdfPTable createPdfPTable(int len) {
 PdfPTable pdfPTable = new PdfPTable(len);
 pdfPTable.setSpacingBefore(5);
 pdfPTable.setHorizontalAlignment(Element.ALIGN_CENTER);
 return pdfPTable;
}
}

创建controller进行测试


/**
* @author Wang Guolong
* @version 1.0
* @date 2020/6/28 3:17 下午
*/
@RestController
@RequestMapping("/pdf")
public class PdfController {

@RequestMapping("/generate")
public Response generatePDF(HttpServletResponse response) throws Exception {
 String filename = "测试pdf";
 // 设置下载格式为pdf
 response.setContentType("application/x-download");
 response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8") + ".pdf");
 OutputStream os = new BufferedOutputStream(response.getOutputStream());

// 1. Document document = new Document();
 Document document = PdfUtil.createDocument();
 // 2. 获取writer
 PdfWriter.getInstance(document, os);
 // 3. open()
 document.open();

//设置字体
 Font blackFont = PdfUtil.createFont(10, Font.NORMAL, BaseColor.BLACK);
 Font blueFont = PdfUtil.createFont(10, Font.NORMAL, BaseColor.BLUE);
 Font bigFont = PdfUtil.createFont(14, Font.NORMAL, BaseColor.BLACK);
 Font littleFont = PdfUtil.createFont(10, Font.NORMAL, BaseColor.BLACK);

Paragraph title = PdfUtil.createParagraph("测试pdf", bigFont);
 title.setAlignment(Element.ALIGN_CENTER);
 // 4. 添加段落内容
 document.add(title);
 // 5. close()
 document.close();
 os.close();
 return new Response().setContent("success");
}
}

运行结果

下载页面:

Java使用iTextPDF生成PDF文件的实现方法

下载的文件效果:

Java使用iTextPDF生成PDF文件的实现方法

来源:https://blog.csdn.net/MCmango/article/details/113933761

标签:Java,iTextPDF,PDF
0
投稿

猜你喜欢

  • 如何自动生成Mybatis的Mapper文件详解

    2023-07-28 08:20:54
  • 从 JVM 中深入探究 Synchronized作用及原理

    2023-07-28 17:22:33
  • 有关Java中的BeanInfo介绍

    2023-08-05 00:13:42
  • Java中io流解析及代码实例

    2023-08-22 16:46:48
  • Flutter自定义圆盘取色器

    2023-07-05 23:55:43
  • Java实现上传文件图片到指定服务器目录

    2023-06-28 00:23:32
  • Java的动态分派和静态分派的实现

    2023-10-09 12:58:37
  • Android编程开发之TextView单击链接弹出Activity的方法

    2023-08-06 18:27:11
  • 关于SpringCloudStream配置问题

    2023-08-08 20:12:00
  • Android数据存储方式操作模式解析

    2023-07-27 02:47:05
  • C语言运算符优先级列表(超详细)

    2023-07-04 08:17:54
  • Java springboot yaml语法注解

    2023-06-17 08:13:35
  • 使用IDEA创建servlet JavaWeb 应用及使用Tomcat本地部署的实现

    2023-09-11 06:04:09
  • java HttpClient传输json格式的参数实例讲解

    2023-08-08 13:21:26
  • Java压缩/解压文件的实现代码

    2023-08-26 04:02:56
  • Android studio中生成引用.aar和.jar的方法详解

    2023-09-29 07:48:33
  • Android实现人脸支付的示例代码

    2023-07-30 14:23:52
  • Java实现多用户注册登录的幸运抽奖

    2023-07-30 11:57:44
  • 新手小心:c语言中强符号与弱符号的使用

    2023-06-24 15:16:23
  • Android 消息机制以及handler的内存泄露

    2023-08-01 07:59:44
  • asp之家 软件编程 m.aspxhome.com