spire.pdf盖章(无水印免费无限制)

下载老版的spire.pdf.jar,就会在一页有水印,添加一页pdf,然后删掉最后一页就可以了;

jar资源地址:spire.pdf-3.7.4.jar


import java.awt.geom.Rectangle2D;
import java.io.File;
import java.io.IOException;import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.junit.Test;import com.spire.pdf.FileFormat;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.annotations.PdfRubberStampAnnotation;
import com.spire.pdf.annotations.appearance.PdfAppearance;
import com.spire.pdf.graphics.PdfImage;
import com.spire.pdf.graphics.PdfTemplate;
import com.spire.pdf.widget.PdfPageCollection;public class SomeTest {public static void main(String[] args) {//创建PdfDocument对象,加载PDF测试文档PdfDocument doc = new PdfDocument();doc.loadFromFile("xxx.pdf");System.out.println(doc.getPages().getCount());//添加空白文档doc.getPages().add();PdfPageCollection pages = doc.getPages();System.out.println(pages.getCount());for (int i = 0; i < pages.getCount(); i++) {PdfPageBase page = doc.getPages().get(i);PdfRubberStampAnnotation stamp = getStamp(page);//添加图章到PDFpage.getAnnotationsWidget().add(stamp);}System.out.println(doc.getPages().getCount());//保存文档doc.saveToFile("ImageStamp.pdf", FileFormat.PDF);//删除空白文档removeLast("ImageStamp.pdf");}private static void removeLast(String filePath) {try {// 加载PDF文档PDDocument document = PDDocument.load(new File(filePath));int pageNumberToRemove = document.getPages().getCount() - 1;// 获取要删除的页PDPage pageToRemove = document.getPage(pageNumberToRemove);// 删除页document.removePage(pageToRemove);// 保存修改后的PDFdocument.save(new File(filePath));// 关闭文档document.close();System.out.println("成功删除第 " + pageNumberToRemove + " 页!");} catch (IOException e) {e.printStackTrace();}}private static PdfRubberStampAnnotation getStamp(PdfPageBase page) {//加载印章图片PdfImage image = PdfImage.fromFile("章.png");//获取印章图片的宽度和高度int width = image.getWidth();int height = image.getHeight();//创建PdfTemplate对象PdfTemplate template = new PdfTemplate(width, height);//将图片绘制到模板  要在pdf上调整好大小template.getGraphics().drawImage(image, 50, 0, 100, 100);//创建PdfRubebrStampAnnotation对象,指定大小和位置Rectangle2D rect = new Rectangle2D.Float((float) (page.getActualSize().getWidth() - width - 0),(float) (page.getActualSize().getHeight() - height + 50), width, height);PdfRubberStampAnnotation stamp = new PdfRubberStampAnnotation(rect);//创建PdfAppearance对象PdfAppearance pdfAppearance = new PdfAppearance(stamp);//将模板应用为PdfAppearance的一般状态pdfAppearance.setNormal(template);//将PdfAppearance 应用为图章的样式stamp.setAppearance(pdfAppearance);return stamp;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/146521.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于单片机温湿度PM2.5报警系统

**单片机设计介绍&#xff0c; 基于单片机温湿度PM2.5报警设置系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 单片机温湿度PM2.5报警设置系统是一种智能化的环境检测与报警系统。它主要由单片机、传感器、液晶显示屏、蜂鸣器…

Django部署时静态文件配置的坑

Django部署时静态文件配置配置的坑 近期有个需求是用django进行开发部署&#xff0c;结果发现静态文件配置的坑是真的多&#xff0c;另外网上很多的内容也讲不清楚原理&#xff0c;就是这样这样&#xff0c;又那样那样&#xff0c;进了不少坑&#xff0c;这里记录一下关于css,…

npm使用国内淘宝镜像的方法

一、通过命令配置 1、设置淘宝镜像源 npm config set registry https://registry.npm.taobao.org/2、设置官方镜像源 npm config set registry https://registry.npmjs.org3、查看镜像使用状态&#xff1a; npm config get registry二、通过使用cnpm安装 1、安装cnpm npm …

C#中.NET Framework4.8 Windows窗体应用通过EF访问新建数据库

目录 一、 操作步骤 二、编写EF模型和数据库上下文 三、 移植&#xff08;Migrations&#xff09;数据库 四、编写应用程序 五、生成效果 前文已经说过.NET Framework4.8 控制台应用通过EF访问已经建立的和新建的数据库。 本文想说的是&#xff0c;.NET Framework4.8 Win…

MySQL优化(1):B+树与索引

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 对于60%的程序员而言&a…

springboot-RedisTemplate

pom.xml: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.…

学习c#的第十九天

目录 C# 特性&#xff08;Attribute&#xff09; 规定特性&#xff08;Attribute&#xff09; 预定义特性&#xff08;Attribute&#xff09; 创建自定义特性&#xff08;Attribute&#xff09; C# 特性&#xff08;Attribute&#xff09; 特性&#xff08;Attribute&…

嵌入式QTGit面试题

自己在秋招过程中遇到的QT和嵌入式和Git相关的面试题&#xff0c;因为比较少就一起放了 QT connect第5个参数是什么&#xff1f; Qt::AutoConnection&#xff1a; 默认值&#xff0c;使用这个值则连接类型会在信号发送时决定。 如果接收者和发送者在同一个线程&#xff0c;则…

【机器学习】决策树算法理论:算法原理、信息熵、信息增益、预剪枝、后剪枝、算法选择

1. 决策树概念 通过不断的划分条件来进行分类&#xff0c;决策树最关键的是找出那些对结果影响最大的条件&#xff0c;放到前面。 我举个列子来帮助大家理解&#xff0c;我现在给我女儿介绍了一个相亲对象&#xff0c;她根据下面这张决策树图来进行选择。比如年龄是女儿择偶更…

0068【Edabit ★☆☆☆☆☆】I‘d Like a New Shade of Blue, Please

0068【Edabit ★☆☆☆☆☆】I’d Like a New Shade of Blue, Please math numbers Instructions I have a bucket containing an amount of navy blue paint and I’d like to paint as many walls as possible. Create a function that returns the number of complete wal…

【如何学习Python自动化测试】—— 自动化测试环境搭建

1、 自动化测试环境搭建 1.1 为什么选择 Python 什么是python&#xff0c;引用python官方的说法就是“一种解释型的、面向对象、带有励志语义的高级程序设计语言”&#xff0c;对于很多测试人员来说&#xff0c;这段话包含了很多术语&#xff0c;而测试人员大多是希望利用编程…

CLEARTEXT communication to XX not permitted by network security policy 报错

在进行网络请求时&#xff0c;日志中打印 CLEARTEXT communication to XX not permitted by network security policy 原因&#xff1a; Android P系统网络访问安全策略升级&#xff0c;限制了非加密的流量请求 Android P系统限制了明文流量的网络请求&#xff0c;之下的版本…

和鲸科技创始人范向伟受邀出席“凌云出海,来中东吧”2023华为云上海路演活动

11月9日&#xff0c;华为云“凌云出海&#xff0c;来中东吧”系列路演活动第二场在上海正式开启。聚焦“创业全球化”&#xff0c;本次活动由华为云携手阿布扎比投资办公室&#xff08;ADIO&#xff09;举办&#xff0c;旨在与渴望出海发展的优秀创业者们共探出海中东新商机。 …

【GAN】数据增强基础知识

最近要用到&#xff0c;但是一点基础都没有&#xff0c;故开个文章记录一下笔记 目录 GAN DCGAN WGAN EEGGAN GAN 参考 生成对抗网络&#xff08;GAN&#xff09; - 知乎 (zhihu.com) 文章 [1406.2661] Generative Adversarial Networks (arxiv.org) 代码 GitHub - …

Vue3-watchEffect函数

Vue3-watchEffect函数 功能&#xff1a;watchEffect 函数在一开始时就会执行一次&#xff0c;而当中的回调函数的属性发生变化&#xff0c;那么watchEffect 就会再执行一次&#xff0c;主要作用还是在于监视回调函数每次的变化。 // App.vue <template><h2>计数…

传输层安全协议TLS——密码学概述

文章目录 一、TLS1.3基础理论知识二、TLS机密性三、TLS1.3 密钥配送四、TLS1.3 消息完整性五、TLS1.3 身份验证与中间人攻击 一、TLS1.3基础理论知识 TLS 1.3 是一种用于保障网络通信安全的协议&#xff0c;它是 TLS&#xff08;Transport Layer Security&#xff09;协议的最…

一个美观且功能丰富的 .NET 控制台应用程序开源库

推荐一个美观且功能丰富的 .NET 控制台应用程序开源库&#xff0c;从此告别黑漆漆的界面。 01 项目简介 Spectre.Console 是一个开源的 .NET 库&#xff0c;用于创建美观、功能丰富的控制台&#xff08;命令行&#xff09;应用程序。它提供了一组易于使用的 API&#xff0c;…

VScode 配置用户片段

文件->首选项->配置用户片段->新建全局用户片段 后续就可以通过vv3来直接生成下面的代码 {// Place your 全局 snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and // description. Add comma separated ids of the l…

阿里云崩了,总结我们从云上搬到线下经历了什么

我们做钢铁行业云的时候&#xff0c;也曾购买过某讯的云服务器。当时某讯做活动&#xff0c;头3年比较便宜&#xff0c;大概买了40台左右云服务器。 但是&#xff0c;3年期间使用云服务器的经历&#xff0c;体验并不好&#xff1a;1.我们云服务器的密码都是随机生成的&#xff…

Shell 使用日期或计数器 命名 文件

date获取系统时间&#xff0c;"%Y_%m_%d_%H_%M_%S"指定格式&#xff0c;$time 输出时间&#xff0c; ~/Desktop/ $newFile指定位置下的文件夹 #!/bin/bashtime$(date "%Y_%m_%d_%H_%M_%S") newFile$time".log" echo $time > ~/Desktop/$newF…