【概要】

.Net Framework 4.0(C#)にて、 DocumentViewerを使った印刷プログラムで、ページ数の多い印刷を行うと、
「印刷が取り消されました。Win32 エラー: 算術結果が 32 ビットを超えています。」
と、エラーが出てしまう。
場所 Microsoft.Internal.GDIExporter.CGDIRenderTarget.ThrowOnFailure(Int32 hr)で発生しているようだ。
今回の場合では、罫線ありの28ページものを印刷すると26ページあたりでこのエラーが発生した。

【開発環境】

Visual Studio 2010 sp1
Windows7 x64
.Net Framework 4.0

【発生条件】

WindowsXP (32ビット)では発生してなかった。
今回使用するPCをWindows7 x64に変更したときにこの問題が発覚した。
ローカルプリンターへ印刷しても問題はおこらない。
他のWindows7PC上の共有プリンター(Epson VP-1200)に印刷した時に発生する。
IBM 5557-HJ2でも同様の現象を確認した。

【解決方法】

いろいろテスト用のプログラムで確認した結果、.NET Framework4.0上でのみ発生することが分かった。よって、プラットフォームを.NET FrameworK3.5に変更したところ印刷エラーは発生しなくなった。
また、印刷速度(スプール完了までの時間)も大幅にUPした。
そもそも.NET Framework4.0上では、スプールが完了するもでの時間が異常に遅かった。

(追加情報)

でもプラットフォームを.NET Framework3.5に変更すると、ゴシック体で作成されているはずなのに、印刷すると明朝体で出力されてしまうようになった。

http://www.aishinsys.co.jp/wordpress/?p=402の記事どおりだね;;

HotFixを当てると解決したが、ずいぶん前からある問題なのにまだ通常アップデートに含まれてないことに遺憾の意;;

(再追加情報 2013/11/15)

.NET Framework3.5を利用するだけでは、まだ「32ビットうんぬん・・」のエラーが出ることがわかった。結局、文書番号: 2566651のHotFixを必ず当てなくてはならないようだ。

自分の開発マシンには既にHotTFixが当たっていたので、間違った報告をしてしまいました。申し訳ないm(__)m