PDF去除图片水印

本文介绍了一种使用PDFBox库去除PDF文件中水印的方法。通过调整PDF中的图片尺寸,实现水印的透明化,从而达到去水印的效果。文章提供了详细步骤,包括引入PDFBox依赖和编写Java工具类的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      事情起因是这样的因工作需要需要识别pdf文件内容,但是偶尔会出现识别问题,最终发现是水印遮挡问题,这边特别记录一下解决方法,网上找了很多去水印的方法但是大多数都是spire.pdf的,确实去水印效果很好但是项目运行中会产生无法识别区域设置的问题,然找不到报错原因最终放弃,后面发现了另外一种解决方法,使用pdfbox。

1、引入pdfbox的依赖包

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>fontbox</artifactId>
    <version>2.0.22</version>
</dependency>
2、自己写了一个工具类,使用了一个伪删除
image.setHeight(10);
image.setWidth(10);

设置pdf中的图片的长宽,这样虽然图片还是pdf原来的位置但是已经是透明的了。

package com.fjqwkj.commons.utils;

import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDDocumentCatalog;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;

import java.io.File;
import java.util.Iterator;

public class DeleteImage {
    public static void main(String[] args) {
        try{
            removalFirstImg("E:\\java\\tomcat\\apache-tomcat-9.0.27\\webapps\\upload\\real_file\\9999.pdf","E:\\java\\tomcat\\apache-tomcat-9.0.27\\webapps\\upload\\real_file\\9990.pdf");
        }catch (Exception e){
            e.printStackTrace();
        }
    }


    /**
     * 去除文件列表里图片的水印并替换
     *
     * @Param fileList 文件列表
     */
    public static void  removalFirstImg(String sourPath ,String savePath)  throws Exception {
        PDDocument document = null;
        try {
            File file = new File(sourPath);
            document = PDDocument.load(file);
            PDDocumentCatalog catalog = document.getDocumentCatalog();
            for (Object pageObj :  catalog.getPages()) {
                PDPage page = (PDPage) pageObj;
                PDResources resources = page.getResources();
                Iterable xobjects = resources.getXObjectNames();
                if (xobjects != null) {
                    Iterator imageIter = xobjects.iterator();
                    while (imageIter.hasNext()) {
                        COSName key = (COSName) imageIter.next();
                        if (resources.isImageXObject(key)) {
                            PDImageXObject image = (PDImageXObject)resources.getXObject(key);       
                            image.setHeight(10);
                            image.setWidth(10);
                        }
                    }
                }
            }
            document.save(savePath);

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(null != document){
                document.close();
            }
        }
    }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值