Вступ

Вступний пост демонструє базову схему конвертації: 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 build
import { 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);

Підтримувані формати

ФорматРозширенняЧитатиЗапис
PDFpdf✓✓
Markdownmd✓✓
SVGsvg✓✓
TIFFtiff✓✓
DOCXdocx—✓
HTMLhtml—✓
PNGpng—✓
EPUBepub—✓

Відкритий код та ліцензування

Aspose.PDF FOSS для TypeScript випускається під ліцензією MIT, вихідний код опубліковано на GitHub. Не існує водяного знака оцінки, обмеження використання або окремого файлу ліцензії для керування, і бібліотеку можна використовувати в комерційних продуктах без роялті.

Пакет наразі має версію 0.1.0, що свідчить про активну ранню стадію розробки. Node.js (>=22) — єдина вимога до середовища виконання, і пакет не має інших сторонніх залежностей.


Початок роботи

Пов’язані ресурси