コア 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 概要
| クラス / メソッド | 説明 |
|---|---|
Document | PDF ドキュメントの作成、ロード、保存のための中心エントリポイント |
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 演算子を解析し、再シリアライズする |