iText导出PDF使用小结

新建一PDF页面,设置输出流:
Document document = new Document(PageSize.A4, 20, 20, 20, 20);//上下左右的页面边距
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
PdfWriter writer = PdfWriter.getInstance(document, buffer);//设置输出流


PDF文档进行加密:
writer.setEncryption(PdfWriter.STRENGTH128BITS, "", "",  PdfWriter.AllowPrinting);

第二和第三个参数分别是用户查看密码和主人编辑密码。
权限方面,默认全部不允许,主要有一下权限控制:
PdfWriter.AllowPrinting
PdfWriter.AllowModifyContents
PdfWriter.AllowCopy
PdfWriter.AllowModifyAnnotations
PdfWriter.AllowFillIn
PdfWriter.AllowScreenReaders
PdfWriter.AllowAssembly
PdfWriter.AllowDegradedPrinting

定义中文字体:
目前高版本的iText jar包中大都不提供中文字体,这里使用的是iText1.4.5.jar,里面包含了中文字体。
BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font FontChinese = new Font(bfChinese,10);


页眉中插入表格,表格里面插入图片:
Image img = Image.getInstance(new URL("http://assets.taobaocdn.com/img/chl/fp/logo080808.png"));
img.scalePercent(60);//这只图片缩放比例,这里是60%
img.setAbsolutePosition(0, 0);

Table t = new Table(2,1);
int w[] = {75,25};
t.setWidths(w);
t.setWidth(100);
t.setDefaultHorizontalAlignment(Element.ALIGN_LEFT);
t.setDefaultVerticalAlignment(Element.ALIGN_MIDDLE);
t.setAutoFillEmptyCells(true); //自动填满
t.setPadding(0);
t.setSpacing(0);
t.setDefaultCellBorder(0);
t.setBorder(0);

Cell cell = new Cell();
cell.add(img);
cell.setVerticalAlignment(Element.ALIGN_CENTER);
t.addCell(cell);

Phrase p = new Phrase();
p.add(t);

HeaderFooter header = new HeaderFooter(p,false);
header.setBorder(0);
document.setHeader(header);


纯文本页脚:
Phrase p = new Phrase("杭州市西湖区\n第二行文字",FontChinese);
HeaderFooter footer = new HeaderFooter(p,false);//第二个参数是false表示不输出页码信息
footer.setBorder(0);
footer.setAlignment(Element.ALIGN_CENTER);
document.setFooter(footer);

带页码的页脚:
HeaderFooter footer = new HeaderFooter(new Phrase("页码:",FontChinese, true);  
或者:
HeaderFooter footer = new HeaderFooter(new Phrase("第:",FontChinese), new Phrase("页",FontChinese));
footer.setBorder(Rectangle.NO_BORDER);
document.setFooter(footer);


带表头的分页表格(表格数据比较多,每页第一行是表头信息):
Table detailTable = new Table(3);
int detailWidth[] = {2,3,5};//每列宽度百分比
detailTable.setWidths(detailWidth);
detailTable.setWidth(100); // 占页面宽度 100%

detailTable.setDefaultHorizontalAlignment(Element.ALIGN_LEFT);
detailTable.setDefaultVerticalAlignment(Element.ALIGN_MIDDLE);
detailTable.setAutoFillEmptyCells(true); //自动填满
detailTable.setPadding(1);
detailTable.setSpacing(0);

//表头部分
Cell cellHeader = new Cell(new Phrase("表头一",FontChinese));
cellHeader.setHeader(true);
detailTable.addCell(cellHeader);

cellHeader = new Cell(new Phrase("表头二",FontChinese));
cellHeader.setHeader(true);
detailTable.addCell(cellHeader);

cellHeader = new Cell(new Phrase("表头三",FontChinese));
cellHeader.setHeader(true);
detailTable.addCell(cellHeader);

detailTable.endHeaders();

for(int i=0; i< 50; i++){
detailTable.addCell(new Phrase("内容1",FontChinese));
detailTable.addCell(new Phrase("内容2",FontChinese));
detailTable.addCell(new Phrase("内容3",FontChinese));
}
document.add(detailTable);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值