Конвертировать 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 или ODS | FOSS-писатель всегда сериализует пакет 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, ExcelSaveOptions | MarkdownSaveOptions)` |
Document.markdownText(MarkdownSaveOptions) | Возвращает Markdown в виде String |