Java使用iTextPDF生成PDF文件的實現方法

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內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: