質問するログイン新規登録
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

1回答

2690閲覧

印刷処理時にメモリ不足によるエラーが発生する

miiisya

総合スコア35

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2022/03/31 01:01

0

0

フォルダ内のPDFデータを印刷する処理の中で、System.Drawingのメモリ不足によるエラーが発生しています。
pd_PrintPageはのようにPrintDocumentクラスを使用したPrintメソッドで呼び出しているのですが、pd_PrintPageの呼び出し回数が250を超えたあたりでメモリ不足のエラーが出てしまいます。
Disposeが適切にできていないためかと思われますが、解決策はないでしょうか?
PDFを画像イメージに変換するのは、PdfiumViewerというライブラリを使っています。

C#

1 private void pd_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) 2 { 3 //フォルダ内ファイル取得 4 var fileName = "印刷対象のファイルパス"; 5 PdfiumViewer.PdfDocument document = PdfiumViewer.PdfDocument.Load(fileName); 6 //PDFから画像データを作成 7 var dpiX = e.Graphics.DpiX; 8 var dpiY = e.Graphics.DpiY; 9    //DPI・Pixel変換をする処理 10 var w = GetA4PixelWidth((int)dpiX); 11 var h = GetA4PixelWidth((int)dpiY); 12 var img = document.Render(pageNo, w, h, dpiX, dpiY, false); 13 //画像の描画 14 e.Graphics.DrawImage(img, 0, 0, e.Graphics.VisibleClipBounds.Width, e.Graphics.VisibleClipBounds.Height); 15 e.HasMorePages = false; 16 e.Graphics.Dispose(); 17 img.Dispose(); 18 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hihijiji

2022/03/31 02:08

試しに PdfiumViewer.PdfDocument document をフィールドにして使いまわしてみてください。
miiisya

2022/03/31 02:40

やってみます
guest

回答1

0

PdfDocumentIPdfDocumentを実装していて
IPdfDocument IDisposableを実装しています

わざわざIDisposableを実装しているということは、
ちゃんとDispose()する必要があると思います。

投稿2022/03/31 02:46

ozwk

総合スコア13553

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問