如何使用 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(编程语言)


目录
相关文章
|
1月前
|
Java API Maven
如何使用Java开发抖音API接口?
在数字化时代,社交媒体平台如抖音成为生活的重要部分。本文详细介绍了如何用Java开发抖音API接口,从创建开发者账号、申请API权限、准备开发环境,到编写代码、测试运行及注意事项,全面覆盖了整个开发流程。
117 10
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
71 2
|
13天前
|
算法 Java API
如何使用Java开发获得淘宝商品描述API接口?
本文详细介绍如何使用Java开发调用淘宝商品描述API接口,涵盖从注册淘宝开放平台账号、阅读平台规则、创建应用并申请接口权限,到安装开发工具、配置开发环境、获取访问令牌,以及具体的Java代码实现和注意事项。通过遵循这些步骤,开发者可以高效地获取商品详情、描述及图片等信息,为项目和业务增添价值。
46 10
|
21天前
|
存储 Java 数据挖掘
Java 8 新特性之 Stream API:函数式编程风格的数据处理范式
Java 8 引入的 Stream API 提供了一种新的数据处理方式,支持函数式编程风格,能够高效、简洁地处理集合数据,实现过滤、映射、聚合等操作。
37 6
|
21天前
|
Java API 开发者
Java中的Lambda表达式与Stream API的协同作用
在本文中,我们将探讨Java 8引入的Lambda表达式和Stream API如何改变我们处理集合和数组的方式。Lambda表达式提供了一种简洁的方法来表达代码块,而Stream API则允许我们对数据流进行高级操作,如过滤、映射和归约。通过结合使用这两种技术,我们可以以声明式的方式编写更简洁、更易于理解和维护的代码。本文将介绍Lambda表达式和Stream API的基本概念,并通过示例展示它们在实际项目中的应用。
|
1月前
|
安全 Java API
告别SimpleDateFormat:Java 8日期时间API的最佳实践
在Java开发中,处理日期和时间是一个基本而重要的任务。传统的`SimpleDateFormat`类因其简单易用而被广泛采用,但它存在一些潜在的问题,尤其是在多线程环境下。本文将探讨`SimpleDateFormat`的局限性,并介绍Java 8引入的新的日期时间API,以及如何使用这些新工具来避免潜在的风险。
34 5
|
1月前
|
开发框架 Java 关系型数据库
Java哪个框架适合开发API接口?
在快速发展的软件开发领域,API接口连接了不同的系统和服务。Java作为成熟的编程语言,其生态系统中出现了许多API开发框架。Magic-API因其独特优势和强大功能,成为Java开发者优选的API开发框架。本文将从核心优势、实际应用价值及未来展望等方面,深入探讨Magic-API为何值得选择。
42 2
|
1月前
|
缓存 监控 Java
如何运用JAVA开发API接口?
本文详细介绍了如何使用Java开发API接口,涵盖创建、实现、测试和部署接口的关键步骤。同时,讨论了接口的安全性设计和设计原则,帮助开发者构建高效、安全、易于维护的API接口。
138 4
|
23天前
|
安全 Java API
Java中的Lambda表达式与Stream API的高效结合####
探索Java编程中Lambda表达式与Stream API如何携手并进,提升数据处理效率,实现代码简洁性与功能性的双重飞跃。 ####
25 0
|
1月前
|
Java API 数据处理
探索Java中的Lambda表达式与Stream API
【10月更文挑战第22天】 在Java编程中,Lambda表达式和Stream API是两个强大的功能,它们极大地简化了代码的编写和提高了开发效率。本文将深入探讨这两个概念的基本用法、优势以及在实际项目中的应用案例,帮助读者更好地理解和运用这些现代Java特性。
下一篇
DataWorks