Java为pdf电子签章(关键字盖章)

您所在的位置:网站首页 盖章的字怎么写的图片 Java为pdf电子签章(关键字盖章)

Java为pdf电子签章(关键字盖章)

2024-07-15 21:18:13| 来源: 网络整理| 查看: 265

1、pom依赖

            com.itextpdf             itextpdf             5.5.11         

                     com.itextpdf             itext7-core             7.2.0         

2、关键字信息查找

package com.example.study.demo.pdfSign;

import cn.hutool.core.collection.CollectionUtil; import com.itextpdf.kernel.geom.Rectangle; import com.itextpdf.kernel.pdf.PdfDocument; import com.itextpdf.kernel.pdf.PdfPage; import com.itextpdf.kernel.pdf.PdfReader; import com.itextpdf.kernel.pdf.canvas.parser.PdfCanvasProcessor; import com.itextpdf.kernel.pdf.canvas.parser.listener.IPdfTextLocation; import com.itextpdf.kernel.pdf.canvas.parser.listener.RegexBasedLocationExtractionStrategy;

import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map;

public class FindKey {

    /**      * 获取关键字位置信息map      * key为页数,value为当页关键字信息集合      */     public static Map keyWordLocationMap(String input, String keyword) {         Map listMap;         try(PdfReader reader = new PdfReader(input);PdfDocument pdfDocument = new PdfDocument(reader)) {             int pageNumbers = pdfDocument.getNumberOfPages();             listMap = new HashMap(pageNumbers);             for (int i = 1; i                     List keyWordInfoList = new ArrayList();                     List iPdfTextLocationList = CollectionUtil.newArrayList(resultantLocations);                     for (int m = 0; m < iPdfTextLocationList.size(); m++) {                         IPdfTextLocation item = iPdfTextLocationList.get(m);                         Rectangle boundRectangle = item.getRectangle();                         KeyWordInfo keyWordInfo = new KeyWordInfo();                         keyWordInfo.setPage(i);                         keyWordInfo.setX(boundRectangle.getX());                         keyWordInfo.setY(boundRectangle.getY());                         keyWordInfo.setWidth(boundRectangle.getWidth());                         keyWordInfo.setHeight(boundRectangle.getHeight());                         keyWordInfo.setText(item.getText());                         keyWordInfo.setNum(m + 1);                         System.out.println("关键字“" + keyword + "” 的坐标为 x: " + boundRectangle.getX() + "  ,y: " + boundRectangle.getY());                         keyWordInfoList.add(keyWordInfo);                     }                     listMap.put(i, keyWordInfoList);                 }             }         } catch (IOException e) {             throw new RuntimeException(e);         }         return listMap;     }

}

package com.example.study.demo.pdfSign;

import lombok.Data; @Data public class KeyWordInfo{

    private float x;     private float y;     private float width;     private float height;     /**      * pdf的页面      */     private int page;     /**      * 当前页面中第几个      */     private int num;     private String text;

}

3、关键字签章、指定位置签章demo

package com.example.study.demo.pdfSign;

import cn.hutool.core.date.DateUtil; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Image; import com.itextpdf.text.Rectangle; import com.itextpdf.text.pdf.PdfContentByte; import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.PdfStamper;

import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.Date; import java.util.List; import java.util.Map;

public class ItextTest {

    /**      * 指定位置盖章      */     public static void main1(String[] args) throws Exception {         String dateStr = DateUtil.format(new Date(),"yyyyMMdd-HHmm");         String inputPdf = "D://test//pdf//test2.pdf";         String outputPdf = "D://test//pdf//指定位置签章-itext-".concat(dateStr).concat(".pdf");         String stampImage ="D://test//pdf//zhang.png";

        ByteArrayOutputStream memoryStream = readFileToMemoryStream(inputPdf);         PdfReader reader = new PdfReader(memoryStream.toByteArray());         PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputPdf));

        Image image = Image.getInstance(stampImage);         //设置签字图片宽高         image.scaleToFit(100, 100);

        PdfContentByte content;         Rectangle pageSize;         int pageCount = reader.getNumberOfPages();         for(int i=1; i         String dateStr = DateUtil.format(new Date(),"yyyyMMdd-HHmm");         String inputPdf = "D://test//pdf//test2.pdf";         String outputPdf = "D://test//pdf//关键字签章-itext-".concat(dateStr).concat(".pdf");         String stampImage ="D://test//pdf//zhang.png";         // 要盖章的关键字         String keyword = "张三看看";

        // 关键字位置信息map         Map map = FindKey.keyWordLocationMap(inputPdf,keyword);

        ByteArrayOutputStream memoryStream = readFileToMemoryStream(inputPdf);         PdfReader pdfReader = new PdfReader(memoryStream.toByteArray());         PdfStamper pdfStamper = new PdfStamper(pdfReader, Files.newOutputStream(Paths.get(outputPdf)));

        Image image = Image.getInstance(stampImage);         //设置签字图片宽高         image.scaleAbsolute(100, 100);

        int pageCount = pdfReader.getNumberOfPages();         for(int i=1; i                 //签章图片位置坐标                 float absoluteX = keyWordInfo.getX() + keyWordInfo.getWidth()/2 - image.getScaledWidth()/2 ;                 float absoluteY = keyWordInfo.getY() + keyWordInfo.getHeight()/2 - image.getScaledHeight()/2;                 image.setAbsolutePosition(absoluteX, absoluteY);                 content.addImage(image);             }         }

        pdfStamper.close();         pdfReader.close();     }

    private static ByteArrayOutputStream readFileToMemoryStream(String filePath) throws IOException {         ByteArrayOutputStream memoryStream = new ByteArrayOutputStream();         // 缓冲区大小         byte[] buffer = new byte[1024];         try (FileInputStream fis = new FileInputStream(filePath)) {             int bytesRead;             while ((bytesRead = fis.read(buffer)) != -1) {                 memoryStream.write(buffer, 0, bytesRead);             }         }         return memoryStream;     }

}  



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