使用FinePrint

时间:2016-11-28 10:44:33

标签: c# wpf printing

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

我不想一个接一个地打印它们,我希望所有人都将它们添加到打印队列中,因为我想使用FinePrint

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");
                }
            }
        }
    }
}

它会直接在File的开头抛出一个XamlParseException来创建doc对象。

1 个答案:

答案 0 :(得分:0)

基本上你设置一个注册表项(计数器),然后以正常方式打印它们(一个接一个)FinePrint减少计数器并将它们添加到一个作业中。

来自:http://fineprint.com/fpsupport-topic/fineprint-developer-kit/

  

使用CollectJobs注册表设置,FinePrint将收集   打印前打印多个打印作业。

     

DWORD注册表项是:

     

HKEY_CURRENT_USER /软件/的FinePrint   软件/ FinePrint8 / FinePrinters /的FinePrint / CollectJobs

     

将CollectJobs值设置为您想要的打印作业数   结合。每次FinePrint收到打印作业时,它都会递减   计数器。应检查计数器值以确保它具有   在下一份工作发出之前已经减少了。当所有的工作都有   收集并发送到输出设备,计数器设置为   零。