Проблемы с диапазоном страниц при печати документа - PullRequest
6 голосов
/ 18 сентября 2011

Я пытаюсь распечатать содержимое моего редактора:

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 страниц (с этими настройками размера страницы).я проверил это: появляется printdialog, и я выбрал диапазон страниц (я набрал «1-3» в текстовое поле) и нажал print.выше printdocument() я установил точку останова и посмотрел на объект printdialog.это говорит pd.PageRangeSelection = PageRangeSelection.UserPage и pd.PageRange = {1-3}.Я думаю, это правильно, потому что я хотел распечатать только страницу 1-3.тогда printdocument() выполнено и в выходном pdf (для тестирования я использую pdf-принтер) есть 14 страниц (весь документ напечатан).

где моя ошибка?почему не работает настройка диапазона страниц?

спасибо за помощь

Ответы [ 2 ]

1 голос
/ 27 декабря 2014

Причина этого в том, что FlowDocument s DocumentPaginator не обрабатывает UserPageRange s.Вы можете видеть, что реализация FlowDocument создает FlowDocumentPaginator, и она не учитывает диапазоны.

Если она справилась, в FlowDocumentPaginator.(Async)GetPage вы видите, проверка кода, чтобы увидеть, находится ли страница, запрошенная для печати, в индексе доступных страниц;или, может быть, если в Dictionary имеется ключ, значение которого DocumentPage для печати. ​​

Другими словами, и причина, по которой для PrintDialog по умолчанию установлено UserPageRangeEnabled, установлено false,потому что для того, чтобы использовать эту функцию, вам обычно нужно написать собственный DocumentPaginator или добавить некоторую логику для компиляции нового временного документа, содержащего только те страницы, которые вы хотите распечатать.

Не стесняйтесь задавать любые вопросы.

0 голосов
/ 19 сентября 2011

В своем коде вы вручную установили:

pd.PageRangeSelection = PageRangeSelection.AllPages;

Вот почему ваш код печатает все страницы.

...