最近接手一个任务,在网页中通过用户的输入的信息生成一个pdf文档并且下载到用户本地。iText是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。
https://blog.csdn.net/qq_37581708/article/details/79709612这个是一个用法总结,不过还有一些解决不了的问题,以下是自己的一些总结:
1.遇到的问题:
itext/itextg是不支持中文(或其他亚洲语言)的。我想要设置生成的PDF文件的字体样式(包括宋体,仿宋,黑体,楷体)。在网上找了很多方法,比较简单实用的是加载windows自带的字体的方法,这个方法也是我从网上找到的大多数的解决方法,但是这有一个缺点,如果用户是ios系统或者用户的字体不是C:\Windows\Fonts的话,就不能加载到这个字体。
解决方法:
从C:\Windows\Fonts目录下将字体文件复制到项目的static/fonts/之下。
BaseFont FSChinese = BaseFont.createFont("static/fonts/simfang.ttf",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);//这是设置仿宋基本字体
Font text=new Font(FSChinese,16,Font.NORMAL);//这里设置字体大小和粗细
...
通过这种方法终于解决了我的问题!
2.以下是用到的语句:
- Document document = new Document(PageSize.A4, 79, 74, 105, 99);//页边距设置
- document.open();//打开文件
- PdfPTable table = new PdfPTable(3);//创建3列表格
table.setTotalWidth(450f);设置表格具体宽度
table.setLockedWidth(true);//使得格式生效
table.setWidths(new float[]{60f, 15f, 25f});//设置每一列所占的长度(百分比)
cellSet (table,“文字”);
cellSet (table," ");
cellSet (table,“文字”);
document.add(table);//添加表格
//设置表格每个单元的样式
private static void cellSet (PdfPTable table,String value)throws Exception{
BaseFont FSChinese = BaseFont.createFont("static/fonts/simfang.ttf",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
Font text=new Font(FSChinese,16,Font.Font.BOLD);//基本样式,字号(pt),样式(正常/加粗/加斜)
text.setColor(BaseColor.RED);//设置字体颜色
Paragraph paragraph = new Paragraph(value, text);//创建段落
paragraph.setLeading(28.8f);//设置行距
PdfPCell cell = new PdfPCell();//创建表格单元
cell.setPhrase(paragraph);
cell.disableBorderSide(13);//这是一个边框样式,13对应只有下边框显示
cell.setBorderColor(BaseColor.RED);//边框颜色
cell.setPaddingTop(20f);//上边距
table.addCell(cell);
}
- Paragraph paragraph1=new Paragraph(“内容文字”,head1);
paragraph1.setAlignment(Element.ALIGN_CENTER);//居中
document.add(paragraph1); - Paragraph p=new Paragraph(getDateStr(new Date()),text);
p.setFirstLineIndent(248);//首行缩进