以下是一个示例代码,演示如何在不使用对话框的情况下打印目录下的FixedDocument。
using System;
using System.IO;
using System.Printing;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Media;
namespace PrintFixedDocumentFromDirectory
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void PrintButton_Click(object sender, RoutedEventArgs e)
{
// 获取目录路径
string directoryPath = DirectoryTextBox.Text;
// 创建一个PrintQueue对象,用于打印
PrintQueue printQueue = LocalPrintServer.GetDefaultPrintQueue();
// 创建一个FixedDocument对象
FixedDocument fixedDocument = new FixedDocument();
// 获取目录下的所有文件
string[] files = Directory.GetFiles(directoryPath);
// 遍历文件并添加到FixedDocument中
foreach (string file in files)
{
// 创建一个FixedPage对象
FixedPage fixedPage = new FixedPage();
// 创建一个Image对象,用于显示文件内容
Image image = new Image();
image.Source = new ImageSourceConverter().ConvertFromString(file) as ImageSource;
// 设置Image的位置和大小
image.Width = fixedPage.Width;
image.Height = fixedPage.Height;
// 将Image添加到FixedPage中
fixedPage.Children.Add(image);
// 创建一个PageContent对象,并将FixedPage添加到其中
PageContent pageContent = new PageContent();
((IAddChild)pageContent).AddChild(fixedPage);
// 将PageContent添加到FixedDocument中
fixedDocument.Pages.Add(pageContent);
}
// 创建一个PrintWindow对象,用于打印FixedDocument
PrintWindow printWindow = new PrintWindow(printQueue, fixedDocument);
printWindow.ShowDialog();
}
}
public class PrintWindow : Window
{
private PrintQueue printQueue;
private FixedDocument fixedDocument;
public PrintWindow(PrintQueue printQueue, FixedDocument fixedDocument)
{
this.printQueue = printQueue;
this.fixedDocument = fixedDocument;
}
protected override void OnInitialized(EventArgs e)
{
base.OnInitialized(e);
// 创建一个PrintDialog对象
PrintDialog printDialog = new PrintDialog();
printDialog.PrintQueue = printQueue;
// 打印FixedDocument
printDialog.PrintDocument(fixedDocument.DocumentPaginator, "Printing FixedDocument");
// 关闭窗口
Close();
}
}
}
在上面的示例代码中,我们首先获取用户输入的目录路径,然后遍历目录下的所有文件,创建一个包含文件内容的FixedPage对象,并将其添加到FixedDocument中。接下来,我们创建一个PrintWindow对象,用于打印FixedDocument。在PrintWindow的OnInitialized方法中,我们创建一个PrintDialog对象,并使用PrintDialog的PrintDocument方法打印FixedDocument。最后,我们关闭PrintWindow窗口,打印过程结束。