如何默认生成的XPS文件的名称?

时间:2009-07-28 19:02:35

标签: printing xps

如果用户打印报告,并且他们恰好使用 Microsoft XPS打印机,我希望默认文件名为有意义的内容。

我原本以为XPS打印机会使用打印作业的名称,并将其用作默认文件名 - 但事实并非如此。

当我打印到该打印机时,是否有其他一些编程方式来默认生成的XPS文件的名称?我在想可能有类似的东西:

  • 注册表项
  • 全局共享内存
  • API调用,如SetDefaultXPSFilename()
  • 有关打印作业的扩展属性

实施例

自动化Excel以创建电子表格:

Excel xl = new ExcelApplication();
Workbook wb = xl.Workbooks.Add();
GenerateReport(wb);
wb.PrintOut();

现在,如果用户的默认打印机是Microsoft XPS Document Writer,则用户将获得:

enter image description here

我希望将File name默认为某种有用的方式,例如:

20110729 - Chip Bank Settlement Sheet.xps

用户将接受默认文件名,文件将自动组织,而不是用户输入:

asdfadf.xps

参考

凹凸:20110729(12个月后)

3 个答案:

答案 0 :(得分:5)

那么, 这是一种简单的方法(至少在我的情况下):

(myPrintPage继承自System.Drawing.Printing.PrintDocument)

    With myPrintPage
        With .PrinterSettings
            If .PrinterName = "Microsoft XPS Document Writer" Then
            .PrintToFile = True
            .PrintFileName = "c:\test.pdf"
            End If
        End With
        .Print()
    End With

我还没有办法确定我选择的打印机是否要打印到文件中,因此测试打印机的名称。

除了上述内容之外,这里还有一段我认为有用的代码:

假设我的默认打印机不是XPS Document Writer。我的代码需要自动存档一些数据,以XPS打印报告,然后让用户在默认打印机上打印报告。在第二步中,我需要更改myPrintPage的PrinterSettings 方法如下:

  'save xps results
    'is the XPS printer installed?
    Dim myXPSfound As Boolean = False
    For Each s As String In System.Drawing.Printing.PrinterSettings.InstalledPrinters
        If s.Contains("XPS") Then
            myXPSfound = True
            Exit For
        End If
    Next
    If myXPSfound Then
        'Manual settings of the XPS printerSettings
        Dim myXPSPrinterSettings As New Drawing.Printing.PrinterSettings
        myXPSPrinterSettings.Collate = False
        myXPSPrinterSettings.Copies = 1
        myXPSPrinterSettings.Duplex = Drawing.Printing.Duplex.Simplex
        myXPSPrinterSettings.FromPage = 0
        myXPSPrinterSettings.MaximumPage = 9999
        myXPSPrinterSettings.MinimumPage = 0
        myXPSPrinterSettings.PrinterName = "Microsoft XPS Document Writer"
        myXPSPrinterSettings.PrintRange = Drawing.Printing.PrintRange.AllPages
        myXPSPrinterSettings.PrintToFile = True
        myXPSPrinterSettings.ToPage = 1

        myPrintPage.PrinterSettings = myXPSPrinterSettings
        myPrintPage.PrinterSettings.PrintToFile = True
        myPrintPage.PrinterSettings.PrintFileName = mytargetFileName & ".xps"
        Try
            myPrintPage.Print()
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Information, "Error Printing the XPS File")
        End Try
    Else
        MsgBox("The Microsoft XPS Writer was no found on this computer", MsgBoxStyle.Information, "Error Printing the XPS File")
    End If


它有时候很方便。

答案 1 :(得分:2)

Microsoft XPS文档编写器(MXDW)将生成输出文件路径,而不会提示用户打印的应用程序是否在DOCINFO中设置了lpszOutput。

如果您无权访问应用程序的代码,那么另一个选项是构建一个生成文件路径的XPS驱动程序,即使尚未设置lpszOutput也是如此。 Windows驱动程序工具包(WDK)是开始的地方。

有关详细信息和链接,请参阅this post

答案 2 :(得分:0)

Win2PDF 7可以另存为XPS,默认为打印作业的名称。如果您不想将打印作业用作“文件保存”对话框中显示的名称,则可以通过设置名为“PDFTitle”的注册表值来更改默认文件名。

您也可以设置输出文件而不提示使用DOCINFO的lpszOutput字段,或者设置名为“PDFFileName”的注册表设置,如Win2PDF文档中所述。如果文件名包含.xps扩展名,则将以XPS格式创建文件。