コア API

コアAPI

このガイドでは、Document と Page クラスを使用して PDF ドキュメントを開く、編集する、組み立てる、保存する方法を示します — これは TypeScript 用の Aspose.PDF FOSS におけるすべての操作のエントリーポイントです。Document は PDF ファイル全体を読み込み、作成、組み立て、保存します;Page は doc.Pages を介してアクセスでき、ページ単位のテキスト、画像、注釈、コンテンツストリーム操作を公開します。


ドキュメント ライフサイクル

Document.OpenFile() はファイルパスから PDF を開きます;Document.Open() はメモリ上の Uint8Array を受け取ります。ページはその場で検査・編集でき、Document.WriteTo() は結果を書き戻します — 必要に応じて xref-stream と object-stream の圧縮を使用できます。

import { Document } from '@asposefoss/pdf';

// Open from disk (or Document.Open(uint8array) for in-memory data)
const doc = Document.OpenFile('input.pdf');

// Inspect and edit pages
const pages = doc.Pages;
console.log(pages.length);
pages[0].Rotate = 90;
doc.RemovePage(2);                 // 1-based page number
doc.Reorder([3, 1, 2]);

// Metadata
doc.SetMetadata({ title: 'Report', author: 'Jane', custom: { Dept: 'R&D' } });

// Save
doc.WriteTo('output.pdf');         // or: const bytes = doc.Save();
doc.WriteTo('small.pdf', { compressed: true }); // xref stream + object streams

ページの分割、結合、抽出

Document.Split() はページごとに 1 つの Document を返します。Document.ExtractPages() は 1 から始まる、重複を許可したページリストを受け取り、そのページだけを含む新しい Document を返します。Document.Append() と Document.InsertPage() はドキュメント間でページをコピーし、Document.Merge() は複数のドキュメントを 1 つに結合します。

const parts = doc.Split();                       // one Document per page
const chapter = doc.ExtractPages([3, 4, 5]);     // subset (1-based, repeats allowed) as a new Document

docA.Append(docB);                               // copy all of docB's pages onto docA
docA.InsertPage(1, docB.Pages[0]);               // copy a single page across documents

新しいドキュメントの作成

Document.New() は指定された PageFormat で空白のドキュメントを開始します。Page.AddText() は位置指定されたテキストを配置し、Document.AddPage() はさらにページを追加します。その際、PageFormat.A4.landscape() のような回転フォーマットも含めることができます。

import { Document, PageFormat } from '@asposefoss/pdf';
const doc = Document.New(PageFormat.A4);          // one blank A4 page
doc.Pages[0].AddText('Hello', 72, 720, { fontSize: 14 });
doc.AddPage(PageFormat.A4.landscape());           // append more as you go
doc.WriteTo('scratch.pdf');

透かしとページ番号

Page.AddText() は回転、色、透明度もサポートしており、追加のクラスなしでページ番号や斜めの透かしを描画するのに十分です。

const doc = Document.OpenFile('in.pdf');
const page = doc.Pages[0];

// Page number, right-aligned near the bottom-right corner.
const w = page.Rect[2] - page.Rect[0];
page.AddText(`Page ${page.Number}`, w - 40, 20, { fontSize: 10, align: 'right' });

// Semi-transparent diagonal watermark, centered on the page.
page.AddText('DRAFT', page.Rect[2] / 2, page.Rect[3] / 2, {
  font: 'Times-Bold', fontSize: 64, color: [0.7, 0.7, 0.7], opacity: 0.4, rotate: 45, align: 'center',
});

doc.WriteTo('out.pdf');

コンテンツストリームの内省

parseContentStream() はページの生 /Contents ストリームを演算子/オペランドのペアのリストにデコードし、serializeContentStream() は編集された演算子リストをバイトに変換します。

import { parseContentStream, serializeContentStream } from '@asposefoss/pdf';

const ops = parseContentStream(doc.Pages[0].Contents);
// ops: { operator: string, operands: PdfObject[], inlineImage?: {...} }[]
for (const op of ops) {
  if (op.operator === 'Tj') console.log('text op:', op.operands);
}
const bytes = serializeContentStream(ops);       // round-trips operators + operands

