Conversion
Conversion
Эта страница охватывает рендеринг PDF в другие форматы и преобразование документа в соответствие с PDF/A. Document предоставляет один метод To*() на каждый формат вывода для всего документа; такие же методы существуют в Page для рендеринга отдельной страницы.
Рендеринг в другие форматы документов
Document.ToHtml(), Document.ToDocx() и Document.ToMarkdown() рендерят каждую страницу; Page.ToSvg() и Page.ToImage() рендерят одну страницу в отдельную строку SVG или байты PNG. Каждый принимает свои собственные параметры — mode на DocxOptions (‘flow’ переупорядочивает контент, ’textbox’ сохраняет геометрию каждой страницы) и images на MarkdownExportOptions (‘inline’ встраивает данные изображений в виде URI, ’external’ записывает отдельные файлы в imageDir).
const doc = Document.OpenFile('in.pdf');
const svg = doc.Pages[0].ToSvg(); // standalone <svg> string
const png = doc.Pages[0].ToImage({ scale: 2 }); // Uint8Array of PNG bytes @144 DPI
const html = doc.ToHtml(); // standalone semantic HTML, all pages
const md = doc.ToMarkdown(); // GFM Markdown, all pages
const docx = doc.ToDocx(); // .docx bytes, reflowed, images in the package
const fixed = doc.ToDocx({ mode: 'textbox' }); // .docx keeping each page's own geometry
ImageOptions (для Page.ToImage()) также принимает format, quality, scale, явный width / height и background (‘white’ или ’transparent’).
Преобразование к PDF/A
Document.ConvertToPdfA() пытается исправить документ в направлении PDF/A level (‘b’ или ‘u’) и повторно валидирует его, возвращая ConversionReport с applied (действия по исправлению, которые были выполнены), unresolved (проблемы, которые не удалось исправить) и passed. Запускайте его на копии — например, созданной с помощью Document.ExtractPages() — чтобы живой, рабочий документ никогда не был изменён в процессе конвертации.
// ExtractPages gives an independent copy; ConvertToPdfA never touches the original.
const copy = doc.ExtractPages(doc.Pages.map((_, i) => i + 1));
const conversion = copy.ConvertToPdfA('2b');
console.log(`applied ${conversion.applied.length} action(s), `
+ `${conversion.unresolved.length} unresolved, `
+ `result: ${conversion.passed ? 'passes' : 'still fails'} PDF/A-2b`);
copy.WriteTo('output-pdfa.pdf');Другие форматы экспорта
Помимо HTML, Markdown, DOCX, SVG и PNG, библиотека также экспортирует TIFF (TiffExportOptions, encodeTiff()) и импортирует/экспортирует значения полей AcroForm в форматах FDF и XFDF (exportFdfFile(), exportXfdfFile(), importFdfFile(), importXfdfFile()) — это полезно для обмена заполненными данными форм отдельно от самого PDF.
Советы и лучшие практики
- Запускайте
Document.ConvertToPdfA()на копии (например изDocument.ExtractPages()), никогда не на живом документе, который вам всё ещё нужно сохранить в неконвертированном виде. - Проверяйте
ConversionReport.unresolved, даже когдаpassedнаходится в состоянииtrueдля более мягкого уровня проверки — некоторые действия по исправлению полностью решаются только на более строгом уровне. - Используйте
mode: 'textbox'наDocxOptions, когда вывод DOCX должен сохранять точную визуальную геометрию каждой страницы; используйте режим'flow'по умолчанию, когда документ должен перестраиваться как обычный текстовый документ. - Передайте
images: 'external'иimageDirнаMarkdownExportOptionsдля больших документов, вместо стандартных встроенных data URI, чтобы файл Markdown оставался небольшим.
Распространённые проблемы
| Проблема | Причина | Исправление |
|---|---|---|
ConvertToPdfA() всё ещё сообщает passed: false | Не все проблемы, перечисленные в ConversionReport.unresolved, могут быть автоматически исправлены (например, отсутствие встроенных шрифтов или отсутствие /OutputIntent) | Вручную обработайте конкретные правила unresolved, затем повторно запустите ConvertToPdfA() |
| Живой документ был неожиданно изменён после попытки конвертации PDF/A | ConvertToPdfA() был вызван напрямую на рабочем документе вместо копии | Вызовите её на копии, созданной с помощью Document.ExtractPages() |
| Экспорт в Markdown создаёт один огромный файл | Стандартный images: 'inline' встраивает каждое изображение как data URI | Передайте { images: 'external', imageDir: '...' }, чтобы записать изображения в отдельные файлы |
| DOCX-вывод теряет оригинальное расположение страниц | Стандартный mode: 'flow' переразмещает содержимое, как текстовый процессор | Передайте { mode: 'textbox' }, чтобы сохранить отдельную геометрию каждой страницы |
FAQ
В какие форматы можно конвертировать PDF?
HTML, Markdown и DOCX для всего документа (Document.ToHtml() / ToMarkdown() / ToDocx()); SVG и PNG по странице (Page.ToSvg() / Page.ToImage()); а также экспорт формы в TIFF и FDF/XFDF.
Приводит ли конвертация в PDF/A к изменению моего оригинального документа?
Только если вы вызываете ConvertToPdfA() непосредственно на нём. Вызовите его на копии — например doc.ExtractPages(doc.Pages.map((_, i) => i + 1)) — чтобы оригинальный документ остался неконвертированным.
Как узнать, действительно ли конверсия PDF/A прошла успешно?
Проверьте ConversionReport.passed. applied перечисляет, что конверсия исправила, а unresolved — что не удалось исправить — проверяйте unresolved, даже когда passed является true.
Можно ли экспортировать только заполненные значения полей формы, без самого PDF?
Да — exportFdfFile() и exportXfdfFile() записывают текущие значения поля AcroForm в отдельный файл FDF или XFDF; importFdfFile() / importXfdfFile() считывают их обратно в документ.
API Reference Сводка
| Класс/Метод | Описание: |
|---|---|
Document.ToHtml() / Document.ToDocx() / Document.ToMarkdown() | Преобразовать каждую страницу в другой формат документа |
Page.ToSvg() / Page.ToImage() | Преобразовать одну страницу в SVG или PNG |
DocxOptions / MarkdownExportOptions / ImageOptions | Опции рендеринга по формату |
Document.ConvertToPdfA() | Восстановить документ до уровня PDF/A и повторно проверить |
ConversionReport | Результат конвертации: applied, unresolved, passed |
TiffExportOptions / encodeTiff() | Экспорт в TIFF |
exportFdfFile() / exportXfdfFile() / importFdfFile() / importXfdfFile() | Экспортировать или импортировать значения поля AcroForm как FDF/XFDF |