
生成带表格的pdf参考
java处理pdf文件——iText的使用_xiaomifeng1010的博客-CSDN博客_java处理pdf文件PDF(Portable Document Format的简称,意为“便携式文档格式”),是由Adobe Systems用于与应用程序、 *** 作系统、硬件无关的方式进行文件交换所发展出的文件格式。PDF文件以PostScript语言图象模型为基础,无论在哪种打印机上都可保证精确的颜色和准确的打印效果,即PDF会忠实地再现原稿的每一个字符、颜色以及图象。(来自百度百科的介绍)。可以用来...https://blog.csdn.net/u011174699/article/details/105903929pom
com.itextpdf
itextpdf
5.5.13.1
com.itextpdf
itext7-core
7.1.8
org.apache.pdfbox
pdfbox
2.0.19
org.apache.commons
commons-logging
com.itextpdf
itext-asian
5.2.0
生成带表格的pdf
import com.itextpdf.io.font.PdfEncodings;
import com.itextpdf.kernel.colors.ColorConstants;
import com.itextpdf.kernel.colors.DeviceGray;
import com.itextpdf.kernel.colors.DeviceRgb;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.property.HorizontalAlignment;
import com.itextpdf.layout.property.TextAlignment;
import com.itextpdf.layout.property.UnitValue;
import com.itextpdf.layout.property.VerticalAlignment;
import com.itextpdf.text.Document;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.*;
import java.io.File;
import java.io.IOException;
import java.util.Map;
import java.io.*;
import java.util.*;
public static void createTablePdfFile(String savePath, String fontPath, List tableData, String title, int width){
try{
File pdfFile=new File(savePath);
if(!pdfFile.exists()){
pdfFile.getParentFile().mkdir();
}
// PdfFont pdfFont= PdfFontFactory.createFont(StandardFonts.HELVETICA);
// 设置中文字体为黑体常规(传入一个字体路径或者itext中内置支持的字体,如上)
PdfFont documentFont=PdfFontFactory.createFont(fontPath, PdfEncodings.IDENTITY_H,true);
// 使用font-asian中的字体,设置字体华文宋体(STSong-Light)
PdfFont tableFont=PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H",true);
com.itextpdf.kernel.pdf.PdfDocument pdfDocument=new com.itextpdf.kernel.pdf.PdfDocument(new com.itextpdf.kernel.pdf.PdfWriter(pdfFile));
com.itextpdf.layout.Document document=new com.itextpdf.layout.Document(pdfDocument);
// 设置文本居中对齐
document.setTextAlignment(TextAlignment.CENTER);
document.setHorizontalAlignment(HorizontalAlignment.CENTER);
// 设置文档字体
document.setFont(documentFont);
// 表格标题
Paragraph tableTitle=new Paragraph(title);
// 设置表格标题字体和颜色(段落)
tableTitle.setFont(documentFont).setFontColor(DeviceGray.BLACK);
document.add(tableTitle);
Table table=new Table(UnitValue.createPercentArray(tableData.get(0).length)).useAllAvailableWidth();
// 设置表格字体
table.setFont(tableFont);
// 设置表格列宽
table.setWidth(width);
// 设置表格背景色
// table.setBackgroundColor(ColorConstants.LIGHT_GRAY);
// 设置表格文本居中对齐
table.setTextAlignment(TextAlignment.CENTER);
// 设置表格垂直对齐方式
table.setVerticalAlignment(VerticalAlignment.MIDDLE);
// 设置表格水平对齐方式
table.setHorizontalAlignment(HorizontalAlignment.CENTER);
// Cell cell=new Cell();
// 设置单元格背景色为深灰色
// cell.setBackgroundColor(ColorConstants.DARK_GRAY);
for (String[] row :
tableData) {
// 更精确的颜色可以使用new DeviceRgb()传入三原色的数值[0-255]来设置
// new DeviceRgb(13,23,5);
for (String cell : row) {
table.addCell(new Paragraph(cell).setFontColor(DeviceRgb.BLACK));
}
}
UnitValue height = table.getHeight();
document.add(table);
pdfDocument.close();
}catch (Exception e){
e.printStackTrace();
}
}
另一种方式是指定坐标生成
public static void createPdfFileTest(String savePath, String fontPath){
// 创建文档页面(设置为矩形A4大小)
PDPage page = new PDPage(PDRectangle.A4);
// 创建pdf文档对象,以及页面内容流对象
try {
File pdfFile=new File(savePath);
if(!pdfFile.exists()){
pdfFile.getParentFile().mkdir();
}
PdfFont pdfFont = PdfFontFactory.createFont(fontPath, PdfEncodings.IDENTITY_H, true);
PdfFont tableFont = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H",true);
PDDocument pdfDocument=new PDDocument();
PDPageContentStream pageContentStream=new PDPageContentStream(pdfDocument,page);
pdfDocument.addPage(page);
// 设置字体为Helvetica-Bold或TIMES_ROMAN;,类库中没有中文字体,程序会去查找本地是否安装了该字体,查找非常慢
PDFont font= PDType1Font.TIMES_ROMAN;
// 开始页面的文本 *** 作
pageContentStream.beginText();
pageContentStream.setFont(font,12);
pageContentStream.moveTextPositionByAmount(100,700);
// 因为jar包中自带的没有中文字体,所以写入中文会出异常
pageContentStream.showText("hello");
// 结束页面文本 *** 作
pageContentStream.endText();
pageContentStream.close();
// pdf文档保存在本项目所在磁盘下data目录下
pdfDocument.save(pdfFile);
System.out.println("文件写入成功");
} catch (Exception e) {
e.printStackTrace();
}finally{
// 流虽然都关闭了,但是还是无法删除文件,所以手动调用一下gc
System.gc();
System.out.println("执行垃圾回收");
}
}
main方法:
public static void main(String[] args) {
FileOutputStream out= null;
PdfReader reader=null;
PdfStamper pdfStamper=null;
try {
String createFile = "K:\\create.pdf";
String fontPath = "c:\\Windows\\fonts\\simhei.ttf";
long start = System.currentTimeMillis();
String title = "人员信息表";
List tableData = new ArrayList<>();
tableData.add(new String[]{"交易类型", "时间", "金额"});
tableData.add(new String[]{"放款", "2022/10/11 18:23:22", "28432.00"});
tableData.add(new String[]{"还款", "2022/10/13 18:23:22", "11.00"});
tableData.add(new String[]{"还款", "2022/10/13 18:23:22", "12.00"});
tableData.add(new String[]{"还款", "2022/10/13 18:23:22", "52.00"});
tableData.add(new String[]{"罚息", "2022/10/15 18:23:22", "11111.00"});
createTablePdfFile(createFile, fontPath, tableData, title, 500);
// createPdfFileTest(createFile, fontPath);
long end = System.currentTimeMillis() - start;
System.out.println(end);
System.out.println(tableData.size());
} catch (Exception e) {
e.printStackTrace();
}
}
效果:
创建表单域做为pdf模板:
带有表单域填充的pdf,使用edge 打开会显示不出来填充的值,这里要特别注意下。
效果:
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)