Слияние кода завершено, страница обновится автоматически
// 此文件用以实现打印功能,来自 SharpDevelop 项目。
using MahApps.Metro.Controls;
using System;
using System.IO;
using System.Printing; // this *** needs System.Printing reference
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Xps;
using System.Windows.Xps.Packaging; // these bastards are hidden in the ReachFramework reference
namespace LunarSF.SHomeWorkshop.LunarMarkdownEditor
{
/// <summary>
/// Represents the PrintPreviewDialog class to preview documents
/// of type FlowDocument, IDocumentPaginatorSource or DocumentPaginatorWrapper
/// using the PrintPreviewDocumentViewer class.
/// </summary>
public partial class PrintPreviewDialog : MetroWindow
{
private object m_Document;
/// <summary>
/// Initialize a new instance of the PrintEngine.PrintPreviewDialog class.
/// </summary>
public PrintPreviewDialog()
{
InitializeComponent();
}
/// <summary>
/// Gets or sets the document viewer.
/// </summary>
public PrintPreviewDocumentViewer DocumentViewer
{
get { return documentViewer; }
set { documentViewer = value; }
}
/// <summary>
/// Loads the specified FlowDocument document for print preview.
/// </summary>
public void LoadDocument(FlowDocument document)
{
m_Document = document;
string temp = System.IO.Path.GetTempFileName();
if (File.Exists(temp) == true)
File.Delete(temp);
XpsDocument xpsDoc = new XpsDocument(temp, FileAccess.ReadWrite);
XpsDocumentWriter xpsWriter = XpsDocument.CreateXpsDocumentWriter(xpsDoc);
xpsWriter.Write(((FlowDocument)document as IDocumentPaginatorSource).DocumentPaginator);
documentViewer.Document = xpsDoc.GetFixedDocumentSequence();
xpsDoc.Close();
}
/// <summary>
/// Loads the specified DocumentPaginatorWrapper document for print preview.
/// </summary>
public void LoadDocument(DocumentPaginatorWrapper document)
{
m_Document = document;
string temp = System.IO.Path.GetTempFileName();
if (File.Exists(temp) == true)
File.Delete(temp);
XpsDocument xpsDoc = new XpsDocument(temp, FileAccess.ReadWrite);
XpsDocumentWriter xpsWriter = XpsDocument.CreateXpsDocumentWriter(xpsDoc);
xpsWriter.Write(document);
documentViewer.Document = xpsDoc.GetFixedDocumentSequence();
xpsDoc.Close();
}
/// <summary>
/// Loads the specified IDocumentPaginatorSource document for print preview.
/// </summary>
public void LoadDocument(IDocumentPaginatorSource document)
{
m_Document = document;
documentViewer.Document = (IDocumentPaginatorSource)document;
}
}
/// <summary>
/// Represents the PrintPreviewDocumentViewer class with PrintQueue and PrintTicket properties for the document viewer.
/// </summary>
public class PrintPreviewDocumentViewer : DocumentViewer
{
private PrintQueue m_PrintQueue = LocalPrintServer.GetDefaultPrintQueue();
private PrintTicket m_PrintTicket;
/// <summary>
/// Gets or sets the print queue manager.
/// </summary>
public PrintQueue PrintQueue
{
get { return m_PrintQueue; }
set { m_PrintQueue = value; }
}
/// <summary>
/// Gets or sets the print settings for the print job.
/// </summary>
public PrintTicket PrintTicket
{
get { return m_PrintTicket; }
set { m_PrintTicket = value; }
}
protected override void OnPrintCommand()
{
// get a print dialog, defaulted to default printer and default printer's preferences.
PrintDialog printDialog = new PrintDialog();
printDialog.PrintQueue = m_PrintQueue;
printDialog.PrintTicket = m_PrintTicket;
if (printDialog.ShowDialog() == true)
{
m_PrintQueue = printDialog.PrintQueue;
m_PrintTicket = printDialog.PrintTicket;
printDialog.PrintDocument(this.Document.DocumentPaginator, "PrintPreviewJob");
}
}
}
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарий ( 0 )