java实现在pdf中添加文字和图片

一、在pom文件中引入对应的包:

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.4.3</version>
</dependency>
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itext-asian</artifactId>
    <version>5.2.0</version>
</dependency>

二、添加java代码

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.UUID;

import com.itextpdf.text.Element;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfGState;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;

public class WaterPrintUtil {

    public static void setWaterPrint(BufferedOutputStream bos, String inputPDFFilePath, String contentText)
            throws Exception {
        PdfReader reader = new PdfReader(inputPDFFilePath);
        PdfStamper stamper = new PdfStamper(reader, bos);
        int total = reader.getNumberOfPages() + 1;
        PdfContentByte content;
        BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
        PdfGState gs = new PdfGState();
        for (int i = 1; i < total; i++) {
            //content = stamper.getOverContent(i);// 在内容上方加水印
            content = stamper.getUnderContent(i);//在内容下方加水印
            gs.setFillOpacity(0.2f);
            content.beginText();

            //字体大小
            content.setFontAndSize(base, 9);
            //content.setTextMatrix(70, 200);
            //内容居中,横纵坐标,偏移量
            content.showTextAligned(Element.ALIGN_CENTER, contentText, 390, 810, 0);

            //添加图片
            Image image = Image.getInstance("D:\\测试图片.jpg");

            /*
              img.setAlignment(Image.LEFT | Image.TEXTWRAP);
              img.setBorder(Image.BOX); img.setBorderWidth(10);
              img.setBorderColor(BaseColor.WHITE); img.scaleToFit(100072);//大小
              img.setRotationDegrees(-30);//旋转
             */
            //图片的位置(坐标)
            image.setAbsolutePosition(520, 786);
            // image of the absolute
            image.scaleToFit(200, 200);
            image.scalePercent(15);//依照比例缩放
            content.addImage(image);
            content.setFontAndSize(base, 8);

            content.endText();
        }
        stamper.close();
        //关闭打开的原来PDF文件,不执行reader.close()删除不了(必须先执行stamper.close(),否则会报错)
        reader.close();
        //删除原来的PDF文件
        File targetTemplePDF = new File(inputPDFFilePath);
        targetTemplePDF.delete();
    }

    public static void main(String[] args) throws Exception {

        // 要输出的pdf文件
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File("D:\\测试PDF01.pdf")));
        // 将pdf文件先加水印然后输出
        setQRCodeWater(bos, "D:\\测试PDF.pdf", "添加的文字内容");
    }
}

因项目只需保留添加完水印的pdf文件,所以在代码中有将原来的pdf文件删除。

注意:输入输出的文件不能是同一个文件,否则会报错。

在引入itextpdf包的时候有出现版本冲突的情况,原本引入的是5.5.13的版本,后改为5.4.3的版本,对应的bcprov包为:

<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.48</version>
</dependency>

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值