将 PDF 转换为 Excel 和 Markdown

将 PDF 转换为 Excel 和 Markdown

将 PDF 转换为 Excel 和 Markdown

本指南展示了如何将 PDF 转换为 Excel(.xlsx)工作簿或 Markdown,以及如何从任一格式加载 PDF。Document 执行双向转换;ExcelSaveOptions 和 MarkdownSaveOptions 调整导出,ExcelLoadOptions 和 MarkdownLoadOptions 调整导入。自 26.9.0 起。


PDF 转 XLSX

在 PDF 中检测到的表格会转换为工作表网格,单元格带有类型——数字、日期、布尔值、货币和百分比会以真实的 Excel 值而非文本形式写入——并且会保留源样式(字体族/大小、文字颜色、单元格填充、边框、行高、列宽、对齐方式、合并单元格)。表格单元格内的图像会作为绘图嵌入。

import org.aspose.pdf.Document;
import org.aspose.pdf.ExcelSaveOptions;

try (Document doc = new Document("report.pdf")) {
    ExcelSaveOptions options = new ExcelSaveOptions();
    options.setFormat(ExcelSaveOptions.ExcelFormat.XLSX); // default
    options.setMinimizeTheNumberOfWorksheets(true);        // merge pages onto fewer sheets
    options.setInsertBlankColumnAtFirst(false);            // no leading spacer column
    options.setUniformWorksheets(false);                   // allow per-sheet column widths
    options.setStructuralHeuristics(true);                 // recover tables on untagged PDFs
    options.setSuppressRunningHeadersFooters(true);         // drop repeated page furniture
    doc.save("report.xlsx", options);
}

SaveFormat.Xlsx(别名 SaveFormat.Excel 也可接受)在默认选项下提供相同的结果:doc.save("report.xlsx", SaveFormat.Xlsx)。ExcelSaveOptions 自身的 ExcelFormat 枚举同样接受 XmlSpreadSheet2003、CSV 和 ODS 用于 Aspose.PDF API 兼容性,但该库始终写入一个 .xlsx 包,无论设置为何值。您也可以使用 doc.save(OutputStream, ExcelSaveOptions) 将其写入流。


XLSX 转 PDF,包含实时表单

通过接受 ExcelLoadOptions 的 Document 构造函数加载 .xlsx 工作簿。每个工作表会转换为 PDF 表格,具备与导出方向相同的单元格类型和样式支持。

import org.aspose.pdf.Document;
import org.aspose.pdf.ExcelLoadOptions;

try (Document doc = new Document("book.xlsx", new ExcelLoadOptions())) {
    doc.save("book.pdf");
}

将 ExcelLoadOptions.setInteractiveForms(true) 设置为开启后,会将数值单元格和标签单元格转换为“live”PDF 表单,而不是静态文本:数值单元格变为可编辑的文本字段,公式单元格变为只读字段并会根据其输入重新计算,标签或常量单元格保持为静态文本,除非有其他公式引用它们。ExcelFormulaTranslator 将每个公式转换为 Acrobat JavaScript;如果某个公式的函数不受支持,则回退到其上一次计算的静态值,因此字段仍显示正确的数字。重新计算仅在具有 forms/JavaScript 引擎的阅读器中运行——Adobe Acrobat 或 Foxit;没有该引擎的阅读器只会显示已嵌入的值,不会进行实时重新计算。

import org.aspose.pdf.Document;
import org.aspose.pdf.ExcelLoadOptions;

ExcelLoadOptions options = new ExcelLoadOptions();
options.setInteractiveForms(true); // cells → fields, formulas → calculate actions

try (Document doc = new Document("invoice.xlsx", options)) {
    doc.save("invoice-live.pdf");
}

PDF 转 Markdown

Document 将 PDF 投射为 CommonMark / GitHub 风格的 Markdown:标题、段落、列表、表格、强调(粗体/斜体/删除线)、行内和代码块、链接、图像和脚注。

