0

私は C1ReportViewer コントロールを使用しており、すでに C1 フォーラムに質問を投稿していますが、同様の問題に遭遇した人がいるかどうかを確認するために、ここにも投稿すると思いました。コントロールは、汎用の Silverlight PrintDocument() メソッドを使用します。

Silverlight 5 でこのコントロールから Crystal Report を印刷すると、レポートが文字化けして印刷されることがあります。これは、異なるサイズのテキスト、先細りの線、および一般的に位置がずれていることを意味します。また、レポート全体を印刷することはめったにありません。

問題をいくつかのプリンターに絞り込み、32 ビット ドライバーを使用するマシンのみに限定しました。これと、Silverlight 5 に加えられた変更に基づいて、この問題は PostScript の互換性に関係していると思います。しかし、弊社の製品はLOBアプリケーションであるため、PS互換のプリンターとプリンタードライバーを強制することはほぼ論外です。

したがって、これが実際にポスト スクリプトの問題である場合、Silverlight 5 のドキュメントに基づくと、PrintDocument() メソッドはデフォルトのビットマップ メソッドにフェイル バックするはずです。SilverLight 5 でのベクター印刷は Postscript プリンターでしか機能しないという理解で正しいですか? を参照してください。

stackoverflow に対する私の質問は次のとおりです。Silverlight 5 での印刷で同様の問題に遭遇した人はいますか、または Crystal Reports/PDF の印刷に成功した人はいますか? そして、偶然にも、あなたはどのような解決策を思いつきましたか?

とても有難い、

グレッグ

4

1 に答える 1

0

私はこれに対する解決策を思いつくことができました。組み込みの C1 印刷機能を使用する代わりに、ビットマップ印刷を強制するコードを書くことができました。

まず、新しい PrintDocument を作成し、その PrintPage イベントのハンドラーをいくつか接続しました。

mobjPrintDocument = New PrintDocument
RemoveHandler mobjPrintDocument.PrintPage, AddressOf Print_Report
AddHandler mobjPrintDocument.PrintPage, AddressOf Print_Report

次に、印刷したいときにいつでも PrintDocument で PrintBitmap 関数を呼び出すことができます。ここでは、ユーザーが [印刷] ボタンをクリックしたときに実行しています。

 Private Sub xbtnPrint_Click(sender As System.Object, e As System.Windows.RoutedEventArgs)
    mintPageIndex = 0
    mobjPrintDocument.PrintBitmap(FileName)
  End Sub

ここからが重要な部分です。PrintPage イベントにフックすることで、対象となるコンテンツを乗っ取ることができます (上記のように)。e.PageVisual を任意のビジュアル xaml 要素に設定すると、PrintBitmap がそれを処理します。ここでは、GetPages 関数を使用してループし、各ページ (pdfviewer 要素) を確実に印刷します。ただし、私が言ったように、任意の視覚要素を指すことができます。

  Private Sub Print_Report(sender As System.Object, e As PrintPageEventArgs)
    e.PageVisual = xobjReportViewer.GetPages(mintPageIndex)
    mintPageIndex += 1
    e.HasMorePages = mintPageIndex < xobjReportViewer.GetPages.Count
  End Sub

e.HasMorePages を使用すると、終了するまでこのイベントを強制的に発生させることができます。

これが誰かに役立つことを願っています。Silverlight 5 と Post-Script プリンターのサポートにより、PostScript エミュレーターを備えた多くのプリンターは互換性がない可能性がありますが、デフォルトではビットマップ印刷にはなりません。この回避策はこれを修正し、LOB タイプのアプリケーションでの印刷を少し安定させます。

于 2012-04-27T14:03:01.673 に答える