Node.jsを使用してPDFファイルを圧縮する方法

This article was translated from English: Does it need improvement?
Translated
View the article in English

大きなPDFファイルは、ファイル転送を遅くし、ストレージコストを増大させ、ドキュメントが多いアプリケーションでのパフォーマンスを低下させます。 IronPDF for Node.jsは、内蔵画像の品質を低下させ、必要に応じてドキュメント内の表示寸法に画像をリスケールするcompressSizeメソッドを提供します。これにより、ドキュメント構造を変更せずにファイルサイズを50%以上削減することができます。

クイックスタート: Node.jsでPDFを圧縮する

パッケージをインストールし、PDFを読み込み、compressSizeを品質値1から100の間で呼び出します。

```javascript {.line-numbers} //:path=/static-assets/pdf/content-code-examples/how-to/nodejs-compress-pdf/quickstart.js import { PdfDocument } from "@ironsoftware/IronPDF";

// 既存のPDFを読み込む const pdf = await PdfDocument.fromFile("report.pdf");

// 埋め込まれた画像を60%のJPEG品質で圧縮する await pdf.compressSize(60);

// 結果を保存する await pdf.saveAs("report-compressed.pdf");


<div class="hsg-featured-snippet">
<h3>最小限のワークフロー(5ステップ)</h3>

1. IronPDFをインストールする: `npm install @ironsoftware/ironpdf`
2. `@ironsoftware/ironpdf`からインポートする
3. `PdfDocument.fromFile(path)`を使用してソースファイルをロードする
4. `await pdf.compressSize(quality)`を呼び出します - 品質範囲は1-100です
5. `await pdf.saveAs(outputPath)`を使用して結果を保存します
</div>

## なぜNode.jsアプリケーションにとってPDFファイルサイズが重要なのですか?

PDFサイズは、配信速度とストレージコストに直接影響します。APIエンドポイント経由で送信される20MBのレポートPDFは、モバイル接続で顕著な遅延を追加します。 毎日数千の文書を処理するバッチ処理パイプラインでは、30%のサイズ削減だけでも大幅なストレージ節約に繋がります。

IronPDFの`compressSize`メソッドは、大きなPDFファイルの主要な原因である埋め込み画像を対象としています。 レンダリング中、PDFオブジェクトレベルでテキストとベクトルグラフィックスは十分圧縮されますが、元の解像度で埋め込まれたラスター画像は、一般的なビジネス文書での過剰な重みのほとんどを占めます。 デフォルトから(通常は95-100%)JPEG品質を60-85%に下げることで、最も目に見える品質損失なしに最大のサイズ削減が得られます。

ヒント品質値が80以上の場合、通常の画面解像度で元のものと見分けが付きません。 60未満の値は、ファイルサイズが主な制約となるアーカイブまたはプレビュー用途に予約してください。
## `compressSize`メソッドはどのように機能しますか? `compressSize`メソッドは、2つのパラメーターを受け取ります: `scaleImages`(オプション、ブール値)。 `false`の場合、このメソッドは各埋め込みJPEGをターゲット品質で再エンコードします。 `true`である場合、PDFレイアウト内で表示されるサイズに一致するように画像がダウンサンプリングされ、小さなスケールでレンダリングされる画像の解像度が低下します。 ```javascript {.line-numbers} //:path=/static-assets/pdf/content-code-examples/how-to/nodejs-compress-pdf/compress-with-scaling.js import { PdfDocument } from "@ironsoftware/IronPDF"; // ソース文書を読み込む const pdf = await PdfDocument.fromFile("product-catalog.pdf"); // 画像を90%の品質に圧縮し、可視サイズにスケールダウンする await pdf.compressSize(90, true); // 最適化された文書を保存する await pdf.saveAs("product-catalog-optimized.pdf");

scaleImages引数は、高DPIスキャンや表示サイズに関係なく画像をフル解像度で埋め込むHTMLテンプレートから生成されたPDFに特に効果的です。これを有効にすることで、通常の印刷や画面解像度で視覚的な劣化を伴わずに、ファイルサイズを品質の調整のみよりも縮小することができます。

このメソッドは、そのままPdfDocumentオブジェクトを修正します。 元のファイルを保持する必要がある場合、compressSizeを呼び出す前にドキュメントをクローンするか、別の保存パスを使用してください。

どの品質設定を使用するべきですか?

適切な品質値は、圧縮後にPDFがどのように使用されるかに依存します:

  • 90-100: ほぼ非圧縮。 ドキュメントをフルズームで印刷または表示する場合に使用します。
  • 80-89: 高品質で明らかに小さいファイル。ほとんどのビジネス文書のデフォルトの出発点。
  • 60-79: 中品質。 画面表示、ウェブ配信、メール添付に適しています。
  • 60未満: 低品質。 プレビュのサムネイル、アーカイブコピー、またはファイルサイズが重要なケースに適しています。

