Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用FinePrint将多个文件作为一个打印作业打印_C#_Wpf_Printing - Fatal编程技术网

C# 使用FinePrint将多个文件作为一个打印作业打印

C# 使用FinePrint将多个文件作为一个打印作业打印,c#,wpf,printing,C#,Wpf,Printing,我想打印在Datagrid中显示的所有选定文件 我不想一个接一个地打印它们,我想把它们全部添加到打印队列中,因为我想使用 FinePrint是一种打印机驱动程序,可以将打印队列中的所有文档添加到单个文件中进行打印。在Windows资源管理器中,您可以选择文件,然后右键单击文件上的Print。选择FinePrint作为默认打印机时,会打开FinePrint窗口并将所有选定文件附加到一个文件。然后你可以做其他事情,比如在页面上设置邮票 我想在我的WPF项目中创建相同的东西,但只要选择文件并单击按钮就

我想打印在Datagrid中显示的所有选定文件

我不想一个接一个地打印它们,我想把它们全部添加到打印队列中,因为我想使用

FinePrint是一种打印机驱动程序,可以将打印队列中的所有文档添加到单个文件中进行打印。在Windows资源管理器中,您可以选择文件,然后右键单击文件上的
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创建