Вступ

Вступний пост демонструє базову схему конвертації: 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) — єдина вимога до середовища виконання, і пакет не має інших сторонніх залежностей.


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

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