如何扩展PDF页面大小以添加水印?

2024-03-16

我的网络应用程序签署 PDF 文档。我想让用户下载原始 PDF 文档(未签名),但在 pdf 文档的左边距添加图像和签名者。

我在另一个网络应用程序中看到了这个想法,我也想这样做。当然我想使用 itext 库来做到这一点。

我附上了两张图片,原始 PDF 文档(未签名)和修改后的 PDF 文档。


首先:更改文档很重要before您对其进行数字签名。一旦进行数字签名,这些更改将破坏签名。

我将把问题分成两部分,并跳过有关实际水印的部分,因为这已经在此处进行了解释:如何使用文本或图像为 PDF 添加水印? https://stackoverflow.com/questions/29560373/how-to-watermark-pdfs-using-text-or-images

这个问题不是那个问题的重复,因为需要在右侧添加额外的边距。

看看素数.pdf http://itextpdf.com/sites/default/files/primes.pdf文档。这是我们将在中使用的源文件添加额外保证金 http://itextpdf.com/sandbox/stamper/AddExtraMargin具有以下结果的示例:primes_extra_margin.pdf http://itextpdf.com/sites/default/files/primes_extra_margin.pdf。正如您所看到的,每页的左侧都添加了半英寸的边距。

它是这样完成的:

public void manipulatePdf(String src, String dest) throws IOException, DocumentException {
    PdfReader reader = new PdfReader(src);
    int n = reader.getNumberOfPages();
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
    // properties
    PdfContentByte over;
    PdfDictionary pageDict;
    PdfArray mediabox;
    float llx, lly, ury;
    // loop over every page
    for (int i = 1; i <= n; i++) {
        pageDict = reader.getPageN(i);
        mediabox = pageDict.getAsArray(PdfName.MEDIABOX);
        llx = mediabox.getAsNumber(0).floatValue();
        lly = mediabox.getAsNumber(1).floatValue();
        ury = mediabox.getAsNumber(3).floatValue();
        mediabox.set(0, new PdfNumber(llx - 36));
        over = stamper.getOverContent(i);
        over.saveState();
        over.setColorFill(new GrayColor(0.5f));
        over.rectangle(llx - 36, lly, 36, ury - llx);
        over.fill();
        over.restoreState();
    }
    stamper.close();
    reader.close();
}

The PdfDictionary我们得到getPageN()方法称为页词典。它包含有关 PDF 中特定页面的大量信息。我们只看一个条目:/MediaBox。这只是概念证明。如果您想编写更健壮的应用程序,您还应该查看/CropBox/Rotate入口。顺便说一句,我知道这些条目在 primes.pdf 中不存在,所以我在这里省略它们。

The 媒体盒页面的 是一个具有四个值的数组,这些值表示由其左下角和右上角的坐标定义的矩形(通常,我将它们称为llx, lly, urx and ury).

在我的代码示例中,我更改了值llx减去 36 个用户单位。如果您比较两个 PDF 的页面大小,您会发现我们增加了半英寸。

我们还使用这些坐标来绘制一个覆盖额外半英寸的矩形。现在切换到其他水印示例,了解如何向每个页面添加文本或其他内容。

Update:

