6

私は自分のエディタの内容を印刷しようとしています:

PrintDialog pd = new PrintDialog();

pd.PageRangeSelection = PageRangeSelection.AllPages;
pd.UserPageRangeEnabled = true;

FlowDocument fd = DocumentPrinter.CreateFlowDocumentForEditor(CurrentDocument.Editor);
DocumentPaginator dp = ((IDocumentPaginatorSource)fd).DocumentPaginator;

bool? res = pd.ShowDialog();

if (res.HasValue && res.Value)
{
    fd.PageHeight = pd.PrintableAreaHeight;
    fd.PageWidth = pd.PrintableAreaWidth;
    fd.PagePadding = new Thickness(50);
    fd.ColumnGap = 0;
    fd.ColumnWidth = pd.PrintableAreaWidth;

    pd.PrintDocument(dp, CurrentDocument.Editor.FileName);
}

私が使用したテストドキュメントには、約 14 ページあります (このページサイズ設定で)。私はそれをテストしました:印刷ダイアログが表示され、ページ範囲を選択し(テキストボックスに「1-3」と入力しました)、クリックしprintました。上記printdocument()でブレークポイントを設定し、printdialog-object を調べました。それは言うpd.PageRangeSelection = PageRangeSelection.UserPagepd.PageRange = {1-3}。1〜3ページだけを印刷したかったので、これは正しいと思います。次に、printdocument()実行された出力pdf(テスト用にpdfプリンターを使用)には14ページがあります(ドキュメント全体が印刷されました)。

私の間違いはどこですか?pagerange-setting が機能しないのはなぜですか?

ご協力いただきありがとうございます

4

2 に答える 2

1

あなたのコードでは、手動で設定しました:

pd.PageRangeSelection = PageRangeSelection.AllPages;

これが、コードがすべてのページを印刷する理由です。

于 2011-09-19T08:37:26.717 に答える
1

これは、が を処理しないためFlowDocumentです。実装によって が作成され、範囲が考慮されていないことがわかります。DocumentPaginatorUserPageRangeFlowDocumentFlowDocumentPaginator

処理されたFlowDocumentPaginator.(Async)GetPage場合は、印刷が要求されたページが利用可能なページのインデックスにあるかどうかを確認するコード チェックが表示されます。Dictionaryまたは、出力する値を持つキーが に存在する場合DocumentPage

言い換えると、PrintDialogデフォルトが にUserPageRangeEnabled設定されている理由はfalse、その機能を使用するには、通常、独自の機能を作成DocumentPaginatorするか、新しい一時ドキュメントをコンパイルしてページのみを保持するロジックを追加する必要があるためです。印刷したい。

ご不明な点がございましたら、お気軽にお問い合わせください。

于 2014-12-26T22:20:22.920 に答える