import org.aspose.pdf.Document;
import org.aspose.pdf.MarkdownSaveOptions;

try (Document doc = new Document("article.pdf")) {
    MarkdownSaveOptions options = new MarkdownSaveOptions();
    options.setStructuralHeuristics(true);          // recover headings/lists/tables
    options.setSuppressRunningHeadersFooters(true);  // drop repeated page furniture
    options.setRasterizeVectorGraphics(true);        // charts/shapes -> referenced images
    doc.save("article.md", options);
}

SaveFormat.Markdown 使用默认选项可得到相同的结果:doc.save("article.md", SaveFormat.Markdown)。Document.markdownText(MarkdownSaveOptions) 将 Markdown 作为 String 返回,而不是写入文件(没有单独的“Markdown text”访问器——此方法是获取内存中结果的调用方式)。


Markdown 转 PDF

通过接受 MarkdownLoadOptions 的 Document 构造函数加载 Markdown 文件。手写的 CommonMark/GFM 子集解析器读取源内容:标题、段落、列表、表格、强调、代码、链接、图像、块引用和脚注。嵌入 Markdown 中的异构 HTML 并未完全复现。

import org.aspose.pdf.Document;
import org.aspose.pdf.MarkdownLoadOptions;

try (Document doc = new Document("README.md", new MarkdownLoadOptions())) {
    doc.save("README.pdf");
}

提示与最佳实践

  • 保真度是结构性的,而非像素级精确的两种格式:转换会保留内容、结构、图像和页面几何形状,而不是精确的渲染外观。
  • ExcelSaveOptions.ExcelFormat 以及 MarkdownSaveOptions 结构标志仅更改 output 包的格式或启发式——实际上您 PDF 所标记的值仍决定了哪些内容被检测为表格、标题或列表。
  • 对于实时 XLSX 表单,视已嵌入的单元格值为正确的回退:只有支持表单的查看器在打开时会重新计算公式。

常见问题

问题原因修复
XLSX 输出即使在设置 ExcelFormat.CSV 或 ODS 后仍始终具有 .xlsx 扩展名FOSS 编写器始终序列化一个 OOXML .xlsx 包;其他 ExcelFormat 值仅用于 Aspose.PDF API 兼容性将输出视为 .xlsx,不论您设置的 ExcelFormat 值
重新计算的 XLSX 表单显示的是静态数字,而不是实时公式PDF 查看器没有表单/JavaScript 引擎在 Adobe Acrobat 或 Foxit 中打开文件以查看实时重新计算
公式单元格显示出陈旧的数值ExcelFormulaTranslator 不支持该公式的函数这是文档中描述的回退机制:该字段保留其上一次计算的静态值

FAQ

我可以把 Markdown 作为 String 而不是文件吗?

可以 — 调用 Document.markdownText(MarkdownSaveOptions);它直接返回 Markdown 文本,而不是写入文件。

XLSX 导入器支持真实的 Excel 公式吗?

仅当设置了 ExcelLoadOptions.setInteractiveForms(true) 时,并且只有 ExcelFormulaTranslator 能翻译为 Acrobat JavaScript 的函数子集。其他所有情况都会回退到源工作簿中公式的最后计算的静态值。


API Reference 摘要

类/方法描述
ExcelSaveOptions调整 PDF 到 XLSX 的导出
ExcelLoadOptions调整 XLSX 到 PDF 的导入,包括实时表单
ExcelFormat目标电子表格格式由 ExcelSaveOptions 接受
ExcelFormulaTranslator将 Excel 公式转换为 Acrobat JavaScript(用于实时表单)
MarkdownSaveOptions调整 PDF 到 Markdown 的导出
MarkdownLoadOptions调整 Markdown 到 PDF 的导入
Document.save(String, SaveFormat) / `Document.save(String, ExcelSaveOptionsMarkdownSaveOptions)`
Document.markdownText(MarkdownSaveOptions)将 Markdown 返回为 String

另请参阅

 中文