Windows.Data.PDFを使って印刷すると文字化け発生
開発環境
- Windows11
- VisualStudio2022
- .NET8 WPF デスクトップアプリケーション (C#)
- 2025/01/31現在
文字化け問題
ドットプリンター専用帳票用に、プリンター設定や位置の微調整を記憶しておけるPDFビュアーを作成してあった。
PDFを扱ういろいろなパッケージが公開されているが、Windows自身もPDFを扱うライブラリーを持っている。それが、「Windows.Data.Pdf」ライブラリーだ。
基本的に以下のようなUsing句を使うだけで、PDFが扱えるようになる。
Using Windows.Data.Pdf;
これまで、無料のパッケージなどを利用していたが、Microsoft様が用意してくれたライブラリーがあるならば、これからはこれ一択でいいと思っていた。しかし、一部のPDFファイルでは、PDFページのレンダリングを行うと文字化けが発生することがあることが分かった。
下部の画像はe-Taxで作成された「給与所得の源泉徴収票等の法定調書合計表」の一部だ。(手書き用にダウンロードできるカラー奴じゃないよ。)
赤の部分が文字化けを起こし、令和06年が26年などになってしまった。まじかよ・・一年以上問題なく使えていたのに・・・
問題のコードはRenderToStreamAsyncでImageSouceへレンダリングしている部分である。
MemoryStream memStream = new(); await page.RenderToStreamAsync(memStream.AsRandomAccessStream(), renderOption); var decode = BitmapDecoder.Create(memStream, BitmapCreateOptions.None, BitmapCacheOption.Default); ImageSource? imageSource = decode.Frames[0]; imageSource.Freeze();
ちなみに、EdgeやAdobe Acroobatで印刷しても文字化けは起こらない。RenderToStreamAsyncを使って画像を得ようとした場合のみに発生するようだ。
また、googleで検索しても文字化け問題は見つけられなかった。
結局、Windows.Data.Pdfを使うのをあきらめ、昔のように無料パッケージPDFiumSharpV2 (ver.1.1.4)に頼ることにした。当然こいつによるレンダリングは問題なかった。
問題を起こすPDFファイルは、お客様情報が入っているため公開できないが、Windows.Data.Pdfに稀な問題があることをここに報告しておく。