Вопрос

Я пытаюсь распечатать холст WPF на нескольких страницах.

Я прекрасно доволен масштабированием его, чтобы соответствовать ширине страницы, затем отсечения и переводом холста на каждую страницу; Все довольно простые математики.

То, что я не понимаю, это то, как я получаю размеры зоны для печати, и как сказать принтер, где печатать. Все, что я пытаюсь, оказывается, что значения, которые я использую, - это размер бумаги, и поэтому я получу обрезку, когда принтер не может печатать прямо на край бумаги.

var capabilities = printDialog.GetPrintCapabilities(dialog.PrintTicket);

Возможности имеют следующие свойства:

capabilities.PageImageableArea.ExtentWidth
// "Gets the width of the imageable area"

Что такое «обрабатываемая» область? Это область на бумаге, в которой я могу поставить контент? Я думаю, так как:

capabilities.PageImageableArea.OriginWidth
// Gets the distance from the left edge of the page to the imageable area.

Однако как насчет дна и правой маржи? Где я могу найти эту информацию?

Что следует PageSize свойство DocumentPaginator быть установленным? Должен ли я установить это из capabilities.PageImageableArea? Или делает то dialog.Print() Функция настроить это, и мне просто нужно прочитать из нее в GetPage()?

Наконец, когда я верну DocumentPage, что я передаю в три аргумента геометрии pageSize, bleedBox и contentBox?

Спасибо :)

Это было полезно?

Решение

Хорошо, кажется, что печать всегда происходит от (0, 0) (сверху слева) бумаги.

Получите размер бумаги с:

printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight

и верхняя и левая поля с:

var printCapabilities = printDialog.PrintQueue.GetPrintCapabilities(printDialog.PrintTicket);
printCapabilities.PageImageableArea.OriginWidth, printCapabilities.PageImageableArea.OriginHeight

Я предположил, что дно и правые поля были такими же, как топ и слева, хотя это может не быть в безопасности.

Вы должны масштабировать и заправить холст, как обычно, тогда примените TranslateTransform Размер ваших краев для перемещения содержимого в зону для печати.

Другие советы

Вы смотрели, используя FlowDocument вместо того, чтобы просто печатать холст? Есть хороший пример создания и печати Здесь.

Надеюсь, что бы отрицать необходимость в масштабе математики.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top