Вступ
Вступний пост демонструє базову схему конвертації: Document.ToHtml(), Document.ToMarkdown() та Document.ToDocx(), кожен викликається без аргументів, щоб отримати розумний за замовчуванням. Кожен з цих методів приймає об’єкт параметрів, який змінює те, що фактично виходить — семантична розмітка проти піксельно-вірної копії, переформатовуваний документ Word проти того, що відтворює точне розташування кожної сторінки.
У цьому пості розглядаються ці параметри, а також напрямок конвертації, який вступ не торкається зовсім: валідація документа згідно зі стандартами PDF/A, PDF/X та PDF/UA та його виправлення для відповідності Document.ConvertToPdfA() та його спорідненим.
Що включено
HTML Експорт: Семантичний vs Фіксований
Document.ToHtml(), викликаний без параметрів, проходить дерево структури документа і генерує переформатовувану розмітку — заголовки та абзаци, які природно читаються в браузері будь-якої ширини. Цей режим залежить від того, що документ спочатку позначений (Document.CreateStructTree() або еквівалентний процес тегування); без дерева структури експорт переходить до простого евристичного тіла замість справжньої семантичної розмітки. Передача { mode: 'fixed', fonts: 'embed' } повністю переключає стратегію рендерингу: кожна сторінка перетворюється на позиціонований SVG та абсолютно розташований текст, причому кожна вбудовувана програмна гарнитура шрифту інлайнюється як base64 WOFF @font-face, так що сторінка виглядає однаково без встановлених у читача шрифтів.
// Semantic mode reflows from the structure tree, so this must run after the
// tagging pass: ToHtml falls back to a heuristic body when GetStructTree() is
// null, and the export loses its heading structure silently.
const semantic = doc.ToHtml();
const fixed = doc.ToHtml({ mode: 'fixed', fonts: 'embed' });
Обидва виходи служать різним цілям: семантичний HTML — це те, що вам потрібно для читання або повторної публікації контенту в інтернеті, а фіксований HTML — це те, що вам потрібно, коли точне візуальне розташування сторінки має залишатися незмінним у браузері.
Експорти Word та Vector
Document.ToDocx(), викликаний без параметрів, створює переоформлений .docx: абзаци та зображення, які текстовий процесор може перенести та редагувати як звичайний документ. Передача { mode: 'textbox' } натомість зберігає геометрію кожної сторінки, розміщуючи вміст у фіксованих текстових полях, а не дозволяючи йому переоформлюватися — ближче до достовірної візуальної копії, ніж до редагованого документа. Page.ToSvg() виводить одну сторінку у вигляді окремого рядка <svg>, що корисно, коли потрібна векторна, незалежна від роздільної здатності копія однієї сторінки, а не растрове зображення.
import { Document } from '@asposefoss/pdf';
const doc = Document.OpenFile('in.pdf');
const svg = doc.Pages[0].ToSvg(); // standalone <svg> string
const docx = doc.ToDocx(); // .docx bytes, reflowed, images in the package
const fixed = doc.ToDocx({ mode: 'textbox' }); // .docx keeping each page's own geometry
Перевірка та конвертація у PDF/A, PDF/X та PDF/UA
Document.ValidatePdfA(), Document.ValidatePdfX() та Document.ValidatePdfUa() кожен перевіряє документ проти відібраного, машинно-перевіряного підмножини відповідного стандарту — PDF/A (ISO 19005) для довгострокового архівування, PDF/X (ISO 15930) для друкованого виробництва та PDF/UA (ISO 14289-1) для доступності — і повертає ValidationReport з прапорцем Passed, що підсумовує результат. Document.ConvertToPdfA() (і еквівалентний ConvertToPdfX()/ConvertToPdfUa()) намагається виправити документ до цього рівня, потім повторно перевіряє, повертаючи ConversionReport, у якому перераховано, які дії були фактично застосовані та які проблеми залишилися невирішеними.
import { Document } from '@asposefoss/pdf';
const doc = Document.OpenFile('in.pdf');
const pdfa = doc.ValidatePdfA('2b');
console.log(`validate: PDF/A-2b ${pdfa.Passed ? 'passes' : 'fails'}`);
// Conversion runs against a copy: the live document is still saved
// unconverted, so ConvertToPdfA must never touch it directly.
const pages = doc.Pages;
const allPages: number[] = [];
for (let i = 1; i <= pages.length; i++) allPages.push(i);
const copy = doc.ExtractPages(allPages);
const conversion = copy.ConvertToPdfA('2b');
console.log(`pdf/a convert: ${conversion.applied.length} action(s) applied, `
+ `${conversion.unresolved.length} unresolved`);
console.log(`result: ${conversion.passed ? 'passes' : 'still fails'} PDF/A-2b`);
Конвертація не гарантує повну відповідність за один прохід — поширеними причинами залишкових помилок є невбудовані шрифти та відсутня ціль вихідного профілю, які обидва відображаються в conversion.unresolved.
Швидкий старт
Встановіть пакет, а потім виведіть одну сторінку у SVG і весь документ у переоформлений HTML та DOCX:
git clone https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-TypeScript.git
cd Aspose.PDF-FOSS-for-TypeScript
npm install
npm run buildimport { Document } from '@asposefoss/pdf';
const doc = Document.OpenFile('in.pdf');
const svg = doc.Pages[0].ToSvg(); // standalone <svg> string
const html = doc.ToHtml(); // reflowable HTML (falls back without a structure tree)
const docx = doc.ToDocx(); // .docx bytes, reflowed, images in the package
// fs.writeFileSync('page1.svg', svg);
// fs.writeFileSync('out.html', html);
// fs.writeFileSync('out.docx', docx);
Підтримувані формати
| Формат | Розширення | Читати | Запис |
|---|---|---|---|
| ✓ | ✓ | ||
| Markdown | md | ✓ | ✓ |
| SVG | svg | ✓ | ✓ |
| TIFF | tiff | ✓ | ✓ |
| DOCX | docx | — | ✓ |
| HTML | html | — | ✓ |
| PNG | png | — | ✓ |
| EPUB | epub | — | ✓ |
Відкритий код та ліцензування
Aspose.PDF FOSS для TypeScript випускається під ліцензією MIT, вихідний код опубліковано на GitHub. Не існує водяного знака оцінки, обмеження використання або окремого файлу ліцензії для керування, і бібліотеку можна використовувати в комерційних продуктах без роялті.
Пакет наразі має версію 0.1.0, що свідчить про активну ранню стадію розробки. Node.js (>=22) — єдина вимога до середовища виконання, і пакет не має інших сторонніх залежностей.