トップ回答者
FixDocumentの印刷時に文字化けする(場合がある)

質問
-
WPF のアプリケーションでxpsファイルを作成し、印刷しているのですが
結構な頻度で文字化けを起こしてしまいます。
・同じ帳票でも文字化けする場合としない時がある。
・2枚目、3枚目と続く文字化けしやすい
という点からメモリの問題かと怪しんでいるのですが、同じようになった方や、よい対策方法があれば教えて頂けないでしょうか
尚、環境とソースは下記の通りです
【環境】
Windows8 32bit メモリ2G Intel CPU Z2760 @1.80GHz
Epsoon レーザプリンタ (ドライバはインストールを行い、テスト印刷は正常でした)
A4 サイズの帳票を 1枚 ~ 最大 16枚
CanvasのファイルをXPSファイルに変換した後、そのファイルを読んで
印刷しています。
【出力ソース】
Dim packageUri = New Uri(filePath) ← 印刷するXPSファイルのあるパス
Try
Dim xpsStream As MemoryStream = New MemoryStream
Dim xpsPackage As Package = Package.Open(xpsStream, FileMode.Create, FileAccess.ReadWrite)PackageStore.AddPackage(packageUri, xpsPackage)
Dim xps As Xps.Packaging.XpsDocument = New Xps.Packaging.XpsDocument(xpsPackage, CompressionOption.NotCompressed, packageUri.AbsoluteUri)Dim xpsWriter As Xps.XpsDocumentWriter = Windows.Xps.Packaging.XpsDocument.CreateXpsDocumentWriter(xps)
xpsWriter.Write(prmDoc)Dim PrintQueue As Printing.PrintQueue = GetPrintQueue(PrintName)←出力に使用するプリント情報を取得しています
Dim PrintTicket As New Printing.PrintTicket()
PrintTicket.PageOrientation = PrintOrient ← 印刷方向を指定
PrintTicket.CopyCount = PrintCount ← 印刷枚数を指定Dim printWriter As Xps.XpsDocumentWriter = Printing.PrintQueue.CreateXpsDocumentWriter(PrintQueue)
printWriter.Write(xps.GetFixedDocumentSequence(), PrintTicket)Finally
PackageStore.RemovePackage(packageUri)
End Try
回答
-
あなたのプログラムではなく、標準の XPS ビューアで印刷しても再現するのですよね?そうであれば、Microsoft に問い合わせるべきではないでしょうか。
XPS ビューアで正常に表示される以上、XPS としてはある程度以上、正しいデータが格納されていると推定できます。
その上で、印刷した際に都合が悪い部分は、XPS ビューアの実装上の問題か、XPS 出力のソフトウェアの問題か、プリンターの相性が疑われます。
この場合、プリンターへの出力相当しか実装していないプログラマーにとっては、手立てがありません。従って、Microsoft の技術サポートを使って、原因の究明、あるいは回避策の提案を受けることがもっとも効率的なやり方でしょう。
(第三者には、再現できる環境もないわけですし、XPS ビューアの実装に詳しくもないわけですし、回答することが困難です)- 編集済み AzuleanMVP 2013年4月22日 13:52
- 回答としてマーク 星 睦美 2013年4月24日 6:01
-
自己解決です(あくまで暫定処置ですが)
複数枚のレポートを1つのFixDocumentにまとめて出力すると
2枚目以降からよく発生する為、
複数枚のレポートは複数のFixDocumentにして
出力するように変更しました。
これで5-6枚位の帳票なら、何とか文字化けせずに出力します。
あくまで少し出にくくなっただけで、根本的な解決ではないのですが・・
皆さまありがとうございました。
- 回答としてマーク VbBeginer001 2013年4月25日 8:05
すべての返信
-
ソースコードを見た限り、MemoryStreamやXPSDocument等の解放処理が入っていませんので、どこかでリークしてる可能性があります。
IDisposableが実装されているクラスをUsingステートメントで囲ってみてはどうでしょうか。こんな感じです。
Dim packageUri = New Uri(filePath) Try Using xpsStream As MemoryStream = New MemoryStream Using xpsPackage As Package = Package.Open(xpsStream, FileMode.Create, FileAccess.ReadWrite) PackageStore.AddPackage(packageUri, xpsPackage) Using xps As Xps.Packaging.XpsDocument = New Xps.Packaging.XpsDocument(xpsPackage, CompressionOption.NotCompressed, packageUri.AbsoluteUri) Dim xpsWriter As Xps.XpsDocumentWriter = Windows.Xps.Packaging.XpsDocument.CreateXpsDocumentWriter(xps) xpsWriter.Write(prmDoc) Using PrintQueue As Printing.PrintQueue = GetPrintQueue(PrintName) Dim PrintTicket As New Printing.PrintTicket() PrintTicket.PageOrientation = PrintOrient PrintTicket.CopyCount = PrintCount Dim printWriter As Xps.XpsDocumentWriter = Printing.PrintQueue.CreateXpsDocumentWriter(PrintQueue) printWriter.Write(xps.GetFixedDocumentSequence(), PrintTicket) End Using End Using End Using End Using Catch ex As Exception Finally PackageStore.RemovePackage(packageUri) End Try
とりあえず入れれる所全部Using入れてますけど、ざっと見た限り怪しいのはMemoryStreamとPrintQueueですかね・・・
以上、参考まで。 -
あなたのプログラムではなく、標準の XPS ビューアで印刷しても再現するのですよね?そうであれば、Microsoft に問い合わせるべきではないでしょうか。
XPS ビューアで正常に表示される以上、XPS としてはある程度以上、正しいデータが格納されていると推定できます。
その上で、印刷した際に都合が悪い部分は、XPS ビューアの実装上の問題か、XPS 出力のソフトウェアの問題か、プリンターの相性が疑われます。
この場合、プリンターへの出力相当しか実装していないプログラマーにとっては、手立てがありません。従って、Microsoft の技術サポートを使って、原因の究明、あるいは回避策の提案を受けることがもっとも効率的なやり方でしょう。
(第三者には、再現できる環境もないわけですし、XPS ビューアの実装に詳しくもないわけですし、回答することが困難です)- 編集済み AzuleanMVP 2013年4月22日 13:52
- 回答としてマーク 星 睦美 2013年4月24日 6:01
-
フォーラム オペレーターの星 睦美です。
みっと さん、Azulean さん 回答ありがとうございます。
VbBeginer001 さん、こんにちは
私のほうでも同様の事象がないか調べてみましたが、
事象の発生が「同じ帳票でも文字化けする場合としない時がある」に該当する例は見つけることができませんでした。同じプログラムでも「Windows 7では、今のところ問題無くでています」とのことで、Windows 8 と関連がある問題でしょうか。Windows 7 と異なっている点ではWindows 8ではOpenXPS (拡張子 .oxps )形式が既定になっていますので、ファイル形式がXPS かOXPSか、プリンターがOXPS に対応しているかどうかなどが気になりました。
Azulean さんの返信にありますように調査していただいて原因を見つけにくい場合は、もしよろしければマイクロソフトのサポート窓口(有償)へのお問い合わせを検討いただければと思います。
それでは、今後ともフォーラムをよろしくお願いします。
日本マイクロソフト株式会社 フォーラム オペレーター 星 睦美
-
自己解決です(あくまで暫定処置ですが)
複数枚のレポートを1つのFixDocumentにまとめて出力すると
2枚目以降からよく発生する為、
複数枚のレポートは複数のFixDocumentにして
出力するように変更しました。
これで5-6枚位の帳票なら、何とか文字化けせずに出力します。
あくまで少し出にくくなっただけで、根本的な解決ではないのですが・・
皆さまありがとうございました。
- 回答としてマーク VbBeginer001 2013年4月25日 8:05