РаспечататьДиалог с альбомной и портретной страницей - PullRequest
8 голосов
/ 22 ноября 2011

У меня есть System.Window.Controls.PrintDialog , и я хочу напечатать страницы в ландшафтном и портретном режимах с помощью одного PrintTicket, но, похоже, я могу установить ориентацию только один раз.

Пока я хочу печатать на бумаге, это может не иметь большого значения, но я хочу напечатать / создать PDF-документ из моей Printjob.Там мне нужны страницы с режимом «Пейзаж» и «Портрет» в onc документе.

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

Ответы [ 2 ]

1 голос
/ 06 октября 2014

Спустя долгое время ...

Вы можете сделать это, предоставив EventHandler, который вызывается, запрашивая пользовательский PrintTicket, перед печатью каждой страницы.PageViewModel здесь фактически включает в себя

PageViewModel{
    Page Page {get;set;}
    PageOrientation? PageOrientation {get;set}
}

if (PrintDialog.ShowDialog() == true)
  {
    XpsDocumentWriter xpsDocumentWriter = PrintQueue.CreateXpsDocumentWriter(PrintDialog.PrintQueue);
    xpsDocumentWriter.WritingPrintTicketRequired += (s, e) =>
    {
      PageViewModel pVM = publicationVM.Pages[e.Sequence - 1];
      if (pVM.Orientation != null && pVM.Orientation != publicationVM.Orientation)
      {
        e.CurrentPrintTicket = new PrintTicket();
        e.CurrentPrintTicket.PageOrientation = PageOrientation.Portrait;
      }
    };
    VisualsToXpsDocument visualsToXpsDocument = (VisualsToXpsDocument) xpsDocumentWriter.CreateVisualsCollator(PrintDialog.PrintTicket, PrintDialog.PrintTicket);
    visualsToXpsDocument.BeginBatchWrite();
    Page page;
    foreach (PageViewModel pVM in publicationVM.Pages)
    {
      page = pVM.Page;
      visualsToXpsDocument.Write(page);
    }
    visualsToXpsDocument.EndBatchWrite();
  }

и бинго!смешанный портрет и пейзаж.Дуплекс это тоже хорошо.

1 голос
/ 16 февраля 2012

Не так чисто, как хотелось бы, и больше обходного пути, но я думаю, что это может достичь вашей цели.Вы можете использовать библиотеку iTextSharp для объединения PDF-файлов в одно после нескольких заданий на печать.Вот пример примера кода .

Надеюсь, кто-то придумает более простое решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...