Конвертировать 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). Перечисление ExcelFormat собственного ExcelSaveOptions также принимает XmlSpreadSheet2003, CSV и ODS для совместимости с Aspose.PDF API, но эта библиотека всегда записывает пакет .xlsx независимо от выбранного значения. Вы также можете записать в поток с помощью doc.save(OutputStream, ExcelSaveOptions).


XLSX в PDF, включая живые формы

Загрузите книгу .xlsx через конструктор Document, принимающий ExcelLoadOptions. Каждый лист преобразуется в таблицу 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; просмотрщик без этого движка отображает только запечённые значения, без «live» пересчёта.

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

Загрузите файл Markdown через конструктор Document, принимающий MarkdownLoadOptions. Самописный парсер подмножества CommonMark/GFM читает источник: заголовки, абзацы, списки, таблицы, выделение, код, ссылки, изображения, блок-цитаты и сноски. Экзотический HTML, встроенный в Markdown, воспроизводится не полностью.

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 всегда имеет расширение .xlsx, даже после установки ExcelFormat.CSV или ODSFOSS-писатель всегда сериализует пакет OOXML .xlsx; остальные значения ExcelFormat существуют только для совместимости с Aspose.PDF APIОбрабатывайте вывод как .xlsx, независимо от значения ExcelFormat, которое вы задали
Пересчитывающаяся форма XLSX отображает статические числа вместо живых формулВ просмотрщике PDF отсутствует движок форм/JavaScript engineОткройте файл в 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

См. также:

 Русский