Опрос
Вы участвуете в программе Windows Insider?
Популярные новости
Обсуждаемые новости

16.07.2006 03:42 | bigpilot

И так у вас уже есть документ с подсветками и примечаниями и вы, вероятно, интересуетесь, как же его распечатать.

Самый простой путь - использовать встроенную поддержку печати Примечаний. Встроенный механизм печати поддерживает механизм WYSIWYG (что видишь, то и получаешь). Это означает то, что Примечания будут напечатаны точно так же, как вы их видите в документе. Т.е. если примечания свернуты, они и будут напечатаны в свернутом виде, если они перекрывают текст на экране, на бумаге текст так же будет перекрыт и т.д.

Добавление поддержки печати примечаний очень просто. Я уже говорил об этом в предыдущих постах, но вынужден сказать еще раз из-за некоторых проблем с печатью, которые, к сожалению, присутствуют в вышедшей Beta 2. Но поскольку кое-кого это может заинтересовать, я повторюсь в этом маленьком отступлении:

В февральском CTP этот код будет печатать примечания контента как FlowDocument так и FixedDocument. В Beta 2 только Fixed контента (включая XPS), для Flow контента это не сработает. (Конечно же в RTM версии все снова будет работать для обоих случаев).

Ну, хватит болтать, давайте взглянем на код. Изменим код предыдущего примера. Для начала изменим событие по-умолчанию для кнопки Print в DocumentViewer'e:

<DocumentViewer Name="Viewer" Grid.Row="1">
   <DocumentViewer.CommandBindings>
      <CommandBinding Command="ApplicationCommands.Print" Executed="OnPrint" />
   </DocumentViewer.CommandBindings>
</DocumentViewer>


Теперь добавим обработчик события:

protected void OnPrint(object sender, EventArgs e)
{
   PrintDialog dialog = new PrintDialog();
   bool? result = dialog.ShowDialog();
   if (result != null && result.Value)
   {
      XpsDocumentWriter writer = PrintQueue.CreateXpsDocumentWriter(dialog.PrintQueue);
      AnnotationService service = AnnotationService.GetService(Viewer);
      AnnotationDocumentPaginator adp = new AnnotationDocumentPaginator(
                              _xpsDocument.GetFixedDocumentSequence().DocumentPaginator,
                              service.Store);
      writer.Write(adp);
   }
}


Как видно из примера, примечания добавляются в очередь печати путем замены IDocumentPaginator на AnnotationDocumentPaginator (ADP). Что незаметно в этом примере из-за метода работы XPS документа, это то, что вы всегда должны отправлять копию вашего документа AnnotationDocumentPaginator'у. Если этого не сделать, DocumentPaginator который будет отображаться, будет поврежден, и после печати вы больше не сможете просматривать документ или корректно работать с примечаниями.

И последнее слово о синхронизации. В API печати не встроено механизмов синхронизации. Поэтому, если вы хотите производить фоновую печать, вам нужно скопировать поток Annotation и использовать конструктор AnnotationDocumentPaginator, которому передается поток. Если вы передадите AnnotationStore напрямую, все изменения, производимые в документе, во время печати могут быть частично отражены в уже печатаемом документе.

Источник: http://blogs.msdn.com/mehlhorn
Перевод: BigPilot

Комментарии

Комментариев нет...
Для возможности комментировать войдите в 1 клик через

По теме

Акции MSFT
420.55 0.00
Акции торгуются с 17:30 до 00:00 по Москве
Все права принадлежат © ms insider @thevista.ru, 2022
Сайт является источником уникальной информации о семействе операционных систем Windows и других продуктах Microsoft. Перепечатка материалов возможна только с разрешения редакции.
Работает на WMS 2.34 (Страница создана за 0.029 секунд (Общее время SQL: 0.014 секунд - SQL запросов: 51 - Среднее время SQL: 0.00027 секунд))
Top.Mail.Ru