C#でPDFファイルを画像に変換する

C#でPDFファイルを画像に変換する

今日、同僚から「取得したPDFファイルが既存のソフトウェアフローに合わないから、PDFファイルを画像に変換できない?」と言われました。

最終更新 2022/07/16 13:19
黑哥聊dotNet
読了目安 2 分
カテゴリ
.NET
タグ
.NET C# PDF

はじめに

今日、同僚から「入手したPDFファイルが既存のソフトウェアフローに合わない。PDFファイルを画像に変換できないか?」と言われました。早速取り掛かりました。以前、PDFファイル関連のコンポーネントを研究していたことがあるので、GitHubで以前スターを付けたリポジトリ、PdfiumViewerのオープンソースアドレスを探しました: https://github.com/pvginkel/PdfiumViewer:

まず、NuGet で PdfiumViewerImageResizer.Plugins.PdfiumRenderer.Pdfium.Dll をインストールします。

要件に対して、操作対象となるオブジェクトがどのようなプロパティを持つかを理解すべきです。

それでは、PDFファイルを取得したら、PDFにはページ数、ファイルの高さや幅などのプロパティがあることを知っておく必要があります。

画像については、高さ、幅(解像度)、水平解像度と垂直解像度(dpi)などのプロパティが重要です。

これらのプロパティを理解したら、作業を開始できます。最初のステップは、PDFファイルを読み込み、ファイルのページ数とサイズを取得することです。

var pdf = PdfiumViewer.PdfDocument.Load(strpdfPath);
var pdfpage = pdf.PageCount;
var pagesizes = pdf.PageSizes;

次に、画像の高さ、幅、水平解像度、垂直解像度などのプロパティを組み立てます。

document.Render(pageNumber - 1, size.Width, size.Height, dpi, dpi, PdfRenderFlags.Annotations);

最後に、画像を保存します。

image.Save(stream, ImageFormat.Jpeg);

完全なコードは以下の通りです。

public class PdfToImage
{
    /// <summary>
    ///
    /// </summary>
    /// <param name="filePath">PDFファイルパス</param>
    /// <param name="picPath">画像ファイルパス</param>
    public  void PdfToPic(string filePath, string picPath)
    {

        var pdf = PdfiumViewer.PdfDocument.Load(filePath);
        var pdfpage = pdf.PageCount;
        var pagesizes = pdf.PageSizes;

        for (int i = 1; i <= pdfpage; i++)
        {
            Size size = new Size();
            size.Height = (int)pagesizes[(i - 1)].Height;
            size.Width = (int)pagesizes[(i - 1)].Width;
            // ".jpg" は他の形式に変更可能
            RenderPage(filePath, i, size, picPath);
        }

    }

    private void RenderPage(string pdfPath, int pageNumber, System.Drawing.Size size, string outputPath, int dpi = 300)
    {
        using (var document = PdfiumViewer.PdfDocument.Load(pdfPath))
        using (var stream = new FileStream(outputPath, FileMode.Create))
        using (var image = GetPageImage(pageNumber, size, document, dpi))
        {
            image.Save(stream, ImageFormat.Jpeg);
        }
    }
    private static System.Drawing.Image GetPageImage(int pageNumber, Size size, PdfiumViewer.PdfDocument document, int dpi)
    {
        return document.Render(pageNumber - 1, size.Width, size.Height, dpi, dpi, PdfRenderFlags.Annotations);

    }
}
さらに探索

関連読書

その他の記事
同じカテゴリ / 同じタグ 2026/05/25

CodeWF.Markdown:PDFテキストはコピー可能、画像は埋め込み可能。WeChat公式アカウント/知乎/掘金にコピーしてもHTMLソースが表示されない

CodeWF.Markdown と Vex における Markdown のエクスポートと公開コピーの技術実装を共有:MarkdownDocumentExporter、ExportKind、共有画像読み込み、SVG/GIF/WebP のラスタライズ、Word 埋め込みメディアリソース、テキスト選択可能なPDF、Windows CF_HTML リッチHTMLクリップボード、拡張可能なレイアウトテーマ。

続きを読む
同じカテゴリ / 同じタグ 2026/04/22

各OSバージョンの.NETサポート状況(250707更新)

仮想マシンとテストマシンを使用して、各OSバージョンの.NETサポート状況を確認します。OSインストール後、対応するランタイムをインストールし、Stardustエージェントを実行できることを確認します(合格条件)。

続きを読む