java使用itext,製作pdf檔案
阿新 • • 發佈:2019-02-04
5 畫table,PdfTableTest_04.java檔案
package com.test;
import java.io.File;
import java.io.FileOutputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Map;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Rectangle;
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 com.sun.org.apache.regexp.internal.recompile;
/**
* 職工流水賬pdf檔案,表格
* 動態畫
* @author yuhf
*
*/
public class PdfTableTest_04 {
/**
* @throws Exception
*/
public void addTable(String path,ZGLSZBean zBean) throws Exception{
String ORGNAME = "";
String OCNAME = "";
Rectangle rectangle = new Rectangle(PageSize.A4); //設定紙張的大小物件
Document doc = new Document(rectangle.rotate()); //紙張橫向
//建立BaseFont物件,指明字型,編碼方式,是否嵌入
BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
//建立Font物件,將基礎字型物件,字型大小,字型風格
Font font=new Font(bf,10,Font.NORMAL);
Font font1=new Font(bf,15,Font.BOLD);
//建立檔案
File file = new File(path);
PdfWriter writer = PdfWriter.getInstance(doc, new FileOutputStream(file));
//設定頁首頁尾
Rectangle rect = new Rectangle(36, 54, 520, 788);
rect.setBorderColor(BaseColor.BLACK);
writer.setBoxSize("art", rect);
//建立PdfTable物件 10列表格
PdfPTable table=new PdfPTable(11);
//設定各列的列寬
table.setTotalWidth(new float[]{100,100,100,90,100,100,100,100,120,120,100});
//表格與標題空40 左右高度
PdfPCell cell_0 = mergeCol("", font, 11);
cell_0.setMinimumHeight(20);
cell_0.setBorder(Rectangle.NO_BORDER);
table.addCell(cell_0);
//單位賬戶
PdfPCell cell = new PdfPCell();
PdfPCell pdfCell_dwzh = getPDFCell("單位賬戶:",font);
pdfCell_dwzh.setBorder(Rectangle.NO_BORDER); //去除邊框
table.addCell(pdfCell_dwzh);
cell=mergeCol(zBean.getSncode(), font, 3);
cell.setBorder(Rectangle.NO_BORDER);//去除邊框
cell.setHorizontalAlignment(Element.ALIGN_LEFT);
table.addCell(cell);
//--1
//單位名稱:
PdfPCell pdfCell_dwmc = getPDFCell("單位名稱:",font);
pdfCell_dwmc.setBorder(Rectangle.NO_BORDER);
table.addCell(pdfCell_dwmc);
cell=mergeCol(zBean.getSnname(), font, 3);
cell.setBorder(Rectangle.NO_BORDER);
cell.setHorizontalAlignment(Element.ALIGN_LEFT);
table.addCell(cell);
//單位名稱:
PdfPCell pdfCell_zgzh = getPDFCell("職工賬號:",font);
pdfCell_zgzh.setBorder(Rectangle.NO_BORDER);
table.addCell(pdfCell_zgzh);
cell=mergeCol(zBean.getSpcode(), font, 2);
cell.setBorder(Rectangle.NO_BORDER);
cell.setHorizontalAlignment(Element.ALIGN_LEFT);
table.addCell(cell);
// --2
//職工姓名:
PdfPCell pdfCell_zgxm = getPDFCell("職工姓名:",font);
pdfCell_zgxm.setBorder(Rectangle.NO_BORDER);
table.addCell(pdfCell_zgxm);
cell=mergeCol(zBean.getSpname(), font, 3);
cell.setBorder(Rectangle.NO_BORDER);
cell.setHorizontalAlignment(Element.ALIGN_LEFT);
table.addCell(cell);
//日期範圍:
PdfPCell pdfCell_sjfw = getPDFCell("日期範圍:",font);
pdfCell_sjfw.setBorder(Rectangle.NO_BORDER);
table.addCell(pdfCell_sjfw);
cell=mergeCol(zBean.getRqfw(), font, 3);
cell.setBorder(Rectangle.NO_BORDER);
cell.setHorizontalAlignment(Element.ALIGN_LEFT);
table.addCell(cell);
//列印日期:
PdfPCell pdfCell_dysj = getPDFCell("列印日期:",font);
pdfCell_dysj.setBorder(Rectangle.NO_BORDER);
table.addCell(pdfCell_dysj);
cell=mergeCol(zBean.getDyrq(), font, 2);
cell.setBorder(Rectangle.NO_BORDER);
cell.setHorizontalAlignment(Element.ALIGN_LEFT);
table.addCell(cell);
//--3
PdfPCell mergeRow_sj = mergeRow("時間", font, 2);
table.addCell(mergeRow_sj);
PdfPCell mergeRow_cllx = mergeRow("處理型別", font, 2);
table.addCell(mergeRow_cllx);
PdfPCell mergeRow_hjny = mergeRow("匯繳年月", font, 2);
table.addCell(mergeRow_hjny);
PdfPCell mergeRow_sr = mergeRow("收入", font, 2);
table.addCell(mergeRow_sr);
PdfPCell mergeCol_zc = mergeCol("支出", font, 3);
table.addCell(mergeCol_zc);
PdfPCell mergeRow_ye = mergeRow("餘額", font, 2);
table.addCell(mergeRow_ye);
PdfPCell mergeRow_dwmc = mergeRow("單位名稱", font, 2);
mergeRow_dwmc.setColspan(2);
table.addCell(mergeRow_dwmc);
PdfPCell mergeRow_bz = mergeRow("備註", font, 2);
table.addCell(mergeRow_bz);
//--4
PdfPCell pdfCell_gjj = getPDFCell("支出",font);
table.addCell(pdfCell_gjj);
PdfPCell pdfCell_lx = getPDFCell("利息",font);
table.addCell(pdfCell_lx);
PdfPCell pdfCell_hj = getPDFCell("合計",font);
table.addCell(pdfCell_hj);
for (Map<String, Object> item_map : zBean.getArray_list()) {
table.addCell(getPDFCell(isNull(item_map.get("QRRQ")), font));
table.addCell(getPDFCell(isNull(item_map.get("CLLXNAME")), font));
table.addCell(getPDFCell(isNull(item_map.get("HJNY")), font));
table.addCell(getPDFCell(isNullByZero(item_map.get("SR")), font));
table.addCell(getPDFCell(isNullByZero(item_map.get("ZC")), font));//支出
table.addCell(getPDFCell(isNullByZero(item_map.get("LX")), font));//利息
table.addCell(getPDFCell(addHj(item_map.get("ZC"), item_map.get("LX")), font));//合計自己算
table.addCell(getPDFCell(isNull(item_map.get("YE")), font));//餘額
table.addCell(mergeCol(isNull(item_map.get("SNNAME")), font,2));
table.addCell(getPDFCell("無", font));
}
//文件寫入內容
doc.open();
Paragraph title=new Paragraph("公積金職工流水賬",font1);
title.setAlignment(Paragraph.ALIGN_CENTER);
doc.add(title);
doc.add(table);
doc.close();
}
/**
* 合併列的靜態函式
* @param str 內容
* @param font 字型樣式
* @param i 合併幾個單元格,列
* @return
*/
public static PdfPCell mergeCol(String str,Font font,int i) {
PdfPCell cell=new PdfPCell(new Paragraph(str,font));
cell.setMinimumHeight(25);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
//設定最小單元格高度
cell.setMinimumHeight(20);
//將該單元格所在行包括該單元格在內的i列單元格合併為一個單元格
cell.setColspan(i);
return cell;
}
/**
* 合併行的靜態函式
* @param str 內容
* @param font 字型
* @param i 合併多少行
* @return
*/
public static PdfPCell mergeRow(String str,Font font,int i) {
//建立單元格物件,將內容及字型傳入
PdfPCell cell=new PdfPCell(new Paragraph(str,font));
//設定單元格內容居中
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
//將該單元格所在列包括該單元格在內的i行單元格合併為一個單元格
cell.setRowspan(i);
//設定最小單元格高度
cell.setMinimumHeight(20);
return cell;
}
/**
* 判斷 object是不是null
* @param object
* @return 是null 返回“”
*/
public String isNull(Object object){
return object == null ? "" : object.toString().trim();
}
/**
* 判斷 object是不是null
* @param object
* @return 返回 “0”
*/
public String isNullByZero(Object object){
return object == null ? "0" : object.toString().trim();
}
/**
* 根據支出 +利息 = 合計
* @param zc
* @param lx
* @return 合計
*/
public String addHj(Object zc,Object lx){
String string_zc= this.isNullByZero(zc).trim();
double double_zc = Double.parseDouble(string_zc);
String string_lx = this.isNullByZero(lx).trim();
double double_lx = Double.parseDouble(string_lx);
double double_hj = double_zc + double_lx ;
return double_hj + "";
}
/**
* 刪除邊框
* @param cell
*/
public static void delectBorder(PdfPCell cell){
cell.setBorder(Rectangle.NO_BORDER);
}
//獲取指定內容與字型的單元格
public static PdfPCell getPDFCell(String string, Font font)
{
//建立單元格物件,將內容與字型放入段落中作為單元格內容
PdfPCell cell=new PdfPCell(new Paragraph(string,font));
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
//設定最小單元格高度
cell.setMinimumHeight(20);
return cell;
}
/**
* bean
* @author yuhf
*
*/
public class ZGLSZBean{
//單位賬戶
private String sncode;
//單位名稱
private String snname;
//職工賬號
private String spcode;
//職工姓名
private String spname;
//日期範圍
private String rqfw;
//列印日期
private String dyrq;
//顯示 列表資料
private List<Map<String,Object>> array_list;
public String getSncode() {
return sncode;
}
public void setSncode(String sncode) {
this.sncode = sncode;
}
public String getSnname() {
return snname;
}
public void setSnname(String snname) {
this.snname = snname;
}
public String getSpcode() {
return spcode;
}
public void setSpcode(String spcode) {
this.spcode = spcode;
}
public String getSpname() {
return spname;
}
public void setSpname(String spname) {
this.spname = spname;
}
public String getRqfw() {
return rqfw;
}
public void setRqfw(String rqfw) {
this.rqfw = rqfw;
}
public String getDyrq() {
return dyrq;
}
public void setDyrq(String dyrq) {
this.dyrq = dyrq;
}
public List<Map<String, Object>> getArray_list() {
return array_list;
}
public void setArray_list(List<Map<String, Object>> array_list) {
this.array_list = array_list;
}
}
}
6 樣式圖片