当前位置: 首页 > news >正文

建网站服务器用什么wordpress 添加固定字段

建网站服务器用什么,wordpress 添加固定字段,东莞抖音推广,广州安全教育平台入口登录Java 实现给pdf文件指定位置盖章功能 开发中遇到一个需求, 需要给用户上传的的pdf文件, 指定位置上盖公章的功能, 经过调研和对比, 最终确定实现思路. 这里是使用pdf文件中的关键字进行章子的定位, 之所以这样考虑是因为如果直接写死坐标的话, 可能会出现因pdf大小, 缩放, 盖章…

Java 实现给pdf文件指定位置盖章功能

开发中遇到一个需求, 需要给用户上传的的pdf文件, 指定位置上盖公章的功能, 经过调研和对比, 最终确定实现思路.

这里是使用pdf文件中的关键字进行章子的定位, 之所以这样考虑是因为如果直接写死坐标的话, 可能会出现因pdf大小, 缩放, 盖章位置变更的原因, 导致公章位置错位. 所以选择了根据关键字定位的方式.

下面列出具体的实现方式:

  1. 使用的是Java语言, 使用Maven管理依赖, 下面是操作pdf所依赖的库的坐标

    <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.12</version>
    </dependency>
    <dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version>
    </dependency>
    
  2. 下面是具体的代码逻辑

    • CustomRenderListener, 自定义渲染监听器, 实现查找关键字自有逻辑

      import com.itextpdf.awt.geom.Rectangle2D.Float;
      import com.itextpdf.text.pdf.parser.ImageRenderInfo;
      import com.itextpdf.text.pdf.parser.RenderListener;
      import com.itextpdf.text.pdf.parser.TextRenderInfo;
      import lombok.Data;/*** pdf关键词帮助类** @author wdhcr*/
      @Data
      public class CustomRenderListener implements RenderListener {// 坐标private float[] coordinate = null;// 关键字private String keyWord;// pdf当前页private int page;@Overridepublic void beginTextBlock() {}@Overridepublic void endTextBlock() {}@Overridepublic void renderImage(ImageRenderInfo arg0) {}@Overridepublic void renderText(TextRenderInfo textRenderInfo) {String text = textRenderInfo.getText();if (null != text && text.contains(keyWord)) {Float boundingRange = textRenderInfo.getBaseline().getBoundingRectange();coordinate = new float[3];coordinate[0] = boundingRange.x;coordinate[1] = boundingRange.y;coordinate[2] = page;}}
      }
      
    • 获取关键字坐标的工具类

      import com.itextpdf.text.Image;
      import com.itextpdf.text.pdf.PdfContentByte;
      import com.itextpdf.text.pdf.PdfGState;
      import com.itextpdf.text.pdf.PdfReader;
      import com.itextpdf.text.pdf.PdfStamper;
      import com.itextpdf.text.pdf.parser.PdfReaderContentParser;
      import com.jkwl.common.exception.BaseException;
      import lombok.SneakyThrows;
      import lombok.extern.slf4j.Slf4j;import java.io.*;/*** Pdf定位工具类* @author wdhcr*/
      @Slf4j
      public class PdfUtils {/*** 获取关键字所在PDF坐标** @param pdfReader 流* @param keyWords  关键词* @return float[] 坐标*/public static float[] getKeyWords(PdfReader pdfReader, String keyWords) {float[] coordinate = null;int page = 0;try {int pageNum = pdfReader.getNumberOfPages();PdfReaderContentParser pdfReaderContentParser = new PdfReaderContentParser(pdfReader);CustomRenderListener renderListener = new CustomRenderListener();renderListener.setKeyWord(keyWords);for (page = 1; page <= pageNum; page++) {renderListener.setPage(page);pdfReaderContentParser.processContent(page, renderListener);coordinate = renderListener.getCoordinate();if (coordinate != null) {break;}}} catch (IOException e) {e.printStackTrace();}return coordinate;}@SneakyThrowspublic static void stampToPdf(InputStream pdfInputStream, String keyWords, InputStream sealInputStream, OutputStream outputStream) {byte[] sealBytes = sealInputStream.readAllBytes();PdfReader reader = new PdfReader(pdfInputStream);float[] xyz = PdfUtils.getKeyWords(reader, keyWords);if (xyz == null) {throw new BaseException("未找到盖章位置");}PdfStamper stamper = new PdfStamper(reader, outputStream);// 将印章图片放在pdf文件的第?页PdfContentByte over = stamper.getOverContent((int) xyz[2]);// 需要插入的图片Image contractSealImg = Image.getInstance(sealBytes);// 保存状态over.saveState();// 图片处理PdfGState pdfGState = new PdfGState();// 给图片设置透明度,一般不需要pdfGState.setFillOpacity(0.8F);over.setGState(pdfGState);contractSealImg.setAbsolutePosition(xyz[0] + 50, xyz[1] - 40);// 设置图片大小contractSealImg.scaleAbsolute(100, 100);// 将图片添加到pdf文件over.addImage(contractSealImg);over.restoreState();stamper.setFormFlattening(true);// 关闭流stamper.close();reader.close();}}
      
    • 测试demo

          @SneakyThrowspublic static void main(String[] args) {FileInputStream pdfInputStream = new FileInputStream("/Users/Desktop/报告模版.pdf");FileInputStream sealInputStream = new FileInputStream("/Users/Desktop/dbd.png");FileOutputStream fileOutputStream = new FileOutputStream("/Users/Desktop/报告模版盖章.pdf");// 关键字为: 签发日期PdfUtils.stampToPdf(pdfInputStream, "签发日期", sealInputStream, fileOutputStream);fileOutputStream.close();pdfInputStream.close();sealInputStream.close();System.out.println("盖章完成");}
      
    • 公章如图所示

      seal

    • 报告模版如下:

      image-20241211145537180

    • 盖完章后

      image-20241211145618814

http://www.yayakq.cn/news/131215/

相关文章:

  • 加盟招商推广网站广州专业的网站建设
  • 网站空间商拿不回数据wordpress主题配置修改
  • 个体户做网站与公司好wordpress自定义字段面板
  • 网站建设与制作软件付费链接生成平台
  • 网站建设推销话术案例厦门网站建设企
  • 做k12网站装修公司怎样拉客户
  • 阿里云建站保证销售额织梦源码模板下载商城网站模板 整站带栏目高端大气上档次含数据
  • 济宁哪里有网站建设百度推广优化方案
  • 哪个设计网站赚钱网站建设流程百度经验
  • 有几个网站如何做外贸全国城乡和住房建设厅查询网
  • 泉州企业免费建站广州网站开发培训
  • 家具设计师常去的网站做3d图的网站有哪些软件有哪些
  • 新民电子网站建设哪家好网泰网站建设
  • 网站建设工具品牌有门户网站建设好如何维护
  • 关于中国幼教网站开发的经验四川学校网站建设公
  • 有专做代金券的网站吗手机怎么登录自己做的网站
  • 网站右侧悬浮代码深圳福田网站建设
  • 个人建站 wordpress建设内部网站
  • 时尚美容网站建设seo顾问是什么职业
  • 怎么把网站上传到空间济宁做网站公司找融合
  • 兰州市做网站的公司动漫版
  • 南京建设网站哪家好如何做网站推广
  • 建设局网站买卖合同外贸平台有哪些用户量大的
  • 大连建设工程信息网改名为什么百度seo快速
  • 网站推广营销运营方式主要是WordPress
  • 通州设计网站建设移动互联网时代的渠道模式创新
  • ai网站大全可以做水印的网站
  • 网站的优点有哪些方面安阳做网站公司
  • h5网站开发软件自己做的网站怎么设置地址
  • 济宁网站建设 智雅公司建一个网站多少钱