当前位置:Java -> 如何在Java中将ODF文件转换为PDF
当需要选择并下载一套办公应用程序时,我们可以预计到微软办公套件将主导讨论。微软办公套件中的每个应用程序都配备了数十个强大、直观的功能,所有的OpenXML文件格式——.DOCX、.XLSX、PPTX等等——都能够承载大量数据密集的编辑和开发人员的定制,同时通过有效的分隔和无损压缩保持相对较小的文件大小。
然而,OpenXML文件并不是唯一以XML表示并被压缩到方便的无损文件容器中的文件。Apache OpenOffice套件——起源于2006年,正好是OpenXML格式成为微软Office文件标准的时期——也提供了基于XML的文件结构,结合无损Zip压缩,这个选项在成本考虑时可以作为OpenXML文件的一个不错的替代。
对于普通的商业用户来说,Open Office文件基本上提供了与MS Office文件相同的基本内容创建功能,主要的权衡只有在考虑到微软办公套件提供的众多内置连接和兼容性功能(拥有更广泛的商业应用套件)时才会被注意到。另一方面,对于构建应用程序和自动与办公文件交互并对其进行更改的普通开发人员来说,基于XML的文件结构才是真正重要的。很容易利用一套标准化的现有开发人员工具来解压缩和操作基于XML的文件内容,结合到任何文件处理应用的逻辑中。就像在MS Office环境下的开发人员可以使用自定义代码或API解决方案来解压缩DOCX文件,并提取文档中嵌入的所有图像文件的副本一样,OpenOffice环境中的开发人员也可以利用类似的XML数据结构知识,对ODT文件进行类似的操作。
具有讽刺意味的是,OpenOffice文件与MS Office文件之间最实际的相似之处之一是它们固有的作为最终产品时的呈现方式的缺乏。当OpenOffice用户完成他们的数据分析、内容写作或演示项目时,审阅他们最终的内容的人不太可能去打开.ODT、.ODS或.ODP文件来查看——就像他们不会查看MS Office内容的.DOCX、XLSX或.PPTX格式一样。极有可能的是,他们将以矢量或位图PDF的形式打开这些文件的最终内容——当然,这是有很好的理由的。一旦转换为PDF,内容就不容易被更改或窃取,而且,在浏览器客户端或PDF阅读器中查看时,PDF的可呈现性要远远优于在其原始处理应用中打开的内容的杂乱、尚未完成的外观。
和在MS Office环境中工作的开发人员一样,对于在OpenOffice环境中工作的开发人员来说,重要的是能够获得快速、安全且易于使用的解决方案,将最终的OpenOffice内容转换为PDF。为此,我将演示三种设计用于将所有主要的Open Document 格式文件转换为PDF的免费API。此外,本教程还将提供下一页的准备运行的代码示例,以使结构化API调用的过程变得轻松。
以下每个API解决方案将允许开发人员使用最少的Java代码示例,在安全、内存中的请求中将.ODT、.ODS和.ODP文件转换为标准PDF。每个请求都可以使用单个免费的API密钥进行授权,这将允许每月最多800次的API调用。
要开始构建我们的API请求,我们可以首先安装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>
完成SDK安装后,我们可以使用下面的代码将我们的ODT文件转换为PDF:
// 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.ConvertDocumentApi;
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");
ConvertDocumentApi apiInstance = new ConvertDocumentApi();
File inputFile = new File("/path/to/inputfile"); // File | Input file to perform the operation on.
try {
byte[] result = apiInstance.convertDocumentOdtToPdf(inputFile);
System.out.println(result);
} catch (ApiException e) {
System.err.println("Exception when calling ConvertDocumentApi#convertDocumentOdtToPdf");
e.printStackTrace();
}
我们可以使用下面的代码将我们的ODS文件转换为PDF:
// 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.ConvertDocumentApi;
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");
ConvertDocumentApi apiInstance = new ConvertDocumentApi();
File inputFile = new File("/path/to/inputfile"); // File | Input file to perform the operation on.
try {
byte[] result = apiInstance.convertDocumentOdsToPdf(inputFile);
System.out.println(result);
} catch (ApiException e) {
System.err.println("Exception when calling ConvertDocumentApi#convertDocumentOdsToPdf");
e.printStackTrace();
}
最后,我们可以使用下面的代码将我们的ODP演示文稿转换为PDF:
// 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.ConvertDocumentApi;
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");
ConvertDocumentApi apiInstance = new ConvertDocumentApi();
File inputFile = new File("/path/to/inputfile"); // File | Input file to perform the operation on.
try {
byte[] result = apiInstance.convertDocumentOdpToPdf(inputFile);
System.out.println(result);
} catch (ApiException e) {
System.err.println("Exception when calling ConvertDocumentApi#convertDocumentOdpToPdf");
e.printStackTrace();
}
我们将在API响应中收到我们新PDF文件的编码,并可以使用该编码创建我们的新文件。
推荐阅读: 百度面经(2)
本文链接: 如何在Java中将ODF文件转换为PDF