当前位置:Java -> 如何在Java中将PDF转换为栅格图
在任何文件上传/下载应用程序中,加入将向量PDF转换为光栅PDF的方法是扩展其实用性的一个很好的途径。这将使用户能够在需要时分享或下载其PDF的更小、更安全的版本 — 这个过程特别有利于已签署的合同和发票、机密报告以及其他这类敏感材料。
在页面的后面,我提供了一个免费使用的API解决方案,帮助在Java中进行这种转换。然而,在我们继续之前,让我们首先了解操作的性质。
在较高层面上,光栅化指的是将任何二维数字内容转换为基于像素的图像显示的过程,可以用来描述将纸质文档扫描成数字格式的过程。PDF光栅化涉及将PDF向量数据(即从计算机辅助设计程序中创建的数据,具有独立的线条、曲线等,在图表上标记)和PDF文本数据(纯文本对象)替换为该内容的基于像素(每英寸点数)的版本。这个过程不同于PDF转PNG、PDF转JPG以及其他常见的PDF到图像的转换,它是在新的PDF文件中渲染一个位图图像。
对于光栅化PDF有一些利弊,进行这种转换完全取决于使用情况。例如,光栅化PDF内容的一个缺点是,当我们放大文档内容(即增加大小)时,会注意到其质量下降,这使得这个操作对于显示建筑布局或任何其他细节、交互导向内容的文档来说是一个不好的选择。向量图像在近距离视图中保持质量,因为它们不依赖于静态像素显示来呈现视觉效果,而光栅图像在放大时会失去质量,呈现出“像素化”的外观,就像任何位图图像一样。此外,一旦我们的内容被光栅化,我们将失去直接将内容转换回原始格式的能力;我们将不得不依靠OCR(光学字符识别)解决方案来提取文本组件,我们将无法访问原始的图像文件、超链接或其他多媒体组件。
另一方面,由于从文件中去除文本、链接、图像和其他各个组件,光栅化将极大地提高我们PDF文档的安全性。未经请求的第三方无法在PDF编辑应用程序中对我们的原始内容进行更改,因为他们无法访问实际文本、图像或超链接信息。可以进行的唯一更改是常规图像编辑操作,比如裁剪、调整大小、过滤、调整亮度/颜色等。此外,光栅化格式将通过使其在PDF编辑应用程序之外可查看来增加我们文档的兼容范围,尤其是在PDF文件非常大的情况下,将极大地减少文件的整体大小,这将使我们的PDF文档存储和共享成本大大降低。
在本文的其余部分,我将简要演示一个我们可以在应用程序中使用的免费API,以便批量进行向量PDF转光栅PDF的转换。该API将在内存中处理所有文档数据,并在转换完成后释放该数据以确保文档安全性。
我们可以使用下面提供的准备就绪的Java代码示例来构建我们的PDF光栅化API调用,并可以通过免费的API密钥授权我们的请求,每个月最多可以进行800次转换。
我们的第一步是安装Java SDK。我们可以使用Maven来安装,首先在pom.xml中添加对存储库的引用:
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
然后在pom.xml中添加对依赖项的引用:
<dependencies>
<dependency>
<groupId>com.github.Cloudmersive</groupId>
<artifactId>Cloudmersive.APIClient.Java</artifactId>
<version>v4.25</version>
</dependency>
</dependencies>
现在,我们可以将导入添加到文件顶部,然后直接调用函数。我们可以在Apikey.setApiKey
行中包含我们的API密钥:
// 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;
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");
EditPdfApi apiInstance = new EditPdfApi();
File inputFile = new File("/path/to/inputfile"); // File | Input file to perform the operation on.
try {
byte[] result = apiInstance.editPdfRasterize(inputFile);
System.out.println(result);
} catch (ApiException e) {
System.err.println("Exception when calling EditPdfApi#editPdfRasterize");
e.printStackTrace();
}
操作完成后,我们将收到新文件的编码,并将其写入新的PDF文档。
推荐阅读: 再见了,华为!活命要紧 ~
本文链接: 如何在Java中将PDF转换为栅格图