How to ues the printJob.Transfer(newPrinter,false) function?

Dec 23, 2011 at 7:32 AM

Hello,

       I use the printJob.Transfer(@"\\IP\newprinter,false) function to send a printjob to a new printer ,but i get a Win32Exception error. invalid Printer Name

Following is my code,

  private void pmc_JobWritten(Object sender, PrintJobEventArgs args)
        {
            Console.WriteLine("delegate PrintJobEventHandler pmc_JobWritten");
            PrintJob printJob = args.PrintJob;
            Console.WriteLine("isSpooling : "+printJob.Spooling);
            //if(printJob.Spooling){
            Console.WriteLine("Transfer this PrintJob to new Printer now");
            try{
                printJob.Transfer(@"\\IP\newprinter",false);
                Console.WriteLine("Transfer this PrintJob to new Printer Successfully");
            }catch(Exception e){
                Console.WriteLine(e);
            }
            
            Console.WriteLine(" End delegate PrintJobEventHandler pmc_JobWritten");

 

BR!

Coordinator
Jan 4, 2012 at 1:52 PM

In the source code for Transfer it says:

 

'TODO: Transfer fails to open the print job consistently - this will need to be

raised as an MS support incident before this can be achieved

 

That said, behind the scenes it uses the API call OpenPrinter - on both the source printer and the target printer.  It seems likely that it is objecting to the target printer name (\\IP\newprinter) - maybe try monitoring that printer to see if you have access rights?

The name it uses in getting the source print job is "PrinterName, Job xxxx" - I suppose if the job id is wrong (?) it would also give that error.  You will need to trace through the Transfer code to see what particular line is throwing the error.

 

Sep 8 at 10:15 PM
to want to transfer a job gives me the following error:
access denied
this is the code

For Each p In New PrinterInformationCollection()
            Dim pt As New PrinterInformation("251dw", SpoolerApiConstantEnumerations.PrinterAccessRights.PRINTER_ACCESS_USE, False)
            Dim pi As New PrinterInformation((p.PrinterName).ToString(), SpoolerApiConstantEnumerations.PrinterAccessRights.PRINTER_ALL_ACCESS, True)
            For Each pjItem As PrintJob In pi.PrintJobs
                If pjItem.JobId = joblist.CurrentRow.Cells("JobId").Value Then
                    pjItem.Transfer(pt.PrinterName, False)
                    Exit Sub
                End If
            Next pjItem
        Next p
    Catch ex As Exception

    End Try