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を読み込み、品質値を1から100の間で指定して compressSize を呼び出します:

```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. `PdfDocument` を `@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` メソッドは、`quality`(必須、1~100の整数)と `scaleImages`(オプション、ブール値)の 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スキャンから生成されたPDFや、表示サイズに関係なく画像をフル解像度で埋め込んだHTMLテンプレートから生成されたPDFに対して特に効果的です。これを有効にすると、品質調整のみを行う場合よりもファイルサイズを大幅に削減でき、一般的なPRINT解像度や画面解像度では画質の劣化が目に見えて生じません。

このメソッドは、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` プロパティをバイト単位で含む `size` オブジェクトを返します。 本番用パイプラインでは、この比率を文書ごとに記録し、圧縮が期待どおりにサイズを減少させなかった例外(通常はソースで既に圧縮されたスキャンされた文書)を特定できるようにします。

重要サーバー環境でファイルを処理する前に、`IronPdfGlobalConfig`を構成してください。 エンジン設定の詳細については、[IronPDF Node.js ドキュメント](https://ironpdf.com/nodejs/docs/)を参照してください。)}]
## バッチで複数のPDFを圧縮するにはどうすればよいですか? 本番アプリケーションは、通常、単一のドキュメントを孤立して圧縮することはありません。 以下の例では、`Promise.all` を使用してファイルパスの配列を並行処理しています。これにより、Node.js のイベントループは、ブロックすることなく複数の `compressSize` 操作を処理できるようになります: ```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 =&gt; console.log(`Saved: ${r.output}`));

PdfDocument.fromFile および 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.5 just released
Still Scrolling Icon

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

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