当前位置: 代码网 > it编程>编程语言>Java > Java操作itextpdf实现PDF添加文字,图片和签名

Java操作itextpdf实现PDF添加文字,图片和签名

2025年01月17日 Java 我要评论
参考文章:java pdf 截取n页,生成新文件,转图片,多个pdf 合并itextpdf pdf 文字、图片 签名<itextpdf.version>5.5.13</itextpd

参考文章:java pdf 截取n页,生成新文件,转图片,多个pdf 合并

itextpdf pdf 文字、图片 签名

<itextpdf.version>5.5.13</itextpdf.version>
<itext-asian.version>5.2.0</itext-asian.version>

<dependency>
    <groupid>com.itextpdf</groupid>
    <artifactid>itextpdf</artifactid>
    <version>${itextpdf.version}</version>
</dependency>
<!--没有这个的话,添加文字会报错-->
<dependency>
    <groupid>com.itextpdf</groupid>
    <artifactid>itext-asian</artifactid>
    <version>${itext-asian.version}</version>
</dependency>

实现代码 

public class pdfelementinfo {
    public enum typeenum {
        unknown,
        text,
        image
    }

    /**
     * 1. 文本
     * 2. 图片
     */
    private int type;
    private float x;
    private float y;
    /**
     * 文本内容
     */
    private string text;
    private float fontsize;
    /**
     * 路径
     */
    private string imgpath;

   ...getter & setter....
}

    /**
     * 添加文字水印
     *
     * @param inputurl
     * @param outputurl
     * @param elementinfolist
     * @param pagerange       -1 全部,空:第一页,1:第一页,1~3:第1、2、3页
     */
    private void addelement(string inputurl, string outputurl, list<pdfelementinfo> elementinfolist, string... pagerange) {
        pdfstamper stamper = null;
        pdfreader reader = null;
        try {
            bufferedoutputstream bos = new bufferedoutputstream(new fileoutputstream(new file(outputurl), false));
            reader = new pdfreader(inputurl);
            stamper = new pdfstamper(reader, bos);
            int total = reader.getnumberofpages() + 1;
            list<integer> pagenumlist = new arraylist<>();
            if (pagerange.length == 0) {
                pagenumlist.add(1);
            }
            if (pagenumlist.size() > total) {
                throw new customexception("指定页,超过了pdf文件页数");
            }
            pdfcontentbyte content;
            // basefont base = basefont.createfont("stsong-light", "unigb-ucs2-h", basefont.embedded);
            // "c:\\windows\\fonts\\simhei.ttf" 使用windows系统的黑体
            basefont base = basefont.createfont("c:\\windows\\fonts\\simhei.ttf", basefont.identity_h, basefont.not_embedded);
            pdfgstate gs = new pdfgstate();
            for (integer pagenum : pagenumlist) {
                content = stamper.getovercontent(pagenum);// 在内容上方加水印
//                content = stamper.getundercontent(pagenum);//在内容下方加水印
                gs.setfillopacity(0.2f);
                content.begintext();
                //content.settextmatrix(390, 810);
                //内容居中,横纵坐标,偏移量
                //content.showtextaligned(element.align_center, "aaaa", 179.54f, 718.62f, 0);
                for (pdfelementinfo textinfo : elementinfolist.stream().filter(p -> p.gettype() == 1).collect(collectors.tolist())) {
                    //字体大小
                    content.setfontandsize(base, textinfo.getfontsize());
                    content.showtextaligned(element.align_center, textinfo.gettext(), textinfo.getx(), textinfo.gety(), 0);
                }

                for (pdfelementinfo imginfo : elementinfolist.stream().filter(p -> p.gettype() == 2).collect(collectors.tolist())) {
                    //添加图片
                    image image = image.getinstance(imginfo.getimgpath());
                    /*
                      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(imginfo.getx(), imginfo.gety());
                    // image of the absolute,宽、高,取最值值进行适配
                    image.scaletofit(100, 100);
                    //image.scalepercent(imginfo.getscalepercent());//依照比例缩放. 调整缩放,控制图片大小
                    content.addimage(image);
                }
                content.setfontandsize(base, 8);
                content.endtext();
            }
        } catch (exception ex) {
            ex.printstacktrace();
        } finally {
            try {
                if (stamper != null) {
                    stamper.close();
                }
                //关闭打开的原来pdf文件,不执行reader.close()删除不了(必须先执行stamper.close(),否则会报错)
                if (reader != null) {
                    reader.close();
                }
            } catch (exception e) {
                e.printstacktrace();
            }
        }
    }

测试类 

   @test
    void testsignature() throws exception {

        string inputurl = "d:\\thoth\\0.syncservice\\api.22586\\report\\report.pdf";
        //生成的文件路径
        string outputurl = "d:\\thoth\\0.syncservice\\api.22586\\report\\report_out_" + dateutil.current() + ".pdf";

        string imageurl = "d:\\users\\pictures\\r-c.png";

        list<pdfelementinfo> elementinfolist = new arraylist<>();

        pdfelementinfo textinfo = new pdfelementinfo();
        textinfo.settype(pdfelementinfo.typeenum.text.ordinal());
        textinfo.setfontsize(10.5f);
        textinfo.setx(200f);
        textinfo.sety(100f);
        textinfo.settext("张三" + dateutil.current());
        elementinfolist.add(textinfo);

        textinfo = new pdfelementinfo();
        textinfo.settype(pdfelementinfo.typeenum.text.ordinal());
        textinfo.setfontsize(10.5f);
        textinfo.setx(400f);
        textinfo.sety(100f);
        textinfo.settext("李四" + dateutil.current());
        elementinfolist.add(textinfo);


        pdfelementinfo imginfo = new pdfelementinfo();
        imginfo.settype(pdfelementinfo.typeenum.image.ordinal());
        imginfo.setx(100f);
        imginfo.sety(200f);
        imginfo.setimgpath(imageurl);
        elementinfolist.add(imginfo);

        addelement(inputurl, outputurl, elementinfolist);
        //删除原来的pdf文件
            /*file targettemplepdf = new file(inputpdffilepath);
            targettemplepdf.delete();*/
    }

最终效果如下

到此这篇关于java操作itextpdf实现pdf添加文字,图片和签名的文章就介绍到这了,更多相关java itextpdf pdf添加文字图片签名内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com