C# 使用FinePrint将多个文件作为一个打印作业打印
我想打印在Datagrid中显示的所有选定文件 我不想一个接一个地打印它们,我想把它们全部添加到打印队列中,因为我想使用 FinePrint是一种打印机驱动程序,可以将打印队列中的所有文档添加到单个文件中进行打印。在Windows资源管理器中,您可以选择文件,然后右键单击文件上的C# 使用FinePrint将多个文件作为一个打印作业打印,c#,wpf,printing,C#,Wpf,Printing,我想打印在Datagrid中显示的所有选定文件 我不想一个接一个地打印它们,我想把它们全部添加到打印队列中,因为我想使用 FinePrint是一种打印机驱动程序,可以将打印队列中的所有文档添加到单个文件中进行打印。在Windows资源管理器中,您可以选择文件,然后右键单击文件上的Print。选择FinePrint作为默认打印机时,会打开FinePrint窗口并将所有选定文件附加到一个文件。然后你可以做其他事情,比如在页面上设置邮票 我想在我的WPF项目中创建相同的东西,但只要选择文件并单击按钮就
Print
。选择FinePrint作为默认打印机时,会打开FinePrint窗口并将所有选定文件附加到一个文件。然后你可以做其他事情,比如在页面上设置邮票
我想在我的WPF项目中创建相同的东西,但只要选择文件并单击按钮就足够了
编辑:
完整方法:
void btnPrint_Click(object sender, RoutedEventArgs e)
{
List<ZeichnungInDB> selectedItemsList = dataOutOfDb.SelectedItems.Cast<ZeichnungInDB>().ToList();
if(selectedItemsList.Count > 0)
{
PrintDialog printDialog = new PrintDialog();
FileInfo fileInfo;
if (printDialog.ShowDialog() == true)
{
foreach (ZeichnungInDB zeichnung in selectedItemsList)
{
fileInfo = new FileInfo(@"..." + zeichnung.Zeichnungsnummer + "_" + zeichnung.Index + "_VIN_" + zeichnung.Volante_Index + zeichnung.Extension);
using (FileStream file = fileInfo.OpenRead())
{
System.Windows.Markup.ParserContext context = new System.Windows.Markup.ParserContext();
context.BaseUri = new Uri(fileInfo.FullName, UriKind.Absolute);
object doc = (System.Windows.Markup.XamlReader.Load(file, context));
DocumentPaginator paginator = ((IDocumentPaginatorSource)doc).DocumentPaginator;
printDialog.PrintDocument(paginator, "Printing from MMS");
}
}
}
}
}
void btnPrint\u单击(对象发送方,路由目标)
{
List selectedItemsList=dataOutOfDb.SelectedItems.Cast().ToList();
如果(selectedItemsList.Count>0)
{
PrintDialog PrintDialog=新建PrintDialog();
FileInfo FileInfo;
if(printDialog.ShowDialog()==true)
{
foreach(selectedItemsList中的ZeichnungInDB zeichnung)
{
fileInfo=newfileinfo(@“…”+zeichnung.Zeichnungsnummer+“\u”+zeichnung.Index+“\u VIN\u”+zeichnung.Volante\u Index+zeichnung.Extension);
使用(FileStream file=fileInfo.OpenRead())
{
System.Windows.Markup.ParserContext context=新建System.Windows.Markup.ParserContext();
context.BaseUri=新Uri(fileInfo.FullName,UriKind.Absolute);
objectdoc=(System.Windows.Markup.XamlReader.Load(文件,上下文));
DocumentPaginator paginator=((IDocumentPaginatorSource)文档)。DocumentPaginator;
printDialog.PrintDocument(分页器,“从彩信打印”);
}
}
}
}
}
它抛出一个
XamlParseException
,我在这里直接在文件的开头创建doc对象。基本上,您可以设置一个注册表项(计数器),然后以正常方式(一个接一个)打印它们。FinePrint递减计数器并将它们添加到一个作业中
发件人:
使用CollectJobs注册表设置,FinePrint将收集
打印作业之前,请先执行多个打印作业
DWORD注册表项为:
HKEY_当前_用户/软件/精细打印
软件/FinePrint8/FinePrinters/FinePrint/CollectJobs
将CollectJobs值设置为要打印的打印作业数
结合每次FinePrint接收到打印作业时,它都会减少
柜台应检查计数器值,以确保其
在发送下一个作业之前已递减。当所有的工作都完成了
已收集并发送到输出设备,计数器设置为
零
基本上,您可以设置一个注册表项(计数器),然后以正常方式(一个接一个)打印它们。FinePrint减少计数器并将其添加到一个作业中 发件人: 使用CollectJobs注册表设置,FinePrint将收集 打印作业之前,请先执行多个打印作业 DWORD注册表项为: HKEY_当前_用户/软件/精细打印 软件/FinePrint8/FinePrinters/FinePrint/CollectJobs 将CollectJobs值设置为要打印的打印作业数 结合每次FinePrint接收到打印作业时,它都会减少 柜台应检查计数器值,以确保其 在发送下一个作业之前已递减。当所有的工作都完成了 已收集并发送到输出设备,计数器设置为 零
你是什么意思?我不知道。我找到了很多打印PDF的例子,但我不想只打印这个。我只想打印我想要的所有文件。这可能是我,但你的评论对我来说毫无意义。我把你的问题解释为“如何将多个文件添加到一个打印作业中”,我试着回答了这个问题。用一些示例代码详细说明你的问题,并解释问题是什么。我不知道如何用这些代码创建注册表项。我只想显示PrintDialog,然后使用PrintDocument方法打印我在DataGrid中选择的每个文件。但是,我需要一个DocumentPaginator,我不知道如何创建它,因为我有很多不同的扩展,不能只构建一个。“我不知道如何用它创建注册表项。”这是一个完全不同的问题,但是。关于DocumentPaginator,这一点已经在中得到了回答:它是为打印DataGrid而显式创建的。实际上,我有FileInfo对象,或者可以轻松创建它们,因为我有文件的路径。我可以使用FileInfo创建分页器吗?我在谷歌上搜索了一会儿,但没有发现什么有趣的东西。如果我这样使用它,这将是最好的解决方案。你是什么意思?我不知道。我找到了很多打印PDF的例子,但我不想只打印这个。我只想打印我想要的所有文件。这可能是我,但你的评论对我来说毫无意义。我把你的问题解释为“如何将多个文件添加到一个打印作业中”,我试着回答了这个问题。用一些示例代码详细说明你的问题,并解释问题是什么。我不知道如何用这些代码创建注册表项。我只想显示PrintDialog,然后使用PrintDocument方法打印我在DataGrid中选择的每个文件。但是,我需要一个DocumentPaginator,我不知道如何创建它,因为我有很多不同的扩展,不能只构建一个。“我不知道如何用它创建注册表项。”这是一个完全不同的问题,但是。关于DocumentPaginator,这一点已经在中得到了回答:它是为打印DataGrid而显式创建的。实际上,我有FileInfo对象,或者可以轻松创建它们,因为我有文件的路径。我可以使用FileInfo创建