java PDF电子签章、文件拆分、文件合并

日常工作常用问题记录,本次使用的是PDFBox实现的

pom依赖

<!-- https://mvnrepository.com/artifact/org.apache.pdfbox/fontbox -->
<dependency><groupId>org.apache.pdfbox</groupId><artifactId>fontbox</artifactId><version>2.0.24</version>
</dependency>

PDF电子签章


电子签章分为二种,一种是图片盖章,一种是动态插文本值
图片盖章一般用于公章、或一些固定需求
动态文本插值一般用于读取数据动态填充到文件中

图片盖戳

@Testpublic void img() throws IOException {//文件地址File file = new File("C:\\Users\\0\\Desktop\\10.pdf");//加载PDF文件PDDocument doc = PDDocument.load(file);//获取文件页数PDPage page = doc.getPage(1);//加载图片与文件对象PDImageXObject pdImage = PDImageXObject.createFromFile("C:\\Users\\0\\Desktop\\1.png",doc);//加载内容流属性,//参数1:文件对象、2:操作页对象、3:操作方式,分为覆盖、追加、加载前追加,一般用加载前追加、4:默认false,5:默认truePDPageContentStream contents = new PDPageContentStream(doc, page, PDPageContentStream.AppendMode.PREPEND,false,true);//盖章的PDF文件定位坐标contents.drawImage(pdImage, 270, 440);//关闭流contents.close();//重新生成新的盖章文件doc.save("C:\\Users\\0\\Desktop\\2.pdf");//关闭流doc.close();}

文本插值

@Testpublic void pdfTest() throws Exception {File file = new File("C:\\Users\\0\\Desktop\\10.pdf");PDDocument doc = PDDocument.load(file);PDPage page = doc.getPage(1 );//加载字体,必须用支持中文的字体,不然插中文值会报错PDFont font = PDType0Font.load(doc, new File("C:\\Windows\\Fonts\\simhei.ttf"));PDPageContentStream contentStream = new PDPageContentStream(doc, page,PDPageContentStream.AppendMode.PREPEND,true,true);//开启文本插值contentStream.beginText();//插值坐标float tx =  202.136F;float ty =  8.35F;contentStream.newLineAtOffset(tx, ty);//字体大小contentStream.setFont(font, 12);//阅读间隙contentStream.setLeading(14f);String text1 = "值1";String text11 = "值2";String text2 = "值3";String text3 = "值4";contentStream.showText(text1);newLineNum(contentStream,1);contentStream.showText(text11);newLineNum(contentStream,2);contentStream.showText(text2);newLineNum(contentStream,3);contentStream.showText(text3);newLineNum(contentStream,3);//关闭文本插值contentStream.endText();contentStream.close();doc.save(new File("C:\\Users\\0\\Desktop\\11.pdf"));doc.close();}private void newLineNum(PDPageContentStream contentStream, int num) throws IOException {for (int i = 1; i <= num; i++) {contentStream.newLine();}}

文件拆分

一般用于文件需要拆分成多份文件需求

@Testpublic void PdfFenGe() throws IOException, JSONException {File file = new File("C:\\Users\\0\\Desktop\\-222.pdf");PDDocument document = PDDocument.load(file);PDDocument document1 = new PDDocument();Splitter splitter = new Splitter();//分割源文件,List中每页是一条数据List<PDDocument> Pages = splitter.split(document);//一般用于实际业务需求或者前端传递的规则进行循环拼成多个PDDocument对象进行保存即可for (PDDocument page : Pages) {document1.addPage(page.getPage(0));}document1.save("C:\\Users\\0\\Desktop\\-222.pdf");document.close();document1.close();}

文件合并

一般用于多个文件需要合成一个文件时使用

@Testpublic void heBing() throws IOException {//读文件File file1 = new File("C:\\Users\\0\\Desktop\\DM1.pdf");File file2 = new File("C:\\Users\\0\\Desktop\\-222.pdf");//PDF文件合并PDFMergerUtility PDFmerger = new PDFMergerUtility();//添加多个文件到合并对象中PDFmerger.addSource(file1);PDFmerger.addSource(file2);//设置一个临时存储位置PDFmerger.setDestinationFileName(System.getProperty("user.dir") + "\\合并文件-临时文件.pdf");//开始加载合并PDFmerger.mergeDocuments(MemoryUsageSetting.setupMainMemoryOnly());ByteArrayOutputStream stream = new ByteArrayOutputStream();//读取刚刚的临时文件PDDocument document = PDDocument.load(new File(System.getProperty("user.dir") + "\\合并文件-临时文件.pdf"));ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();//输出到指定的流中或者直接输出文件document.save(byteArrayOutputStream);document.close();//如果不需要后续操作,就不需要删除文件,我们需要流重新上传文件,所以删除临时文件if (new File(PDFmerger.getDestinationFileName()).exists()){new File(PDFmerger.getDestinationFileName()).delete();}}

该文章到这里就结束了,对大家有帮助希望点赞评论下,有问题可以评论区提出来

java PDF电子签章、文件拆分、文件合并相关推荐

  1. JAVA学习路01——使用JAVA将“.txt”文件拆分、合并

    一段ToyCode,作用是将".txt"文件拆分并合并. package com.xxxxx; import java.io.BufferedInputStream; import ...

  2. 文件拆分与合并(VE)

    有些文件我们不想让别人看到,那就把文件拆开成几部分,然后把其中一部分给藏起来,别人就是拿到其中的碎片也无法合成,增加文件的安全性. 在学了文件拆分与合并之后,我对其做了界面实现,并加以改进. 代码实现 ...

  3. PDF电子签章,用鼠标拖动印章到指定的位置, 一种在网页PDF中电子签章定位方法

    目录 一.需求 二.最后的效果 三.解决思路 一.需求 在开发PDF电子签章(电子签名),后台用itextpdf进行签名,前台用pdf.js显示pdf文件,在前台用鼠标拖动印章到指定的位置,点击PDF ...

  4. vue里面使用pdfjs-dist+fabric实现pdf电子签章!!!

    2022.9.6 一.需求 最近领导提了一个新需求:仿照e签宝,实现pdf电子签章! 最终实现效果图 这是做出来的效果图,当然还有很多待修改 二.思路 然后我就去看了下人家e签宝的操作界面,左侧是印章 ...

  5. 在嵌入在html中的pdf电子签章,一种网页PDF中电子签章定位方法与流程

    本发明属于一种电子签章技术领域,具体涉及一种网页PDF中电子签章定位方法. 背景技术: 国密电子签章中的套章方法操作复杂,无法对电子文档中一次性加盖多个印章的,大大降低了盖章效率,尤其是无法在所有需要 ...

  6. 3500字的txt文件_split文件拆分与合并,看完还不会,拿头拍我

    一.功能 将太大的文件拆分成多个小的文件,大部分的时候拆分大文件是使用split命令的.默认情况下,split命令拆分的每个输出文件的行数是1000行并且文件的前缀是字符"x".那 ...

  7. pdf 电子签章 java_在pdf上加盖电子签章

    在pdf上加盖电子签章,并不是只是加个印章图片,.而是要使用一对密钥中的私钥对文件进行签字.为啥要用私钥呢?很简单,因为公钥是公开的,其他人才可以用公钥为你证明,这个文件是你签的.这就是我们常说的:私 ...

  8. pdf 电子签章 java_利用itextpdf实现简单的电子签章/水印等

    利用itextpdf实现简单的电子签章只需要itextpdf相关jar包,构建一个简单的javademo就可以模拟.在web项目上大同小异,只需要得到对应的文件即可以作为工具进行调用 准备:itext ...

  9. PDF电子签章、签字

    本文档的目的只是针对签章小白,了解一下电子签章,不喜勿喷. 1.PDF文件盖章之后效果 2.验证 点击pdf文件中的签名,就会弹出验证信息,如下图: 3.使用技术 3.1 使用开源itext作为PDF ...

最新文章

  1. IIS 7上安装SQL SERVER 2005报表服务可能导致不能正常连接
  2. 2021-11-15UA OPTI512R 傅立叶光学导论20 夫琅禾费衍射
  3. 各大公司容器云的技术栈对比
  4. 机器学习(三十二)——t-SNE, Adaboost
  5. 25 FI配置-财务会计-定义冲销原因
  6. Shell命令_for
  7. Linux_基于Docker搭建Redis集群
  8. Reverse Linked List 反转链表
  9. [翻译].NET委托:一个C#睡前故事 [转]
  10. linux shell 高级编程,shell高级编程(带365个实例源码)
  11. 那位有epson R1900中文清零软件?
  12. win10删除微软拼音
  13. 《北京市自动驾驶车辆道路测试报告(2021年)》正式发布
  14. 5.7 UITableView单元格间隔背景色 [原创iOS开发-Xcode教程]
  15. stm32f746 linux,【STM32F7】STM32F746-Discovery ucLinux预热
  16. 基于51单片机的呼出有毒气体(煤气、酒精、co)检测仪设计
  17. 依托北斗的同步终极解决方案
  18. 论文笔记:Controlling Decoding for More Abstractive Summaries with Copy-Based Networks
  19. STEAM游戏高主频i9-12900k 搭建CS:GO服务器
  20. 普通工程师和高级工程师的差别在哪里?如何快速突破?

热门文章

  1. OneNote丢失笔记分区后找回
  2. C#通过Spire.OCR读取图片文字
  3. html5中怎么制作一个盒子,亲手制作一个折纸盒子超有成就感 这个教程超级简单的...
  4. 模拟银行账户业务,bank添加带参方法实现存款和取款业务, 存款时帐户初始金额为0元,取款时如果余额不足给出提示。
  5. 线性结构和非线性结构简单介绍
  6. linux下怎么批量命名文件,Linux批量重命名文件
  7. 一个外贸经理的分享:7个找客户的方法和思路
  8. 实现解决843端口安全策略问题心得
  9. Java 探针技术:java agent
  10. 搜索引擎营销(SEM)优势