はじめに

introductory post は、変換の基本的な形を示しています: Document.ToHtml()Document.ToMarkdown()、および Document.ToDocx() を、引数なしで呼び出すと妥当なデフォルトが得られます。これらのメソッドはすべて、実際に出力されるものを変更するオプションオブジェクトを受け取ります — セマンティックマークアップとピクセル忠実なコピー、再フロー可能なWord文書と各ページの正確なレイアウトを再現するものとを比較して。

本稿ではこれらのオプションに加えて、導入部では全く触れられていなかった変換方向、すなわち PDF/A、PDF/X、PDF/UA 標準に対する文書の検証と、Document.ConvertToPdfA() およびその関連規格への準拠に向けたリメディエーションについて解説します。


含まれる内容

HTML Export: セマンティック 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 とベクターのエクスポート

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) — そして結果を要約した Passed フラグを含む ValidationReport を返します。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`);

変換が1回の処理で完全な準拠に達することは保証されません — 残存する失敗の一般的な原因として、フォントが埋め込まれていないことや出力インテントが欠如していることがあり、これらはすべて conversion.unresolved に表示されます。


クイックスタート

パッケージをインストールし、次に1ページを 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 for TypeScript は MIT ライセンスの下で公開されており、ソースは GitHub に掲載されています。評価用ウォーターマークや使用制限、別個のライセンスファイルの管理は不要で、ロイヤリティなしで商用製品にライブラリを使用できます。

このパッケージは現在バージョン 0.1.0 で、積極的な初期段階の開発が行われていることを示しています。Node.js (>=22) が唯一の実行環境要件であり、他のサードパーティ依存はありません。


開始手順

関連リソース