itextpdf 使用笔记

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();
}

效果:
在这里插入图片描述

9.访问项目下的文件

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在给itextpdf文档添加水印时,可以选择添加一个带背景的水印。首先,我们需要创建一个PdfGState对象,使用setFillOpacity()方法设置透明度,然后将该对象应用到PdfContentByte对象中。接下来,我们可以使用showTextAligned()方法将水印文本添加到页面上。为了添加背景,我们可以使用Rectangle对象创建一个矩形,并使用setFillOpacity()方法设置透明度,在PdfContentByte对象中使用rectangle()方法绘制这个矩形。然后,我们可以使用fillStroke()方法填充和描边矩形以添加背景。最后,我们可以使用beginText()方法重新开始文本流,并使用setTextMatrix()方法设置文本位置和旋转角度。最后,我们使用showText()方法将文本添加到页面上。 同时,请注意,这里的"复杂度"一词是指添加水印的过程中的图像处理复杂度,而不是指水印本身的复杂度。在添加水印时,可能会涉及到像素深度的比较和替换,以及对图像的滤波等操作。例如,可能需要比较水印区域的像素深度并进行替换,或者根据频率滤除低频和高频区域。这些复杂度与水印添加的具体操作和效果有关。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [GAMES101现代计算机图形学入门-闫令琪-随堂笔记-Lecture 06 Rasterization 2 (Antialiasing and Z-...](https://blog.csdn.net/weixin_44848751/article/details/127883469)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值