java 编辑pdf表格_Java 生成pdf表格文档
最近在工作做一個泰國的項目,應供應商要求,需要將每天的交易生成pdf格式的報表上傳到供應商的服務器,特此記錄實現方法。廢話不多說,直接上代碼:
THSarabunNew.ttf該文件是泰國字體自行網上下載即可
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* TOT上報PDF文件生成工具
*/
@Slf4j
@Component
public class TOTReportPdfService {
private String thaiFont = "./font/THSarabunNew.ttf";
//字體格式
Font font = FontFactory.getFont(thaiFont, BaseFont.IDENTITY_H, false,-1.0F, -1);
public void generatorPdf(String outPutFilePath, String headerSuffix){
Document document = new Document(PageSize.A4.rotate(), 20, 20, 50, 20);
File outputFile = createReportFile(outPutFilePath);
try {
//設置輸出位置
PdfWriter.getInstance(document, new FileOutputStream(outputFile));
//打開文檔
document.open();
float[] columnWidths = {80, 200, 100,100,80,80,80,80,80,80,80,80};//表格每一列的寬度
PdfPTable table = createTable(12, columnWidths);
//表頭
generatorHeader(table, headerSuffix);
document.add(table);
} catch (DocumentException e) {
e.printStackTrace();
log.error("TOTReportPdfService.generatorPdf 文件創建失敗。{}", e.getMessage());
} catch (FileNotFoundException e) {
e.printStackTrace();
log.error("TOTReportPdfService.generatorPdf 找不到文件{}", e.getMessage());
} catch (IOException e) {
e.printStackTrace();
} finally {
document.close();
}
}
private File createReportFile(String outPutFilePath) {
File file = new File(outPutFilePath);
if (!file.exists()){
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
return file;
}
private PdfPTable createTable(int colNum, float[] columnWidths) {
PdfPTable table = new PdfPTable(colNum);
try {
table.setWidths(columnWidths);
} catch (DocumentException e) {
e.printStackTrace();
log.error("創建pdf報表失敗{}",e.cause())
}
table.setSpacingBefore(20f);//設置頁邊距
table.setWidthPercentage(100);//設置表格寬度為100%
return table;
}
/**
* 報表表頭 12列 8行
* @param table
*/
private void generatorHeader(PdfPTable table, String headerSuffix) {
table.addCell(createPdfPCell("", 3, 1));
table.addCell(createPdfPCell("?????? ??????? ?????", 5, 1, Element.ALIGN_CENTER));
table.addCell(createPdfPCell("", 4, 1));
table.addCell(createPdfPCell("", 3, 1));
table.addCell(createPdfPCell("???????????????????????????????????", 5, 1, Element.ALIGN_CENTER));
table.addCell(createPdfPCell("RP0001_" + headerSuffix, 4, 1));
table.addCell(createPdfPCell("", 3, 1));
table.addCell(createPdfPCell("????????????????????????", 5, 1, Element.ALIGN_CENTER));
table.addCell(createPdfPCell("", 3, 1));
table.addCell(createPdfPCell("Page 1 Of 1", 4, 1, Element.ALIGN_RIGHT));
table.addCell(createPdfPCell("Location 0BBPW", 12, 1, Element.ALIGN_LEFT));
table.addCell(createPdfPCell("????????", 1, 3, Element.ALIGN_CENTER));
table.addCell(createPdfPCell("?????????????????????????????", 1, 3, Element.ALIGN_CENTER));
table.addCell(createPdfPCell("Account No. - Invoice No.", 2,3, Element.ALIGN_CENTER));
table.addCell(createPdfPCell("??\u008D???????", 1,3, Element.ALIGN_CENTER));
table.addCell(createPdfPCell("???????????? / ?????? ???????????????", 5, 1, Element.ALIGN_CENTER));
table.addCell(createPdfPCell("???????????? / ??????", 1,1, Element.ALIGN_CENTER));
table.addCell(createPdfPCell("???????????", 1, 3, Element.ALIGN_CENTER));
table.addCell(createPdfPCell("???? 7% ", 3, 1, Element.ALIGN_CENTER));
table.addCell(createPdfPCell("???? 0% ", 1 , 2, Element.ALIGN_CENTER));
table.addCell(createPdfPCell("???", 1,2, Element.ALIGN_CENTER));
table.addCell(createPdfPCell("??????????", 1,2, Element.ALIGN_CENTER));
table.addCell(createPdfPCell("???????????", 1,1, Element.ALIGN_CENTER));
table.addCell(createPdfPCell("???????????????", 1, 1, Element.ALIGN_CENTER));
table.addCell(createPdfPCell("???", 1,1, Element.ALIGN_CENTER));
}
private PdfPCell createPdfPCell(String text, int colSpan, int rowSpan) {
return createPdfPCell(text, colSpan, rowSpan, Element.ALIGN_RIGHT);
}
private PdfPCell createPdfPCell(String text, int colSpan, int rowSpan, int align) {
PdfPCell pdfPCell = new PdfPCell();
pdfPCell.setColspan(colSpan);
pdfPCell.setRowspan(rowSpan);
pdfPCell.setPhrase(createParagraph(text));
pdfPCell.setHorizontalAlignment(align);
pdfPCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
return pdfPCell;
}
private Paragraph createParagraph(String text) {
Paragraph paragraph;
paragraph = new Paragraph(text, font);
paragraph.setAlignment(Phrase.ALIGN_CENTER);
return paragraph;
}
}
java生成復雜word文檔
在Web應用中,有時需要按照固定的模板將數據導出到Word,如流程審批單,在流程處理完成后將處理過程按照流程單的要求導出,有時程序中需要實現生成 標準Word文檔,要求能夠打印,并且保持頁面樣式不變, ...
使用FastReport報表工具生成標簽打印文檔
在我們實際開發報表的時候,我們需要按一定的業務規則組織好報表的模板設計,讓報表盡可能的貼近實際的需求,在之前的隨筆中介紹了FastRe ...
Spring Boot 集成 Swagger 生成 RESTful API 文檔
原文鏈接: Spring Boot 集成 Swagger 生成 RESTful API 文檔 簡介 Swagger 官網是這么描述它的:The Best APIs are Built with Swa ...
Swagger+Spring mvc生成Restful接口文檔
簡介 Swagger?是一個規范和完整的框架,用于生成.描述.調用和可視化 RESTful 風格的 Web 服務.總體目標是使客戶端和文件系統作為服務器以同樣的速度來更新.文件的方法,參數和模型緊密集 ...
使用jsdoc-toolkit來自動生成js api文檔
近來前端組小盆友開發的類庫越來越多,很多情況下彼此不知道寫了些什么方法,為了更好的合作提高工作效率,找了個比較好的api文檔生成方法.使用jsdoc-toolkit來自動生成js api文檔. 一.? ...
Java 后臺創建word 文檔
---恢復內容開始--- Java 后臺創建 word 文檔 自己總結? 網上查閱的文檔 分享POI 教程地址:http://www.tuicool.com/articles/emqaEf6 方式一. ...
Java解析word,獲取文檔中圖片位置
前言(背景介紹): Apache POI是Apache基金會下一個開源的項目,用來處理office系列的文檔,能夠創建和解析word.excel.ppt格式的文檔. 其中對word文檔的處理有兩個技術 ...
CEBX格式的文檔如何轉換為PDF格式文檔、DOCX文檔?
方正阿帕比CEBX格式的文檔如何轉換為PDF格式文檔.DOCX文檔? 簡介: PDF.Doc.Docx格式的文檔使用的非常普遍,金山WPS可以直接打開PDF和Doc.Docx文檔,使用也很方便. CE ...
Android開發——使用Jword生成本地word文檔
本文主要介紹如何使用Jword生成本地word文檔,這里涉及到Jword的使用技巧,本文給出相應的代碼,需要的朋友可以參考下. 為什么使用Jword呢?因為IText .Freemark在安卓平臺上壓 ...
隨機推薦
Business Unit Lookup in Form
Just add the below code in lookup() of StringEdit control in Form to get the Business Unit Lookup: p ...
Codeforces Round #384 (Div. 2)D - Chloe and pleasant prizes 樹形dp
D - Chloe and pleasant prizes 鏈接 http://codeforces.com/contest/743/problem/D 題面 Generous sponsors of ...
Drupal7模塊multiselect使用
Drupal二次開發的時候,我們時常要使用到多選列表,但是官方默認的多選下拉列表,是在不敢恭維如下圖所示: 不過難看不可怕,Drupal有兩萬第三方模塊做支撐,只有你想不到,沒有找不到的. 功夫不負有 ...
asp.net C# 題目大全
net001在線飾品銷售系統 net002鮮花商城 net003商品銷售管理系統 net004在線輔導答疑 net005土地稅務管理系統 net006旅游管理 net007房產中介 net008房產信 ...
SaberRD之直流工作點分析
直流工作點分析(DC Operating Point Analysis)用于確定電路的靜態工作點. 靜態工作點的概念來源于三極管的電流放大特性.三極管放大電路中,當交流輸入信號為零時,電路處于直流工作 ...
Python小白 哆唻a夢 用turtle繪圖
點擊觀看視頻 # -*- coding: utf-8 -*- """ Created on Sat Nov 10 22:02:32 2018 @author: 10029 ...
png 2 icon
http://www.easyicon.net/covert/ 這個網頁可以轉換png圖片為icon格式
JavaScriptDOM操作那些事兒
查詢: ①.標準DOM操作API: document.getElementById. document.getElementsByTagName. document.getElementsByName ...
QT 交叉編譯工具選擇
使用QT交叉編譯,生成的都是x86的可執行文件.Zoro告訴我交叉工具配置錯了. 參考鏈接: http://www.cnblogs.com/zengjfgit/p/4744507.html linux ...
總結
以上是生活随笔為你收集整理的java 编辑pdf表格_Java 生成pdf表格文档的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux中安装tree命令
- 下一篇: ffmpeg java 使用教程_Jav