1.设置上下左右边距
Document doc = new Document(PageSize.A4);
doc.setMargins(40, 10, 20, 20);
2.自定义纸张
Rectangle pageSize = new Rectangle(900, 720);
doc.setPageSize(pageSize);
3.设置页眉距离顶部底部距离
底部:cell.setPaddingBottom(3f);
顶部:cell.setPaddingTop(30);
@Override
public void onStartPage(PdfWriter writer, Document document) {
setPageTop(writer, "");
setPageBottom(writer);
}
//页头
private void setPageTop(PdfWriter writer,String tile) throws DocumentException {
PdfPTable pageTop = TableUtils.getPageTopTabletuan(" 职业健康检查总结报告书",1,writer.getPageNumber());
// 将页眉写到document中,位置可以指定,指定到下面就是页眉
pageTop.writeSelectedRows(0, -1, 30, PageSize.A4.getHeight(), writer.getDirectContent());
}
/**
* 获取页眉/团报
* @throws DocumentException
*/
public static PdfPTable getPageTopTabletuan(String title,Integer flag,Integer ageNumber) throws DocumentException {
PdfPTable pageTop = new PdfPTable(1);
pageTop.setTotalWidth(PageSize.A4.getWidth() - 100);
pageTop.setWidths(new int[]{100});
pageTop.setLockedWidth(true);
int year = DateUtil.year(new Date());
PdfPCell cell;
if(flag == 1){
String weekOfYear = String.format("%03d",DateUtil.weekOfYear(new Date()));
cell = CellUtils.getPageTopCell(title+String.format(" 黔卫职检备字(2021)第(015)号",year,weekOfYear),12,Paragraph.ALIGN_LEFT);
}else {
cell = CellUtils.getPageTopCell(title,20,Paragraph.ALIGN_CENTER);
}
cell.setPaddingBottom(3f);
cell.setPaddingTop(30);
pageTop.addCell(cell);
return pageTop;
}
4.换行
Paragraph mwTitle = new Paragraph("\n"+"\n");
doc.add(mwTitle);
doc.add(new Paragraph("\n"));
5.添加图片
public static void main(String[] args) {
PdfPTable signsPdTable = new PdfPTable(6);
String yjPath = "C:\Users\Administrator\Desktop\yangjing.png";
addImg(signsPdTable, yjPath, 1, 3, 50);
}
public static void addImg(PdfPTable signsPdTable, String path, int colspan, int rowspan, int minimumHeight) throws BadElementException, IOException {
Image img = Image.getInstance(path);
PdfPCell imageCell = new PdfPCell(new Phrase());
imageCell.setUseAscender(true); // 设置可以居中
imageCell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER); // 设置水平居中
imageCell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE); // 设置垂直居中
imageCell.setRowspan(rowspan);
imageCell.setColspan(colspan);
imageCell.setImage(img);
imageCell.setMinimumHeight(minimumHeight);
signsPdTable.addCell(imageCell);
}
6.表格中嵌入表格
方式一:直接嵌入
private static void tlJc(Document doc) throws DocumentException {
PdfPTable tlTable = new PdfPTable(2);
tlTable.setLockedWidth(true);
tlTable.setTotalWidth(totalWidth * PDF_PERCENT);
tlTable.addCell(DlUtil.getPdfPCell("图例:"));
tlTable.addCell(DlUtil.getPdfPCell("检查结果:(年龄修正值后)"));
PdfPTable t1 = new PdfPTable(4);
for (int i = 0; i < 9; i++) {
t1.addCell(DlUtil.getPdfPCell("a"));
t1.addCell(DlUtil.getPdfPCell("a"));
t1.addCell(DlUtil.getPdfPCell("a"));
t1.addCell(DlUtil.getPdfPCell("a"));
}
tlTable.addCell(t1);
PdfPTable t2= new PdfPTable(5);
for (int i = 0; i <3; i++) {
t2.addCell(DlUtil.getPdfPCell("b"));
t2.addCell(DlUtil.getPdfPCell("b"));
t2.addCell(DlUtil.getPdfPCell("b"));
t2.addCell(DlUtil.getPdfPCell("b"));
t2.addCell(DlUtil.getPdfPCell("b"));
}
tlTable.addCell(t2);
doc.add(tlTable);
}
方式二:通过单元格嵌入
private static void tlJc(Document doc) throws DocumentException {
PdfPTable tlTable = new PdfPTable(2);
tlTable.setLockedWidth(true);
tlTable.setTotalWidth(totalWidth * PDF_PERCENT);
tlTable.addCell(DlUtil.stBd(DlUtil.getPdfPCell("图例:")));
tlTable.addCell(DlUtil.stBd(DlUtil.getPdfPCell("检查结果:(年龄修正值后)")));
PdfPTable t1 = new PdfPTable(4);
for (int i = 0; i < 9; i++) {
t1.addCell(DlUtil.getPdfPCell("a"));
t1.addCell(DlUtil.getPdfPCell("a"));
t1.addCell(DlUtil.getPdfPCell("a"));
t1.addCell(DlUtil.getPdfPCell("a"));
}
PdfPCell c=new PdfPCell();
c.addElement(t1);
c.setBorder(0);
tlTable.addCell(c);
PdfPTable t2= new PdfPTable(5);
for (int i = 0; i <3; i++) {
t2.addCell(DlUtil.getPdfPCell("b"));
t2.addCell(DlUtil.getPdfPCell("b"));
t2.addCell(DlUtil.getPdfPCell("b"));
t2.addCell(DlUtil.getPdfPCell("b"));
t2.addCell(DlUtil.getPdfPCell("b"));
}
PdfPCell c2=new PdfPCell();
c2.addElement(t2);
c2.setBorder(0);
tlTable.addCell(c2);
tlTable.addCell(c2);
doc.add(tlTable);
}
7.表格中表格线条设置为无
方式一:
PdfPCell cell=new PdfPCell();
cell.setBorder(0);
方式二:
PdfPCell cell=new PdfPCell();
cell.setBorderWidth(0);
8.画斜线
public static void main(String[] args) throws Exception {
Document doc = new Document(PageSize.A4);
doc.setMargins(0, 0, 10, 20);
File f = new File("C:\\Users\\Administrator\\Desktop\\新建文件夹\\"+ RandomUtil.randomString(8) +".pdf");
if (!f.getParentFile().exists()) {
FileUtils.forceMkdir(f.getParentFile());
}
OutputStream outputStream = new FileOutputStream(f);
PdfWriter writer = PdfWriter.getInstance(doc, outputStream);
doc.open();
// 创建一个斜线对象,并设置斜线的颜色、宽度、起始坐标、结束坐标
PdfContentByte canvas = writer.getDirectContent();
canvas.saveState();
//171表示x轴,535表示y轴(如下图斜线的右上角就表示此x轴和y轴的点,x表示距离左边的距离,值越大离左边的距离越远,y表示距离底部的距离,值越大距离越远)
canvas.moveTo(171, 535);
//88表示x轴,450表示y轴(如下图斜线的左下角就表示此x轴和y轴的点,x表示距离左边的距离,值越大离左边的距离越远,y表示距离底部的距离,值越大距离越远)
canvas.lineTo(88, 450);
canvas.stroke();
canvas.restoreState();
doc.close();
writer.close();
outputStream.close();
}
效果: