У меня есть элемент управления RichTextBox в приложении WPF. Я хотел бы распечатать содержимое на принтере. Содержимое содержит изображение вверху, текст и изображение внизу. При печати он напечатает текст и изображение внизу, но не изображение вверху.
Моя первая попытка была напечатать FlowDocument непосредственно из элемента управления RTB. Это напечатало документ с обоими изображениями, но заставило RTB-элемент управления пустым. После некоторого поиска я обнаружил, что мне нужно сначала скопировать FlowDocument из элемента управления RTB и распечатать копию. Копирование FlowDocument устранило проблему с пустым элементом управления, но копия не напечатает верхнее изображение. Я пытался копировать с различными форматами, такими как DataFormats.Rtf, но результаты были одинаковыми.
Во время отладки я заметил, что свойства размера в FD копии для изображений были равны 0, поэтому я добавил некоторый код, чтобы установить высоту и ширину копии перед печатью так же, как оригинал, но это неработать либо.
private void PrintBtn_Click(object sender, RoutedEventArgs e)
{
try
{
LocalPrintServer printServer = new LocalPrintServer();
PrintQueue pqDefault = printServer.DefaultPrintQueue;
if (pqDefault == null)
{
PrintDialog pd = new PrintDialog();
if (pd.ShowDialog() == true)
{
pqDefault = pd.PrintQueue;
}
}
if (pqDefault != null)
{
XpsDocumentWriter xpsdw = PrintQueue.CreateXpsDocumentWriter(pqDefault);
if (xpsdw != null)
{
MemoryStream stream = new MemoryStream();
TextRange sourceDoc = new TextRange(TemplateRTB.Document.ContentStart,
TemplateRTB.Document.ContentEnd);
sourceDoc.Save(stream, DataFormats.XamlPackage);
FlowDocument fd = new FlowDocument();
TextRange copyDocRange = new TextRange(fd.ContentStart, fd.ContentEnd);
copyDocRange.Load(stream, DataFormats.XamlPackage);
TestRTB.Document = fd;
FixBitmaps(TemplateRTB.Document, fd);
DocumentPaginator paginator = ((IDocumentPaginatorSource)fd).DocumentPaginator;
xpsdw.Write(paginator);
//ResultsPrinted(1);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
~~~C#