ご注意品質スケールは特にJPEG画像の再エンコードに適用されます。 PDF内のテキスト、ベクトルグラフィックス、非JPEG画像には品質設定が影響しません。

Node.jsで圧縮結果を測定するにはどうすればよいですか?

圧縮が期待される削減を達成したか確認するのは、Node.js fsモジュールを使用することで簡単です。 compressSizeを呼び出す前後でファイルサイズを読み取り、その結果がアプリケーションの要件を満たすことを確認するために比率を計算します。

```javascript {.line-numbers} //:path=/static-assets/pdf/content-code-examples/how-to/nodejs-compress-pdf/measure-compression.js import { PdfDocument } from "@ironsoftware/IronPDF"; import { statSync } from "fs";

const inputPath = "annual-report.PDF"; const outputPath = "annual-report-compressed.PDF";

const beforeBytes = statSync(inputPath).size;

const pdf = await PdfDocument.fromFile(inputPath); await pdf.compressSize(75); await pdf.saveAs(outputPath);

const afterBytes = statSync(outputPath).size; const reduction = (((beforeBytes - afterBytes) / beforeBytes) * 100).toFixed(1);

console.log(Before: ${(beforeBytes / 1024).toFixed(1)} KB); console.log(After: ${(afterBytes / 1024).toFixed(1)} KB); console.log(Reduced by ${reduction}%);


[Node.js `fs.statSync` API](https://nodejs.org/api/fs.html#fsstatsynspath-options)はバイト数で`Stats`オブジェクトを返します。 本番用パイプラインでは、この比率を文書ごとに記録し、圧縮が期待どおりにサイズを減少させなかった例外(通常はソースで既に圧縮されたスキャンされた文書)を特定できるようにします。

サーバー環境でファイルを処理する前に、`IronPdfGlobalConfig`を構成してください。 エンジン設定の詳細については、[IronPDF Node.js ドキュメント](https://ironpdf.com/nodejs/docs/)を参照してください。)}]

## バッチで複数のPDFを圧縮するにはどうすればよいですか?

本番アプリケーションは、通常、単一のドキュメントを孤立して圧縮することはありません。 以下の例は、`compressSize`操作をブロックせずにNode.jsイベントループが処理できるよう、ファイルパスの配列を同時に処理します。

```javascript {.line-numbers}
//:path=/static-assets/pdf/content-code-examples/how-to/nodejs-compress-pdf/batch-compress.js
import { PdfDocument } from "@ironsoftware/IronPDF";
import path from "path";

async function compressPdfFiles(inputPaths, quality = 80) {
    const results = await Promise.all(
        inputPaths.map(async (inputPath) =&gt; {
            const pdf = await PdfDocument.fromFile(inputPath);
await pdf.compressSize(quality);

            const outputPath = inputPath.replace(".pdf", "-compressed.pdf");
await pdf.saveAs(outputPath);

            return { input: inputPath, output: outputPath };
})
);

return results;
}

// 使用法
const files = ["report-q1.pdf", "report-q2.pdf", "report-q3.pdf"];
const compressed = await compressPdfFiles(files, 75);
compressed.forEach(r => console.log(`Saved: ${r.output}`));

compressSizeの各呼び出しは独立しており、並列化するのに安全です。非常に大規模なバッチ(数百のファイル)の場合、Node.jsのメモリ制限を超えないように配列をチャンク化することを考慮してください。 Node.jsのイベントループに関するドキュメントは、Promise.allがどのようにして主スレッドをブロックせずに同時I/Oをスケジュールするかを説明しています。

圧縮を他のPDF操作とどのように組み合わせますか?

圧縮は、より大きなドキュメント処理チェーンに自然に組み込まれます。 一般的なパターンは、HTMLからPDFを生成し、透かしや署名を追加し、配布前に圧縮することです:

