由于在 PDF 上执行简单的编辑任务相对困难,因此通常使用第三方 PDF 编辑器(或高级 Adobe 工具)来获得所需的结果。这些解决方案虽然在逐个文件的基础上有效,但对于实现大规模的结果并不是很好,但是——它们仍然需要通过界面进行手动导航,这会占用大多数人不必浪费在高效率上的时间。体积转换任务。
要大规模编辑和处理 PDF,第三方 API 服务是最有效的解决方案。这是因为 PDF 编辑 API 可以与压缩的 PDF 文件进行通信,而无需打开它;他们可以进行有意义的编辑(例如旋转页面、删除评论等),并且在另一方面,他们可以提取目标内容而不会对原始文档产生任何影响。
在本文的演示部分,我将向您介绍两个简单易用的 API 解决方案,它们旨在从常规 PDF 文档中提取纯文本,而无需打开或对原始文件进行任何更改。这些 API 解决方案包括:
上面列出的第一个解决方案将简单地从 PDF 文档中删除纯文本,而不执行任何其他操作(默认情况下);API 响应将包含一个带有提取文本正文的“TextResult”字符串。下面,我提供了一个响应模型以供参考:
- {
- "Successful": true,
- "TextResult": "string"
- }
顾名思义,第二种解决方案将删除文本,同时在结果中包含每个文本部分来自的页码。此解决方案增加了对转换的更高级别的控制,确保可以按照与原始 PDF 文档大致相同的顺序与结果信息进行交互,并且在我们以 TXT 格式存储转换后的信息时更容易对其进行分类。以下模型显示了此响应的格式:
- {
- "Successful": true,
- "Pages": [
- {
- "PageNumber": 0,
- "PageText": "string"
- }
- ]
- }
这两种解决方案还提供了一个可选的“textFormattingMode”参数,可以配置该参数以指定在进行转换时应如何处理空白。使用此功能时,可能的值为“preserveWhitespace”,它将保留文档中的空白并保留其与文本的相对位置,以及“minimizeWhitespace”,在大多数情况下不会在文档中插入更多空格。默认设置是“preserveWhitespace”。
下面,我将向您介绍如何使用 Java 中的可立即运行、互补的代码示例来利用这两种 API。请注意,要免费使用任一 API,您只需在www.cloudmersive.com上注册一个免费帐户即可获得安全的 API 密钥(此帐户每月最多可产生 800 次 API 调用)。
在调用任一 API 之前,我们将从安装 SDK 开始作为我们的第一步。我们可以通过首先在 pom.xml 中添加对存储库的引用来使用 Maven 执行此操作:
- <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>
我们也可以通过将 Gradle 添加到存储库末尾的根 build.gradle 中来执行此操作:
- allprojects {
- repositories {
- ...
- maven { url 'https://jitpack.io' }
- }
- }
然后在 build.gradle 中添加依赖:
- dependencies {
- implementation 'com.github.Cloudmersive:Cloudmersive.APIClient.Java:v4.25'
- }
现在我们可以构建我们的 API 调用,从通用 PDF 到 TXT 转换 API 开始。在下面的代码片段中,在文档指示的位置(就在导入下方)包含您的 API 密钥,然后在下面的 inputFile 参数中包含您的文件路径:
- // 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.
- String textFormattingMode = "textFormattingMode_example"; // String | Optional; specify how whitespace should be handled when converting PDF to text. Possible values are 'preserveWhitespace' which will attempt to preserve whitespace in the document and relative positioning of text within the document, and 'minimizeWhitespace' which will not insert additional spaces into the document in most cases. Default is 'preserveWhitespace'.
- try {
- TextConversionResult result = apiInstance.convertDocumentPdfToTxt(inputFile, textFormattingMode);
- System.out.println(result);
- } catch (ApiException e) {
- System.err.println("Exception when calling ConvertDocumentApi#convertDocumentPdfToTxt");
- e.printStackTrace();
- }
对于按页将 PDF 转换为文本的解决方案,请改用以下代码段。这将以与第一个相同的方式捕获您的 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.
- String textFormattingMode = "textFormattingMode_example"; // String | Optional; specify how whitespace should be handled when converting the document to text. Possible values are 'preserveWhitespace' which will attempt to preserve whitespace in the document and relative positioning of text within the document, and 'minimizeWhitespace' which will not insert additional spaces into the document in most cases. Default is 'preserveWhitespace'.
- try {
- PdfTextByPageResult result = apiInstance.editPdfGetPdfTextByPages(inputFile, textFormattingMode);
- System.out.println(result);
- } catch (ApiException e) {
- System.err.println("Exception when calling EditPdfApi#editPdfGetPdfTextByPages");
- e.printStackTrace();
- }
请记住,默认的 textFormattingMode 设置将在输出中保留输入 PDF 中的空白。如果您想避免这种情况,请确保将示例代码更改为“minimizeWhitespace”。有了这个解决方案,您将能够轻松地将文本从 PDF 文档重定向到各种不同的目的地,而无需打开相关文档。