如果您需要缩小现有页面,请阅读修复 PDF 的方向以进行缩放 https://stackoverflow.com/questions/29152313/fix-the-orientation-of-a-pdf-in-order-to-scale-it

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何扩展PDF页面大小以添加水印? 的相关文章

  • Grails 3.x bootRun 失败

    我正在尝试在 grails 3 1 11 中运行一个项目 但出现错误 失败 构建失败并出现异常 什么地方出了错 任务 bootRun 执行失败 进程 命令 C Program Files Java jdk1 8 0 111 bin java
  • Java中反射是如何实现的?

    Java 7 语言规范很早就指出 本规范没有详细描述反射 我只是想知道 反射在Java中是如何实现的 我不是问它是如何使用的 我知道可能没有我正在寻找的具体答案 但任何信息将不胜感激 我在 Stackoverflow 上发现了这个 关于 C
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • Liferay ClassNotFoundException:DLFileEntryImpl

    在我的 6 1 0 Portal 实例上 带有使用 ServiceBuilder 和 DL Api 的 6 1 0 SDK Portlet 这一行 DynamicQuery query DynamicQueryFactoryUtil for
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • 从 127.0.0.1 到 2130706433,然后再返回

    使用标准 Java 库 从 IPV4 地址的点分字符串表示形式获取的最快方法是什么 127 0 0 1 到等效的整数表示 2130706433 相应地 反转所述操作的最快方法是什么 从整数开始2130706433到字符串表示形式 127 0
  • Java TestNG 与跨多个测试的数据驱动测试

    我正在电子商务平台中测试一系列商店 每个商店都有一系列属性 我正在考虑对其进行自动化测试 是否有可能有一个数据提供者在整个测试套件中提供数据 而不仅仅是 TestNG 中的测试 我尝试不使用 testNG xml 文件作为机制 因为这些属性
  • 如何将 pfx 文件转换为 jks,然后通过使用 wsdl 生成的类来使用它来签署传出的肥皂请求

    我正在寻找一个代码示例 该示例演示如何使用 PFX 证书通过 SSL 访问安全 Web 服务 我有证书及其密码 我首先使用下面提到的命令创建一个 KeyStore 实例 keytool importkeystore destkeystore
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两
  • Spring Boot @ConfigurationProperties 不从环境中检索属性

    我正在使用 Spring Boot 1 2 1 并尝试创建一个 ConfigurationProperties带有验证的bean 如下所示 package com sampleapp import java net URL import j
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐

  • 谷歌地图无法在科尔多瓦加载

    目前我正在尝试构建一个应该使用谷歌地图的 Cordova 应用程序 以便我可以显示路线和内容 出于测试原因 我还在服务器上放置了代码 一切都运行良好 地图可能正在加载 但是当我将项目转换为 Cordova 应用程序时 谷歌地图无法加载 我不
  • PHP 中的 ZLIB 支持是否默认启用?

    在 phpmanual 的文档中它说 PHP 中的 Zlib 支持默认未启用 您将需要 配置 PHP with zlib DIR Windows 版本的 PHP 内置了对此扩展的支持 您无需加载任何额外的扩展即可使用 这些功能 正如它所说
  • HTTP POST => 302 重定向到 GET 的正确预期行为是什么?

    POST gt 302 重定向到 GET 的正确行为是什么 在 Chrome 也可能是大多数浏览器 中 在我 POST 到希望我重定向的资源 并收到 302 重定向后 浏览器会自动在 302 位置发出 GET 这甚至是一个众所周知的模式 h
  • AuthError - 错误:Amplify 尚未正确配置

    首先 我已经使用成功完成了我的反应应用程序的配置amplify configure 我在以下人员的帮助下做到了AWS 放大文档 https docs amplify aws cli start install 然后我已成功将身份验证添加到我
  • 在 Xcode 4 中,如何将远程 GitHub 存储库添加到现有的本地项目?

    Xcode 4 中的 Git 集成非常受欢迎 但在处理远程存储库时它似乎有点不稳定 为了清楚起见 我使用 OS X 版本 10 6 7 和 Xcode 4 0 2 4A2002a 如果我创建一个新的 Xcode 4 项目并接受创建本地 Gi
  • 使用await时SynchronizationContext不流动

    我们计划在 MVVM 视图模型中使用 async await 但在单元测试此代码时遇到了难题 当使用 NUnit 和手写模拟来传递消息时 我们正在丢失当前的SynchronizationContext 最好用以下小型复制示例代码来展示 Te
  • 从 Android 7.1 应用程序快捷方式启动 Fragment(而不是 Activity)

    我决定考虑将静态快捷方式添加到应用程序中 使用此页面作为参考 https developer android com preview shortcuts html https developer android com preview sh
  • postgres crosstab,错误:提供的 SQL 必须返回 3 列

    您好 我创建了一个视图 但想要旋转它 旋转前的输出 tag1 qmonth1 qmonth2 sum1 name1 18 05 MAY 166 name2 18 05 MAY 86 name3 18 05 MAY 35 name1 18 0
  • 在 LiveCode 中的 iPhone 和 Android 设备中滚动

    我正在开发适用于 Android iPhone Windows 的 livecode 应用程序 我想将滚动条添加到组中 所以我将组的垂直滚动条设置为true对于 Windows 它与右侧的垂直滚动条配合得很好 但是当在 Android 上测
  • 为什么 C# 小数不能在没有 M 后缀的情况下初始化?

    The code public class MyClass public const Decimal CONSTANT 0 50 ERROR CS0664 产生此错误 错误CS0664 无法隐式转换为 double 类型的文字 输入 十进制
  • 使用四元数的最近邻

    给定一个四元数值 我想在一组四元数中找到它的最近邻居 为此 我显然需要一种方法来比较两个四元数之间的 距离 这种比较需要什么距离表示以及如何计算 Thanks Josh 这是一个老问题 但似乎需要更多答案 如果四元数是用于表示旋转的单位长度
  • 如何找出网页浏览者每英寸的像素数?

    谁能想到一种方法来发现用户的每英寸像素数 我想确保图像显示在网络浏览器中exactly我需要它的大小 因此使用分辨率 我可以从用户代理获得 和每英寸像素的组合我可以做到这一点 但是 我不确定是否有任何方法可以发现用户的每英寸像素数 最好使用
  • jQuery UI Multiple Droppable - 拖动整个 div 元素并克隆

    我刚刚开始使用 jQuery UI 将 div 拖到表中的列中 我有几个不同的可拖动 div 其中有不同的背景颜色和文本 并且我需要它们能够作为克隆拖动到放置区域 通过使用 jQuery UI 的示例购物车代码 效果很好 但我对其进行了编辑
  • 延迟加载+同位素

    我花了相当多的时间试图让同位素和延迟加载一起工作 问题 如果用户向下滚动 则延迟加载有效 但是如果用户使用过滤器 项目会显示在顶部 但图像不会加载 这是有人遇到同样的问题 但似乎他已经解决了 我尝试了几件事但仍然无法让它工作 这是讨论htt
  • 通过按 JButton 运行外部 jar 文件

    我正在尝试运行一个 jar 文件 该文件位于与按下 JButton 不同的目录中 我有按钮和 GUI 设置 但我不知道如何启动单独的 jar 文件 我在这段代码块中放置了什么 private void jButton1MouseReleas
  • Gradle 构建错误:SAXParseException

    在构建应用程序时 我收到以下错误 Error org xml sax SAXParseException lineNumber 0 columnNumber 0 cvc pattern valid Value build tools 23
  • 加载多个 YAML 文件(使用@ConfigurationProperties?)

    使用 Spring Boot 1 3 0 RELEASE 我有几个 yaml 文件 它们描述了程序的多个实例 我现在想将所有这些文件解析为List
  • d3.js 强制取消拖动事件

    我有一个简单的拖动事件 如果满足特定条件 我想强制取消当前正在进行的拖动 基本上就像您正在执行鼠标向上操作一样 像这样 var drag behavior d3 behavior drag on drag function if mycon
  • 错误:(230, 25) 错误:无法访问 com.google.android.gms.common.internal.safeparcel.zza 的 zza 类文件未找到

    package com example qpay currentlocation import android Manifest import android app AlertDialog import android content D
  • 如何扩展PDF页面大小以添加水印?

    我的网络应用程序签署 PDF 文档 我想让用户下载原始 PDF 文档 未签名 但在 pdf 文档的左边距添加图像和签名者 我在另一个网络应用程序中看到了这个想法 我也想这样做 当然我想使用 itext 库来做到这一点 我附上了两张图片 原始