Java 使用itextpdf添加图片印章到PDF

本文所使用的是itextpdf-5.4.3.jar

JAR包下载地址:http://www.java2s.com/Code/Jar/i/Downloaditextpdf543jar.htm

import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;

import java.io.FileOutputStream;

/**
 * @version V1.0
 * @Description:
 * @Author: Mr.Jie
 */
public class ImageStamp {

    public static void main(String[] args) throws Exception{
        imagePdf("D:\\transfer.png", "D:\\test.pdf");
    }

    /**
     * 功能描述:
     * @Description:
     * @param urljPG 水印图片
     * @param urlPdf PDF路径
     * @Author: Mr.Jie
     */
    public static void imagePdf(String urljPG, String urlPdf) throws Exception {
        // 获取去除后缀的文件路径
        String fileName = urlPdf.substring(0, urlPdf.lastIndexOf("."));
        //把截取的路径,后面追加四位随机数
        String pdfUrl = fileName + (int) ((Math.random() * 9 + 1) * 1000) + ".pdf";
        //要加水印的原pdf文件路径
        PdfReader reader = new PdfReader(urlPdf, "PDF".getBytes());
        //加了水印后要输出的路径
        PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(pdfUrl));
        // 插入水印
        Image img = Image.getInstance(urljPG);
        //原pdf文件的总页数
        int pageSize = reader.getNumberOfPages();
        //印章位置
        img.setAbsolutePosition(350, 620);
        //印章大小
        img.scalePercent(50);
        for (int i = 1; i <= pageSize; i++) {
            //背景被覆盖
//            PdfContentByte under = stamp.getUnderContent(i);
            //文字被覆盖
            PdfContentByte under = stamp.getOverContent(i);
            //添加电子印章
            under.addImage(img);
        }
        // 关闭
        stamp.close();
        //关闭
        reader.close();
    }
}

 

要将印章添加到表格中,可以使用 iText 的 `PdfStamper` 类。首先,您需要创建一个 `PdfTemplate`,将印章添加到它上面,然后将该模板添加到表格单元格中。 以下是一个简单的示例代码,用于将印章添加到表格单元格中: ```java // 创建一个 PDF 文档 Document document = new Document(); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("output.pdf")); document.open(); // 创建一个表格 PdfPTable table = new PdfPTable(1); table.setWidthPercentage(100); // 创建一个单元格 PdfPCell cell = new PdfPCell(); // 创建一个 PdfTemplate,并将印章添加到它上面 PdfTemplate template = writer.getDirectContent().createTemplate(100, 100); template.setLineWidth(1f); template.setColorFill(BaseColor.RED); template.circle(50, 50, 30); template.fill(); // 将 PdfTemplate 添加到单元格中 cell.addElement(new Chunk(template, 0, 0, true)); // 将单元格添加到表格中 table.addCell(cell); // 将表格添加到文档中 document.add(table); document.close(); ``` 在上面的示例代码中,我们创建了一个表格,其中包含一个单元格。然后,我们创建了一个 `PdfTemplate`,并将印章添加到它上面。最后,我们将该模板添加到单元格中,并将单元格添加到表格中。 请注意,在本示例中,我们创建的模板大小为 100x100 像素。如果您的印章比这个大,您需要相应地调整模板大小。 另外,请注意,表格单元格的默认行为是将其内容限制在单元格边界内。如果您希望印章超出单元格,您可以将单元格的 `setPadding` 方法设置为 0,然后将其包含在另一个单元格中,该单元格的 `setPadding` 方法设置为负数。例如,您可以将上面的示例代码中的以下行: ```java cell.addElement(new Chunk(template, 0, 0, true)); ``` 替换为以下行: ```java PdfPCell innerCell = new PdfPCell(new Chunk(template, 0, 0, true)); innerCell.setPadding(-5); cell.addElement(innerCell); cell.setPadding(0); ``` 这将使外部单元格没有填充,内部单元格具有负填充,从而使印章超出单元格边界。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值