先に到達する制限で出力が決まる

PDF.js公式例はscale 1のビューポートと倍率で描画寸法を決めます。Moyoutilは次の式を適用し整数に切り捨てます。例は標準単位・回転なしです。CropBox・回転・ユーザー単位でビューポート自体が変わります。

scale = min(DPI / 72,
            3072 / max(width, height),
            sqrt(8000000 / (width * height)))
outputWidth  = floor(width * scale)
outputHeight = floor(height * scale)

2000×1000は144・216 DPIとも3072×1536pxでした。長辺制限で倍率は1.536です。3000×3000は全設定で2828×2828pxです。800万ピクセル制限が先に働き、整数結果は7,997,584ピクセルです。

二つのビューポートのDPI別出力寸法
自作計算図です。ptは標準単位の例、pxは関数の再現結果です。ファイルの実画面や画質比較ではありません。

PDF.js: viewport and rendering

結果を確認して次の作業を選ぶ

612×792は72・144・216 DPIで612×792、1224×1584、1836×2376pxになりました。DPIが常に無視されるわけではありません。大きなページは保存画像の寸法を確認してください。印刷DPIメタデータが一致する意味ではありません。

大きな図面の細部が必要なら元PDFを保管し、ページ内の領域を扱えるツールを検討します。Moyoutilの分割はページ単位で、領域の切り抜きではありません。画像圧縮もこの上限を解除しません。

よくある質問

PNGなら制限を避けられますか?

いいえ。PNG・JPEG保存前に同じ寸法計算を適用します。形式とピクセル制限は別です。