```javascript {.line-numbers} //:path=/static-assets/pdf/content-code-examples/how-to/nodejs-compress-pdf/compress-after-render.js import { PdfDocument, ChromePdfRenderer } from "@ironsoftware/IronPDF";

// HTMLをPDFにレンダリング const renderer = new ChromePdfRenderer(); const pdf = await renderer.renderHtmlAsPDF("

Amount due: $540.00

");

// 保存前に圧縮する -- Chromeでレンダリングされたコンテンツから画像の重さを削減 await pdf.compressSize(85);

// 最終文書を保存する await pdf.saveAs("invoice-1042.pdf");



`ChromePdfRenderer`は、背景画像やCSS参照のアセットを完全解像度で埋め込むことが多いです。 レンダリング後に`compressSize`を呼び出すことで、HTML由来のPDFのファイルサイズを一貫して削減します。 IronPDF [HTML to PDF チュートリアル](https://ironpdf.com/nodejs/tutorials/html-to-pdf/) では、レンダラーの設定を詳細に説明しています。

また、[デジタル署名](https://ironpdf.com/nodejs/examples/digitally-sign-a-pdf/)が必要な文書については、圧縮後に署名を適用してください。 署名は文書のバイトストリームをロックし、さらに変更すると署名が無効になります。

複数ページのドキュメントを扱う場合、圧縮前に[`PdfDocument.merge()`](https://ironpdf.com/nodejs/examples/merge-pdfs/)でマージします。 マージした結果を圧縮する方が、個別のファイルを圧縮してから再度マージするよりも効率的です。

ヒント圧縮前に複数ページの文書をマージします。 マージした結果を圧縮する方が、個別のファイルを圧縮してから再度マージするよりも効率的です。
## Node.jsでのPDF圧縮の次のステップは何ですか? `compressSize`メソッドは、埋め込まれた画像の重さを減らす最も一般的な圧縮の使い方をカバーしています。 特殊なシナリオに対しては、IronPDF [PDF圧縮の例](https://ironpdf.com/nodejs/examples/pdf-compression/)で、追加の動作コードサンプルを提供しており、[APIリファレンス](https://ironpdf.com/nodejs/object-reference/api/)では利用可能なすべてのメソッドシグネチャを文書化しています。 IronPDFはさらに、[画像をPDFに変換する](https://ironpdf.com/nodejs/examples/image-to-pdf/)、[PDFテキストを読み取る](https://ironpdf.com/nodejs/examples/reading-pdf-text/)、[PDFからページを削除する](https://ironpdf.com/nodejs/examples/remove-page-from-pdf/)のサポートがあります。これらすべての操作は同じ`PdfDocument` APIと統合されています。 Node.jsでのPDF機能の完全な概要については、[IronPDF Node.js ドキュメント](https://ironpdf.com/nodejs/docs/)をご覧ください。 プロジェクトで圧縮をテストする準備はできましたか? [無料トライアルを開始](#trial-license)して、上記の例を透かしなしで実行するか、[ライセンスオプションを表示](#licensing)して本番展開について確認してください。 `PdfDocument`

よくある質問

Node.jsでIronPDFを使用してPDFを圧縮する方法は?

PdfDocument.fromFile(path)を使用してPDFをロードし、品質値1から100の間でawait pdf.compressSize(quality)を呼び出し、await pdf.saveAs(outputPath)で結果を保存します。最初にnpm install @ironsoftware/ironpdfを使用してパッケージをインストールします。

compressSizeの品質パラメーターは何を制御しますか?

品質パラメーター(整数1-100)は、埋め込まれたラスター画像のJPEG再エンコードレベルを制御します。80-89の値は、高品質でサイズが目立って小さくなる出力を生成し、ほとんどのビジネス文書の推奨開始点です。60未満の値は、ファイルサイズが主な制約となるアーカイブまたはプレビュー用途に適しています。

compressSizeのscaleImagesパラメーターとは?

オプションである2番目のパラメーターscaleImages(boolean、デフォルトfalse)は、PDFレイアウトにおける埋め込まれた画像をその可視サイズにダウンサンプルします。これをtrueに設定すると、フル解像度で画像を埋め込む高DPIスキャンまたはHTMLテンプレートから生成されたPDFに効果的です。

compressSizeを使用した場合、PDFファイルサイズはどれくらい削減可能ですか?

削減はソースPDFのコンテンツによります。多くの高解像度ラスター画像を含むドキュメントは50%以上の削減が見込めます。主にテキストおよびベクターグラフィックスを含むPDFは最小限の削減となります。compressSizeはJPEG画像再エンコードを対象にしているためです。

Node.jsで圧縮結果を測定するにはどうすればいいですか?

圧縮前と後のバイト単位のファイルサイズを読み取るにはfs.statSync(path).sizeを使用します。比率を((before - after) / before) * 100として計算し、削減率を取得します。

Darrius Serrant
フルスタックソフトウェアエンジニア(WebOps)

Darrius Serrantは、マイアミ大学でコンピュータサイエンスの学士号を取得し、Iron SoftwareでフルスタックWebOpsマーケティングエンジニアとして働いています。若い頃からコーディングに惹かれ、コンピューティングを神秘的かつアクセス可能なものとし、創造性と問題解決のための完璧な媒体と考えていました。

Iron Softwareでは、新しいものを創造することと、複雑なコンセプトをより理解しやすくすることを楽しんでいます。Resident Developerの一人として、次世代に専門知識を共有するために、学生を教えることにも志願しました。

Darriusにとって、その仕事は価値があり、実際の影響があるため、満足感があります。

準備はできましたか?
バージョン: 2026.6 リリースされたばかり
Still Scrolling Icon

まだスクロールしていますか?

すぐに証拠が欲しいですか?
サンプルを実行するHTML が PDF に変換されるのを確認します。