Way to default the name of the generated XPS file?

戏子无情 提交于 2019-12-21 07:56:20

问题


If a user prints a report, and they happen to be using the Microsoft XPS printer, i would like the default the filename to something meaningful.

i would have thought that the XPS printer would take the name of the print job, and use that as the default filename - but it doesn't.

Is there some other, programatic, way to default the name of the generated XPS file when i print to that printer? i was thinking there might be something like:

  • a registry key
  • global shared memory
  • API call like SetDefaultXPSFilename()
  • extended attributes about a print job

Example

Automate Excel to create a spreadsheet:

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

Now if the user's default printer is the Microsoft XPS Document Writer, then the user will get:

i would like a way for that File name to be defaulted to something useful, such as:

20110729 - Chip Bank Settlement Sheet.xps

The user will accept the default filename, and files will organized automatically, rather than the user typing:

asdfadf.xps

References

  • eggheadcafe: XPS Default File Name
  • MSDN: XPS Name when Sent to Printer

Bump: 20110729 (12 months later)


回答1:


Well, here is a simple way (at least in my case):

(myPrintPage inherits from 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

I haven't found a way, yet, to determine whether or not the printer I have chosen is going to print into a file, hence the test on the printer's name.

In addition to above, here is a piece of code I found useful:

Let's say that my default printer is NOT the XPS Document Writer. My code needs to archive automatically some data, print a report in XPS, then offer the user to print the report on the default printer. In the second step, I need to change the PrinterSettings of myPrintPage.
Here is how:

  '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


It can be handy sometimes.




回答2:


The Microsoft XPS Document Writer (MXDW) will generate an output file path without prompting the user if the application that prints sets lpszOutput in DOCINFO.

If you don't have access to the code of the application then another option is to build an XPS driver that generates a file path even when lpszOutput hasn't been set. The Windows Driver Kit (WDK) is the place to start.

For more details and links see this post.




回答3:


Win2PDF 7 can save as XPS, and does default to the name of the print job. If you don't want to use the print job as the name displayed in the File Save dialog, you can change the default file name by setting a registry value named "PDFTitle".

You can also set the output file without prompting either using the lpszOutput field of DOCINFO, or by setting a registry setting named "PDFFileName" as described in the Win2PDF documentation. The file will be created in the XPS format if the file name contains an .xps extension.



来源:https://stackoverflow.com/questions/1196110/way-to-default-the-name-of-the-generated-xps-file

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!