import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;
import org.apache.tomcat.util.codec.binary.Base64;
import java.io.*;
/**
* <dependency>
* <groupId>com.itextpdf</groupId>
* <artifactId>itextpdf</artifactId>
* <version>5.5.13</version>
* </dependency>
* <!-- https://mvnrepository.com/artifact/com.itextpdf/itext-asian -->
* <dependency>
* <groupId>com.itextpdf</groupId>
* <artifactId>itext-asian</artifactId>
* <version>5.2.0</version>
* </dependency>
*
*/
public class Itext1 {
public static void main(String[] args) {
FileInputStream fis = null;
try {
fis = new FileInputStream(new File("D:/test1.pdf"));
generateFinalPdf(fis,"D:/test2.pdf");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 生成版本的pdf
* @param finalPath 的pdf生成路径
* @throws Exception
*/
private static String generateFinalPdf(FileInputStream fis, String finalPath ) throws Exception {
String base64SPdf = "";
FileOutputStream fos = new FileOutputStream(finalPath);
//fos.write(fos);
PdfReader reader = new PdfReader(fis);// 读取pdf模板
Rectangle pageSize = reader.getPageSize(1);
Document document = new Document(pageSize);
PdfWriter writer = PdfWriter.getInstance(document, fos);
document.open();
PdfContentByte cbUnder = writer.getDirectContentUnder();
int pageNums = reader.getNumberOfPages();
PdfImportedPage pageTemplateAll = null;
for (int i = 1; i <= pageNums; i++) {
pageTemplateAll = writer.getImportedPage(reader,i);
cbUnder.addTemplate(pageTemplateAll, 0, 0);
document.newPage();
}
Paragraph paragraph = generatePdfATATable();//此处为生成的表格及内容方法
document.add(paragraph);
document.close();
reader.close();
//以下是将最终的pdf转为 base64
File pdfFile = new File(finalPath);
InputStream is;
ByteArrayOutputStream bout = new ByteArrayOutputStream();
is = new FileInputStream(pdfFile);
byte[] b = new byte[is.available()];
is.read(b);
base64SPdf= Base64.encodeBase64String(b);
is.close();
bout.close();
return base64SPdf;
}
/**
* 生成pdf表格
* @return
* @see
*/
private static Paragraph generatePdfATATable( ) throws Exception {
BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font fontChinese = new Font(bfChinese, 10.5F, Font.NORMAL);// 五号
Paragraph ret = new Paragraph("附表1: 还款计划表(元)", fontChinese);
PdfPTable tableBox = new PdfPTable(4);
tableBox.setWidths(new float[] { 0.2f, 0.2f, 0.2f, 0.2f });// 每个单元格占多宽
tableBox.setWidthPercentage(80f);
// 获取ATA分类的结果集
// List<ParamRequest > ataList = paramRequest .getRepaylist();
// 创建表格格式及内容
tableBox.addCell(getCell(new Phrase("LoginName", fontChinese), false, 1, 1));
tableBox.addCell(getCell(new Phrase("ApprovedDate", fontChinese), false, 1, 1));
tableBox.addCell(getCell(new Phrase("Statuse", fontChinese), false, 1, 1));
tableBox.addCell(getCell(new Phrase("ReviewComments", fontChinese), false, 1, 1));
// 遍历查询出的结果
for (int i=0;i<60;i++) {
tableBox.addCell(getCell(new Phrase("account"+i, fontChinese), false, 1, 1));
tableBox.addCell(getCell(new Phrase("2021-1-1", fontChinese), false, 1, 1));
tableBox.addCell(getCell(new Phrase("approve", fontChinese), false, 1, 1));
tableBox.addCell(getCell(new Phrase("null", fontChinese), false, 1, 1));
}
ret.add(tableBox);
return ret;
}
/*每个cell的格式,合并单元格情况*/
private static PdfPCell getCell(Phrase phrase, boolean yellowFlag, int colSpan, int rowSpan) {
PdfPCell cells = new PdfPCell(phrase);
cells.setUseAscender(true);
cells.setMinimumHeight(20f);
cells.setHorizontalAlignment(1);
cells.setVerticalAlignment(5);
cells.setColspan(colSpan);
cells.setRowspan(rowSpan);
cells.setNoWrap(false);
return cells;
}
}