Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
.netでPDFページを画像化する時の解像度指定
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30774#CommentId85362
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2022/7/21 18:01:15
> そもそも PDF 文書側には、「解像度」という情報がありません。
「210mm」のデータを 600 dpi で出力したいという話なら、
210[mm] * (5 / 127)[inch / mm] * 600[dot / inch] = 4960.6299[dot]
という換算式です。そして、PdfPage 側のサイズは「1/72 インチ単位」。
つまり、幅に関しては
inch = 「page.Size.Width / 72」
で求まるので、あとは 600dpi で出力したい場合のピクセル数は
600 * page.Size.Width / 72
で求められるのでは無いでしょうか?
Size で都合が悪い場合は Dimensions から求めるということで。
> pdf をメモ帳等で開いてみると、境界ボックスが /MediaBox や /CropBox などとして
> 座標情報が記録されていることを確認できるかと思います。
> 実際の Dimensions プロパティの内容と比較してみてください。
手元の PDF ファイルを開いてみると、
/Rotate 0
/MediaBox[0.0 0.0 595.276 841.89]
/ArtBox[53.9492 23.8076 538.19 814.538]
などと記録されていました。(PDF 単位 なので、72 で割るとインチになる値)
実際に読み込ませてみたところ
page.Dimensions.MediaBox
→ new Rect(0.0, 0.0, 595.276, 841.89)
page.Dimensions.ArtBox
→ new Rect(71.932266235351562, 31.743467330932617, 645.6544189453125, 1054.3072509765625)
として読み込まれました。
> 内部値が 595.276 だったり 595.320 だったりといった差が生まれることがあります。
> 595.276 × 25.4 ÷ 72 ≒ 210.000144 mm
> 595.320 × 25.4 ÷ 72 ≒ 210.015666 mm
上記の誤差はあれど、600 dpi として出力させるとなると、先ほどの
「600 * page.Size.Width / 72」
の算出式により
600 * 595.276 / 72 = 4960.6333
600 * 595.320 / 72 = 4961.0000
となるので、
>> DestinationWidth = 4961, DestinationHeight = 7016 とすることで
の値に合致した値が算出されますね。