如何使用 Java 中的 API 更改 PDF 纸张大小

简介: 如何使用 Java 中的 API 更改 PDF 纸张大小

世界上几乎每个企业每天都以某种身份处理 PDF 文档,仅此一项就确定了利用利基技术自动化独特 PDF 工作流程的价值。本文的目的是演示一种高效的 Web API 解决方案,Java 开发人员可以使用该解决方案在常见的 ISO 216 A 系列纸张大小(A0 到 A7)之间快速调整 PDF。

但是,在进行演示之前,我们首先需要花点时间了解 ISO 216 标准,然后简要回顾一下 PDF 文件结构如何处理页面大小,以便进行编程调整。

ISO 216 PDF 纸张尺寸定义

PDF 是最初在数十个其他应用程序中创建的内容的标准数字发布格式,它还经常用于格式化和物理打印工作场所 ID、广告小册子和许多其他材料。

确保 PDF 内容与标准物理打印材料相对应是一门科学,而这门科学是由国际标准化组织 (ISO) 制定的。这 216第ISO 发布的标准定义了各种 PDF 纸张尺寸,这些尺寸源于一个常见的纵横比,即 2 的平方根。这些不同的纸张尺寸(分为 A 系列、B 系列和 C 系列)使得在不改变布局的情况下缩放文档变得容易,最重要的是,它们有助于确保全球不同设备(即打印机和复印机)之间的兼容性。A 系列,分为 A0(最大)到 A7(最小),是迄今为止世界上使用最多的纸张尺寸系列。A4 (210 x 297 毫米) 是我们发现大多数 PDF 文档使用的标准默认字母大小。

PDF 文件结构:定义页面大小

虽然我们人类更容易将纸张大小视为 A0 和 A7 之间的任意范围,但计算机不需要以这种方式查看。就我们的 PDF 文档而言,PDF 中每个页面的大小只是在页面对象字典的条目中指定。这个“盒子”是一个数组,它试图定义物理介质的边界,而不是数字媒体的边界,任何给定的页面都打算在上面显示或打印。中每个页面的每个角都由一个数字定义,这些数字对应于一个点系统(每个点 = 1/72 英寸),该系统共同定义了页面矩阵。为了说明这一点,前面提到的标准 A4 字母尺寸 (210 x 297 mm) 在 as 中定义为,因为 210 mm = 595 磅和 297 mm = 842 磅。MediaBoxMediaBoxMediaBox`[0, 0, 595, 842]`

因此,当我们以编程方式更改 PDF 文档的纸张大小时,我们需要将 PDF 文件结构导航到数组,然后从那里,我们需要通过将 A 系列毫米定义转换为文档准备理解的基于点的坐标来确定目标 ISO 大小。MediaBox

开源解决方案:更改纸张大小

当然,像往常一样,我们(谢天谢地)不必从头开始编写超级复杂的程序来处理这些步骤。如果我们想走开源路线,我们可以使用像 Apache PDFBox 这样的东西——一个流行的库,用于以各种方式操作 PDF,包括改变 PDF 纸张大小——并利用该类与 PDF 进行交互,从而定义我们的 PDF 页面的大小。让我们用相当少的代码来处理整个操作:我们可能遇到的唯一问题是在这个过程中如何管理内存。我们计划用于物理打印的 PDF 往往是大文件,我们可能会发现在本地内存缓冲区中大规模处理此类文件会消耗更多的资源,而不是我们愿意承诺的资源。这是 Web API 可以介入并提供一些额外灵活性的地方;它既可以简化操作,又可以减少完成工作所需的本地处理能力。PDRectangleMediaBoxPDRectangle

Web API 解决方案:更改纸张大小

通过使用 Web API 来处理我们的 PDF 纸张大小调整,我们可以将大部分繁重的 PDF 文件处理卸载到外部云托管的端点,并且我们可以在操作完成后简单地下载操作结果。我们还可以完全避免从库中调用独立类,而是利用简单、可读且直观定义的变量,这些变量专门用于处理纸张大小的操作。

在下面的演示中,我们将逐步完成调用专用 Web API 所需的每个步骤,该 API 允许我们通过简单的字符串输入在 A0 和 A7 之间调整纸张大小(例如,输入“A5”会将文档中的所有页面大小更改为 ISO 标准 148 x 210 毫米)。这是一个免费的解决方案,它只需要一个免费的 API 密钥就可以永久使用(每月 800 次 API 调用)。

步骤 1:安装 Maven SDK

要开始构建我们的 API 调用,我们首先需要将存储库和依赖项信息添加到我们的文件中(用于动态编译库)。pom.xmlJitpack

让我们添加以下存储库引用:

<repositories>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>

然后,让我们添加以下依赖项引用:

<dependencies>
<dependency>
    <groupId>com.github.Cloudmersive</groupId>
    <artifactId>Cloudmersive.APIClient.Java</artifactId>
    <version>v4.25</version>
</dependency>
</dependencies>

步骤 2:添加导入语句

现在,我们将添加以下导入:

// Import classes:
//import com.cloudmersive.client.invoker.ApiClient;
//import com.cloudmersive.client.invoker.ApiException;
//import com.cloudmersive.client.invoker.Configuration;
//import com.cloudmersive.client.invoker.auth.*;
//import com.cloudmersive.client.EditPdfApi;

