Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
.netでPDFページを画像化する時の解像度指定
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30774#CommentId85357
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
マナ
 (社会人)
投稿日時
2022/7/21 10:12:30
こんにちは!
現在作成しているツールでは、PDFのページを画像化(今の所24ビットpng)するために、
別途Ghostscriptをインストールし、VBからこれを呼び出すようなことをしています。
ただ、以下の問題があります。
・Ghostscriptのインストールが必要。
・PDFに組み込まれたフォント名表記によってはGhostscript側でエラーとなる。
(cmapのフォント名定義の修正が必要)
・Ghostscriptのセキュリティの問題でバージョン変更があるが、
バグのあるバージョンもあったりするので、管理が大変。
そこで調べてみると、こちらの掲示板にPDFの画像化に関する質問と回答がありました。
■Vb.netでPDFをTiffに変換したい
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=30630
こちらを参考に、画像化に成功しました。
ただ、解像度の指定方法が分かりませんでした。
Ghostscriptでは解像度指定があり、例えばA4縦のPDFを600dpi指定で
4961×7016ピクセルのpng画像を作成できていました。
とりあえずは、PdfPageのRenderToStreamAsyncに渡すPdfPageRenderOptionsで
DestinationWidth = 4961, DestinationHeight = 7016 とすることで
直接サイズ指定を行うことにより、目的の画像を取得できました。
ただ、扱うPDFはA4縦とは限らない(B5やレターサイズ、あるいは横向き)
ので、どうやって指定dpiのサイズを計算すればいいか分かりません。
色々と調べると、以下のブログで、C#ですが、200dpiの指定を行う方法が記載されていました。
■C#でPDFを表示する(WPF)
https://water2litter.net/rye/post/c_pdf_render/
//実際のコード
PdfPageRenderOptions renderOptions = new PdfPageRenderOptions();
renderOptions.DestinationWidth = (uint)Math.Round(page.Dimensions.ArtBox.Width / 96.0 * 200.0);
おそらく上記の200.0というのがdpiを示しているものと思いますが、
その隣の96.0という数値は何を意味しているのでしょうか?
この値は固定にして、これをそのまま参考にしてもいいのでしょうか?