新建一PDF页面,设置输出流:
PDF文档进行加密:
第二和第三个参数分别是用户查看密码和主人编辑密码。
权限方面,默认全部不允许,主要有一下权限控制:
PdfWriter.AllowPrinting
PdfWriter.AllowModifyContents
PdfWriter.AllowCopy
PdfWriter.AllowModifyAnnotations
PdfWriter.AllowFillIn
PdfWriter.AllowScreenReaders
PdfWriter.AllowAssembly
PdfWriter.AllowDegradedPrinting
定义中文字体:
目前高版本的iText jar包中大都不提供中文字体,这里使用的是iText1.4.5.jar,里面包含了中文字体。
页眉中插入表格,表格里面插入图片:
纯文本页脚:
带页码的页脚:
带表头的分页表格(表格数据比较多,每页第一行是表头信息):
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);