マルチカラムテキストフロー

Page.AddTextBlock() は長いテキスト文字列を矩形領域に流し込み、収まりきらなかったテキストを返します。そのテキストは2回目の呼び出しに渡して、別のカラムへ流れを続けることができます。

const rest = page.AddTextBlock(longText, [72, 600, 200, 150], {
  font: 'Times-Roman', fontSize: 11, align: 'justify', valign: 'top', leading: 14,
});
if (rest) page.AddTextBlock(rest, [300, 600, 200, 150]); // continue into a 2nd column

ヒントとベストプラクティス

  • ファイルパスには Document.OpenFile() を、インメモリの Uint8Array データには Document.Open() を使用してください。
  • メソッド RemovePage() や ExtractPages() に渡されるページ番号は 1 から始まり、doc.Pages は 0 から始まる配列です。
  • { compressed: true } を Document.WriteTo() に渡すと、出力で xref-stream と object-stream の圧縮が有効になります。
  • Document.ExtractPages() は同じページ番号の繰り返しを受け付けるため、同一のソースページが結果に複数回現れることがあります。
  • 座標をハードコーディングせず、ページの実際の幅と高さに対する相対位置を計算するには、page.Rect を読み取ります。

一般的な問題

問題原因修正
Document.Open() / OpenFile() が InvalidPasswordError を投げますPDF はパスワードで保護されており、パスワードが提供されていない(または間違っている){ password: '...' } を Document.OpenFile() / Document.Open() に渡す
RemovePage() が誤ったページを削除しますRemovePage() に渡されるページ番号は0ベースではなく、1ベースです1ベースのページ番号を渡します。これは doc.Pages 配列インデックスとは別です
WriteTo() の出力が予想より大きいですデフォルトの保存では xref/object-stream 圧縮が使用されません{ compressed: true } を Document.WriteTo() に渡す

FAQ

Document.Open() はファイルパスとメモリ上のデータの両方を受け付けますか?

Document.OpenFile() はファイルパスから開き、Document.Open() はメモリ上のバイトの Uint8Array を受け入れます。

ページ番号は0ベースですか、それとも1ベースですか?

どちらも可能ですが、API に依存します。doc.Pages は単純な0ベース配列ですが、RemovePage() や ExtractPages() といったメソッドは1ベースのページ番号を使用します。

保存時にドキュメントを暗号化できますか?

はい — encrypt オプションを WriteTo() / Save() に渡し、algorithm: 'aes256' | 'aes128' | 'rc4' とオプションのユーザー/オーナーパスワードを指定します。

出力ファイルのサイズを減らすにはどうすればよいですか?

xref-stream と object-stream の圧縮を有効にするには、{ compressed: true } を Document.WriteTo() に渡します。

ページの生のコンテンツストリームオペレーターを検査できますか?

はい — parseContentStream(doc.Pages[0].Contents) はオペレーターリストを返し、serializeContentStream() は編集されたリストをバイトに変換します。


API Reference 概要

クラス / メソッド説明
DocumentPDF ドキュメントの作成、ロード、保存のための中心エントリポイント
Document.OpenFile() / Document.Open()ファイルパスまたはメモリ内バイトからPDFをロードする
Document.New()指定された PageFormat で空白のドキュメントを開始する
Document.WriteTo() / Document.Save()ドキュメントをファイルパスに書き込むか、バイトを返す
Document.Split() / Document.Merge() / Document.ExtractPages()ドキュメント間でページを分割、結合、抽出する
Document.Append() / Document.InsertPage()ある文書から別の文書へページをコピーする
Page単一の PDF ページ;テキスト、画像、注釈、そして content-stream のメソッドを公開します
Page.AddText() / Page.AddTextBlock()ページに配置されたテキストまたは流れるテキストを追加する
parseContentStream() / serializeContentStream()ページの生の content-stream 演算子を解析し、再シリアライズする

参照

 日本語