计算机系统应用教程网站

网站首页 > 技术文章 正文

java操作pdf之iText java pdfwriter

btikc 2024-10-11 11:17:29 技术文章 2 ℃ 0 评论

java操作pdf之iText快速入门

iText是著名的开放项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。

iText官网: http://itextpdf.com/

官网示例: http://itextpdf.com/examples/

更多示例: https://kb.itextpdf.com/home/it5kb/examples

Maven依赖:

    <!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
    <dependency>
      <groupId>com.itextpdf</groupId>
      <artifactId>itextpdf</artifactId>
      <version>5.5.13</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.itextpdf/itext-asian -->
    <dependency>
      <groupId>com.itextpdf</groupId>
      <artifactId>itext-asian</artifactId>
      <version>5.2.0</version>
    </dependency>

添加水印

文字水印

public class PdfWaterMark {
    public static final String RESULT = "src/main/resources/font_water_mark.pdf";

    public static void main(String[] args) throws FileNotFoundException, DocumentException {

        Document document = new Document();
        PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(RESULT));
        // 打开文档
        document.open();
        // 加入水印
        PdfContentByte waterMar = pdfWriter.getDirectContentUnder();
        // 开始设置水印
        waterMar.beginText();
        // 设置水印透明度
        PdfGState gs = new PdfGState();
        // 设置填充字体不透明度为0.4f
        gs.setFillOpacity(0.4f);
        try {
            // 设置水印字体参数及大小                                  (字体参数,字体编码格式,是否将字体信息嵌入到pdf中(一般不需要嵌入),字体大小)
            waterMar.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED), 60);
            // 设置透明度
            waterMar.setGState(gs);
            // 设置水印对齐方式 水印内容 X坐标 Y坐标 旋转角度
            waterMar.showTextAligned(Element.ALIGN_RIGHT, "www.newland.com", 500, 430, 45);
            // 设置水印颜色
            waterMar.setColorFill(BaseColor.GRAY);
            //结束设置
            waterMar.endText();
            waterMar.stroke();
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 加入文档内容
        document.add(new Paragraph("my first pdf demo"));
        // 关闭文档
        document.close();
        pdfWriter.close();
    }

}

图片水印

public class PdfWaterMark {
    public static final String RESULT = "src/main/resources/img_water_mark.pdf";

    public static void main(String[] args) throws FileNotFoundException, DocumentException {

        Document document = new Document();
        PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(RESULT));
        // 打开文档
        document.open();
        // 加入水印
        PdfContentByte waterMar = pdfWriter.getDirectContentUnder();
        // 开始设置水印
        waterMar.beginText();
        // 设置水印透明度
        PdfGState gs = new PdfGState();
        // 设置填充字体不透明度为0.4f
        gs.setFillOpacity(0.4f);
        try {
            Image image = Image.getInstance("D:\\Folder\\image\\logo.png");
            // 设置坐标 绝对位置 X Y
            image.setAbsolutePosition(200, 300);
            // 设置旋转弧度
            image.setRotation(30);// 旋转 弧度
            // 设置旋转角度
            image.setRotationDegrees(45);// 旋转 角度
            // 设置等比缩放
            image.scalePercent(30);// 依照比例缩放
            // image.scaleAbsolute(200,100);//自定义大小
            // 设置透明度
            waterMar.setGState(gs);
            // 添加水印图片
            waterMar.addImage(image);
            // 设置透明度
            waterMar.setGState(gs);
            //结束设置
            waterMar.endText();
            waterMar.stroke();
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 加入文档内容
        document.add(new Paragraph("hello world"));
        // 关闭文档
        document.close();
        pdfWriter.close();
    }

}

给已经存在的pdf添加文字水印

/**
 *  已有的pdf文件添加水印
 * @param inputFile:要加水印的源文件的路径
 * @param outputFile:加水印后文件的输出路径
 * @param waterMarkName:要加的水印名
 */
public static void waterMark(String inputFile,String outputFile, String waterMarkName) {
    try {
        PdfReader reader = new PdfReader(inputFile);
        PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputFile));

        BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);

        PdfGState gs = new PdfGState();
        //改透明度
        gs.setFillOpacity(0.5f);
        gs.setStrokeOpacity(0.4f);
        int total = reader.getNumberOfPages() + 1;

        JLabel label = new JLabel();
        label.setText(waterMarkName);

        PdfContentByte under;
        // 添加一个水印
        for (int i = 1; i < total; i++) {
            // 在内容上方加水印
            under = stamper.getOverContent(i);
            //在内容下方加水印
            //under = stamper.getUnderContent(i);
            gs.setFillOpacity(0.5f);
            under.setGState(gs);
            under.beginText();
            //改变颜色
            under.setColorFill(BaseColor.LIGHT_GRAY);
            //改水印文字大小
            under.setFontAndSize(base, 100);
            under.setTextMatrix(70, 200);
            //后3个参数,x坐标,y坐标,角度
            under.showTextAligned(Element.ALIGN_CENTER, waterMarkName, 300, 350, 55);

            under.endText();
        }
        stamper.close();
        reader.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

给已经存在的pdf添加图片水印

/**
 * @param inputFile:要加水印的源文件的路径
 * @param outputFile:加水印后文件的输出路径
 * @param pocturePath:           图片的位置
 */
public static void pictureWaterMark(String inputFile, String outputFile, String pocturePath) {
    try {
        PdfReader reader = new PdfReader(inputFile);
        PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputFile));


        PdfGState gs = new PdfGState();
        //设置透明度
        gs.setFillOpacity(0.3f);
        gs.setStrokeOpacity(0.4f);
        int total = reader.getNumberOfPages() + 1;
        
        PdfContentByte waterMar;
        // 添加一个水印
        for (int i = 1; i < total; i++) {
            // 在内容上方加水印
            waterMar = stamper.getOverContent(i);
            //在内容下方加水印
            //under = stamper.getUnderContent(i);
            waterMar.setGState(gs);
            waterMar.beginText();
            Image image = Image.getInstance(pocturePath);
            // 设置坐标 绝对位置 X Y
            image.setAbsolutePosition(150, 250);
            // 设置旋转弧度
            image.setRotation(30);// 旋转 弧度
            // 设置旋转角度
            image.setRotationDegrees(45);// 旋转 角度
            // 设置等比缩放
            image.scalePercent(30);// 依照比例缩放
            // image.scaleAbsolute(200,100);//自定义大小
            // 添加水印图片
            waterMar.addImage(image);
            // 设置透明度
            waterMar.setGState(gs);
            //结束设置
            waterMar.endText();
            waterMar.stroke();
        }
        stamper.close();
        reader.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表