步骤 3:配置 API 密钥授权

在以下代码片段中,我们将设置 API 客户端并配置 API 密钥:

ApiClient defaultClient = Configuration.getDefaultApiClient();
// Configure API key authorization: Apikey
ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
Apikey.setApiKey("YOUR API KEY");
// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
//Apikey.setApiKeyPrefix("Token");

第 4 步:实例化 API

在最后一步中,我们将创建一个 API 实例,定义输入文件和所需的纸张大小(请记住,这些是 A0 到 A7 的值),然后调用

API:
EditPdfApi apiInstance = new EditPdfApi();
File inputFile = new File("/path/to/inputfile"); // File | Input file to perform the operation on.
String paperSize = "paperSize_example"; // String | The desired paper size for the resized PDF document. Size ranges from A7 (smallest) to A0 (largest).
try {
    byte[] result = apiInstance.editPdfResize(inputFile, paperSize);
    System.out.println(result);
} catch (ApiException e) {
    System.err.println("Exception when calling EditPdfApi#editPdfResize");
    e.printStackTrace();
}

- 块确保我们的程序能够优雅地处理任何潜在的错误。我们将获得信息丰富的消息和堆栈跟踪,以诊断和解决运营中的问题。trycatch

我们回顾了 ISO 216 纸张尺寸定义的相关性,讨论了 PDF 文件结构如何独立于 ISO A、B 和 C 系列定义存储和表示纸张尺寸信息,然后研究了两种解决方案(一种是开源的,一种是独立的 Web API),用于以编程方式调整 PDF A 系列纸张大小。

公文PDF格式Web APIJava(编程语言)


目录
打赏
0
11
11
0
94
分享
相关文章
|
5月前
|
如何使用Java开发抖音API接口?
在数字化时代,社交媒体平台如抖音成为生活的重要部分。本文详细介绍了如何用Java开发抖音API接口,从创建开发者账号、申请API权限、准备开发环境,到编写代码、测试运行及注意事项,全面覆盖了整个开发流程。
766 10
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
153 2
|
22天前
|
《从头开始学java,一天一个知识点》之:字符串处理:String类的核心API
🌱 **《字符串处理:String类的核心API》一分钟速通!** 本文快速介绍Java中String类的3个高频API:`substring`、`indexOf`和`split`,并通过代码示例展示其用法。重点提示:`substring`的结束索引不包含该位置,`split`支持正则表达式。进一步探讨了String不可变性的高效设计原理及企业级编码规范,如避免使用`new String()`、拼接时使用`StringBuilder`等。最后通过互动解密游戏帮助读者巩固知识。 (上一篇:《多维数组与常见操作》 | 下一篇预告:《输入与输出:Scanner与System类》)
47 11
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
Java爬虫获取微店快递费用item_fee API接口数据实现
本文介绍如何使用Java开发爬虫程序,通过微店API接口获取商品快递费用(item_fee)数据。主要内容包括:微店API接口的使用方法、Java爬虫技术背景、需求分析和技术选型。具体实现步骤为:发送HTTP请求获取数据、解析JSON格式的响应并提取快递费用信息,最后将结果存储到本地文件中。文中还提供了完整的代码示例,并提醒开发者注意授权令牌、接口频率限制及数据合法性等问题。
Java爬虫获取微店店铺所有商品API接口设计与实现
本文介绍如何使用Java设计并实现一个爬虫程序,以获取微店店铺的所有商品信息。通过HttpClient发送HTTP请求,Jsoup解析HTML页面,提取商品名称、价格、图片链接等数据,并将其存储到本地文件或数据库中。文中详细描述了爬虫的设计思路、代码实现及注意事项,包括反爬虫机制、数据合法性和性能优化。此方法可帮助商家了解竞争对手,为消费者提供更全面的商品比较。
如何在Java爬虫中设置动态延迟以避免API限制
如何在Java爬虫中设置动态延迟以避免API限制
菜鸟之路Day06一一Java常用API
《菜鸟之路Day06——Java常用API》由blue编写,发布于2025年1月24日。本文详细介绍了Java中常用的API,包括JDK7的时间类(Date、SimpleDateFormat、Calendar)和JDK8新增的时间API(ZoneId、Instant、DateTimeFormatter等),以及包装类的使用。通过多个实例练习,如时间计算、字符串转整数、十进制转二进制等,帮助读者巩固所学内容,提升编程技能。文章强调了理论与实践结合的重要性,鼓励读者多做练习以提高学习效率。
94 28
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
263 5
利用 Java 代码获取淘宝关键字 API 接口
在数字化商业时代,精准把握市场动态与消费者需求是企业成功的关键。淘宝作为中国最大的电商平台之一,其海量数据中蕴含丰富的商业洞察。本文介绍如何通过Java代码高效、合规地获取淘宝关键字API接口数据,帮助商家优化产品布局、制定营销策略。主要内容包括: 1. **淘宝关键字API的价值**:洞察用户需求、优化产品标题与详情、制定营销策略。 2. **获取API接口的步骤**:注册账号、申请权限、搭建Java开发环境、编写调用代码、解析响应数据。 3. **注意事项**:遵守法律法规与平台规则,处理API调用限制。 通过这些步骤,商家可以在激烈的市场竞争中脱颖而出。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等