Condividi tramite


PrintQueue.AddJob Metodo

Definizione

Inserisce un nuovo processo di stampa nella coda.

Overload

AddJob(String, String, Boolean, PrintTicket)

Inserisce un nuovo processo di stampa per un documento XPS (XML Paper Specification) nella coda, assegna il nome e le impostazioni specificati e specifica se deve essere convalidato o meno.

AddJob(String, PrintTicket)

Inserisce un nuovo processo di stampa per un documento XPS (XML Paper Specification) nella coda e assegna il nome e le impostazioni specificati.

AddJob(String, String, Boolean)

Inserisce un nuovo processo di stampa per un documento XPS (XML Paper Specification) nella coda, assegna il nome specificato e specifica se deve essere convalidato o meno.

AddJob()

Inserisce nella coda un nuovo processo di stampa (con un nome generico), il cui contenuto è una matrice Byte.

AddJob(String)

Inserisce nella coda un nuovo processo di stampa, il cui contenuto è una matrice Byte.

Commenti

A meno che la coda non sia sospesa o in uno stato di errore, il processo viene stampato quando raggiunge la parte superiore della coda, quindi si tratta di una funzione di stampa.

Altri modi per stampare in Windows Presentation Foundation (WPF) includono il PrintDialog.PrintDocument metodo , che può essere usato con o senza aprire il dialogo, e molti Write metodi e WriteAsync di XpsDocumentWriter.

AddJob(String, String, Boolean, PrintTicket)

Inserisce un nuovo processo di stampa per un documento XPS (XML Paper Specification) nella coda, assegna il nome e le impostazioni specificati e specifica se deve essere convalidato o meno.

public:
 System::Printing::PrintSystemJobInfo ^ AddJob(System::String ^ jobName, System::String ^ documentPath, bool fastCopy, System::Printing::PrintTicket ^ printTicket);
public System.Printing.PrintSystemJobInfo AddJob (string jobName, string documentPath, bool fastCopy, System.Printing.PrintTicket printTicket);
member this.AddJob : string * string * bool * System.Printing.PrintTicket -> System.Printing.PrintSystemJobInfo
Public Function AddJob (jobName As String, documentPath As String, fastCopy As Boolean, printTicket As PrintTicket) As PrintSystemJobInfo

Parametri

jobName
String

Nome e percorso del documento in stampa.

documentPath
String

Nome e percorso del documento in stampa.

fastCopy
Boolean

true per spoolare rapidamente senza feedback sullo stato di avanzamento di pagina per pagina e senza convalidare che il file sia XPS valido; in caso contrario, false.

printTicket
PrintTicket

Le impostazioni del processo di stampa.

Restituisce

Oggetto PrintSystemJobInfo che rappresenta il processo di stampa e il suo stato.

Commenti

Per altre informazioni, vedere AddJob(String, String, Boolean).

Si applica a

AddJob(String, PrintTicket)

Inserisce un nuovo processo di stampa per un documento XPS (XML Paper Specification) nella coda e assegna il nome e le impostazioni specificati.

public:
 System::Printing::PrintSystemJobInfo ^ AddJob(System::String ^ jobName, System::Printing::PrintTicket ^ printTicket);
public System.Printing.PrintSystemJobInfo AddJob (string jobName, System.Printing.PrintTicket printTicket);
member this.AddJob : string * System.Printing.PrintTicket -> System.Printing.PrintSystemJobInfo
Public Function AddJob (jobName As String, printTicket As PrintTicket) As PrintSystemJobInfo

Parametri

jobName
String

Nome e percorso del documento in stampa.

printTicket
PrintTicket

Le impostazioni del processo di stampa.

Restituisce

Oggetto PrintSystemJobInfo che rappresenta il processo di stampa e il suo stato.

Commenti

Per altre informazioni, vedere AddJob(String).

Si applica a

AddJob(String, String, Boolean)

Inserisce un nuovo processo di stampa per un documento XPS (XML Paper Specification) nella coda, assegna il nome specificato e specifica se deve essere convalidato o meno.

public:
 System::Printing::PrintSystemJobInfo ^ AddJob(System::String ^ jobName, System::String ^ documentPath, bool fastCopy);
public System.Printing.PrintSystemJobInfo AddJob (string jobName, string documentPath, bool fastCopy);
member this.AddJob : string * string * bool -> System.Printing.PrintSystemJobInfo
Public Function AddJob (jobName As String, documentPath As String, fastCopy As Boolean) As PrintSystemJobInfo

Parametri

jobName
String

Nome del processo di stampa.

documentPath
String

Nome e percorso del documento in stampa.

fastCopy
Boolean

true per spoolare rapidamente senza feedback sullo stato di avanzamento di pagina per pagina e senza convalidare che il file sia XPS valido; in caso contrario, false.

Restituisce

Oggetto PrintSystemJobInfo che rappresenta il processo di stampa e il suo stato.

Esempio

Nell'esempio seguente viene illustrato come usare AddJob(String, String, Boolean) per stampare in batch tutti i file XPS (XML Paper Specification) in una directory.

class Program
{
    [System.MTAThreadAttribute()] // Added for clarity, but this line is redundant because MTA is the default.
    static void Main(string[] args)
    {
        // Create the secondary thread and pass the printing method for 
        // the constructor's ThreadStart delegate parameter. The BatchXPSPrinter
        // class is defined below.
        Thread printingThread = new Thread(BatchXPSPrinter.PrintXPS);

        // Set the thread that will use PrintQueue.AddJob to single threading.
        printingThread.SetApartmentState(ApartmentState.STA);

        // Start the printing thread. The method passed to the Thread 
        // constructor will execute.
        printingThread.Start();
    }
}

public class BatchXPSPrinter
{
    public static void PrintXPS()
    {
        // Create print server and print queue.
        LocalPrintServer localPrintServer = new LocalPrintServer();
        PrintQueue defaultPrintQueue = LocalPrintServer.GetDefaultPrintQueue();

        // Prompt user to identify the directory, and then create the directory object.
        Console.Write("Enter the directory containing the XPS files: ");
        String directoryPath = Console.ReadLine();
        DirectoryInfo dir = new DirectoryInfo(directoryPath);

        // If the user mistyped, end the thread and return to the Main thread.
        if (!dir.Exists)
        {
            Console.WriteLine("There is no such directory.");
        }
        else
        {
            // If there are no XPS files in the directory, end the thread 
            // and return to the Main thread.
            if (dir.GetFiles("*.xps").Length == 0)
            {
                Console.WriteLine("There are no XPS files in the directory.");
            }
            else
            {
                Console.WriteLine("\nJobs will now be added to the print queue.");
                Console.WriteLine("If the queue is not paused and the printer is working, jobs will begin printing.");

                // Batch process all XPS files in the directory.
                foreach (FileInfo f in dir.GetFiles("*.xps"))
                {
                    String nextFile = directoryPath + "\\" + f.Name;
                    Console.WriteLine("Adding {0} to queue.", nextFile);

                    try
                    {
                        // Print the Xps file while providing XPS validation and progress notifications.
                        PrintSystemJobInfo xpsPrintJob = defaultPrintQueue.AddJob(f.Name, nextFile, false);
                    }
                    catch (PrintJobException e)
                    {
                        Console.WriteLine("\n\t{0} could not be added to the print queue.", f.Name);
                        if (e.InnerException.Message == "File contains corrupted data.")
                        {
                            Console.WriteLine("\tIt is not a valid XPS file. Use the isXPS Conformance Tool to debug it.");
                        }
                        Console.WriteLine("\tContinuing with next XPS file.\n");
                    }
                }
            }
        }

        Console.WriteLine("Press Enter to end program.");
        Console.ReadLine();
    }
}
Friend Class Program
    <System.MTAThreadAttribute()>
    Shared Sub Main(ByVal args() As String) ' Added for clarity, but this line is redundant because MTA is the default.
        ' Create the secondary thread and pass the printing method for 
        ' the constructor's ThreadStart delegate parameter. The BatchXPSPrinter
        ' class is defined below.
        Dim printingThread As New Thread(AddressOf BatchXPSPrinter.PrintXPS)

        ' Set the thread that will use PrintQueue.AddJob to single threading.
        printingThread.SetApartmentState(ApartmentState.STA)

        ' Start the printing thread. The method passed to the Thread 
        ' constructor will execute.
        printingThread.Start()

    End Sub

End Class

Public Class BatchXPSPrinter
    Public Shared Sub PrintXPS()
        ' Create print server and print queue.
        Dim localPrintServer As New LocalPrintServer()
        Dim defaultPrintQueue As PrintQueue = LocalPrintServer.GetDefaultPrintQueue()

        ' Prompt user to identify the directory, and then create the directory object.
        Console.Write("Enter the directory containing the XPS files: ")
        Dim directoryPath As String = Console.ReadLine()
        Dim dir As New DirectoryInfo(directoryPath)

        ' If the user mistyped, end the thread and return to the Main thread.
        If Not dir.Exists Then
            Console.WriteLine("There is no such directory.")
        Else
            ' If there are no XPS files in the directory, end the thread 
            ' and return to the Main thread.
            If dir.GetFiles("*.xps").Length = 0 Then
                Console.WriteLine("There are no XPS files in the directory.")
            Else
                Console.WriteLine(vbLf & "Jobs will now be added to the print queue.")
                Console.WriteLine("If the queue is not paused and the printer is working, jobs will begin printing.")

                ' Batch process all XPS files in the directory.
                For Each f As FileInfo In dir.GetFiles("*.xps")
                    Dim nextFile As String = directoryPath & "\" & f.Name
                    Console.WriteLine("Adding {0} to queue.", nextFile)

                    Try
                        ' Print the Xps file while providing XPS validation and progress notifications.
                        Dim xpsPrintJob As PrintSystemJobInfo = defaultPrintQueue.AddJob(f.Name, nextFile, False)
                    Catch e As PrintJobException
                        Console.WriteLine(vbLf & vbTab & "{0} could not be added to the print queue.", f.Name)
                        If e.InnerException.Message = "File contains corrupted data." Then
                            Console.WriteLine(vbTab & "It is not a valid XPS file. Use the isXPS Conformance Tool to debug it.")
                        End If
                        Console.WriteLine(vbTab & "Continuing with next XPS file." & vbLf)
                    End Try

                Next f ' end for each XPS file

            End If 'end if there are no XPS files in the directory

        End If 'end if the directory does not exist

        Console.WriteLine("Press Enter to end program.")
        Console.ReadLine()

    End Sub

End Class

Commenti

Se fastCopy è true, la stampante deve essere una panoramica della stampa. In caso contrario, il AddJob(String, String, Boolean) metodo genera un'eccezione.

Se fastCopy è false, non è necessario utilizzare una stampante XPSDrv. Il file XPS aggiunto alla coda viene convertito nel linguaggio di descrizione della pagina della stampante, ad esempio PCL o Postscript. Tuttavia, questo tipo di stampa effettua una chiamata a Component Object Model (COM). La chiamata a COM richiede che il thread chiamante abbia un apartment a thread singolo (STA) anziché un apartment a thread multipli (MTA) che è l'impostazione predefinita in Microsoft .NET 2.0 e versioni successive. Per altre informazioni sugli stati di threading e apartment, vedere Threading gestito e non gestito e ApartmentState.) Esistono due modi per eseguire questa operazione:

  • Il modo più semplice consiste nell'aggiungere STAThreadAttribute (ovvero "[System.STAThreadAttribute()]") appena sopra la prima riga del metodo dell'applicazione Main (in genere "static void Main(string[] args)").

  • Se è necessario Main che lo stato dell'apartment del thread sia MTA, è possibile ospitare la chiamata a AddJob(String, String, Boolean) in un thread separato il cui stato dell'apartment è impostato su STA con SetApartmentState. L'esempio seguente illustra questa seconda tecnica.

Nota

Non è possibile applicare l'oggetto STAThreadAttribute a qualsiasi metodo, ad eccezione Main di e non è possibile usare SetApartmentState per il Main thread.

Altri modi per stampare in Windows Presentation Foundation (WPF) includono il PrintDialog.PrintDocument metodo , che può essere usato con o senza aprire il dialogo, e molti Write metodi e WriteAsync di XpsDocumentWriter.

Vedi anche

Si applica a

AddJob()

Inserisce nella coda un nuovo processo di stampa (con un nome generico), il cui contenuto è una matrice Byte.

public:
 System::Printing::PrintSystemJobInfo ^ AddJob();
public System.Printing.PrintSystemJobInfo AddJob ();
member this.AddJob : unit -> System.Printing.PrintSystemJobInfo
Public Function AddJob () As PrintSystemJobInfo

Restituisce

Oggetto PrintSystemJobInfo che rappresenta il processo di stampa e il suo stato.

Esempio

Nell'esempio seguente viene illustrato come usare AddJob() per inviare una Byte matrice a una coda di stampa. Questo codice funziona solo con stampanti in grado di rilevare e stampare testo normale. Alcuni di loro non possono.

// Create the printer server and print queue objects
LocalPrintServer localPrintServer = new LocalPrintServer();
PrintQueue defaultPrintQueue = LocalPrintServer.GetDefaultPrintQueue();

// Call AddJob
PrintSystemJobInfo myPrintJob = defaultPrintQueue.AddJob();

// Write a Byte buffer to the JobStream and close the stream
Stream myStream = myPrintJob.JobStream;
Byte[] myByteBuffer = UnicodeEncoding.Unicode.GetBytes("This is a test string for the print job stream.");
myStream.Write(myByteBuffer, 0, myByteBuffer.Length);
myStream.Close();
' Create the printer server and print queue objects
Dim localPrintServer As New LocalPrintServer()
Dim defaultPrintQueue As PrintQueue = LocalPrintServer.GetDefaultPrintQueue()

' Call AddJob
Dim myPrintJob As PrintSystemJobInfo = defaultPrintQueue.AddJob()

' Write a Byte buffer to the JobStream and close the stream
Dim myStream As Stream = myPrintJob.JobStream
Dim myByteBuffer() As Byte = UnicodeEncoding.Unicode.GetBytes("This is a test string for the print job stream.")
myStream.Write(myByteBuffer, 0, myByteBuffer.Length)
myStream.Close()

Commenti

Utilizzare questo metodo per scrivere informazioni specifiche sul dispositivo, in un file di spooling, che non viene incluso automaticamente dallo spooler di Microsoft Windows. Naturalmente, è necessario sapere se il file di spooling è Enhanced Metafile (EMF) o XML Paper Specification (XPS). Se si preferisce usare l'API Stream , è possibile usare la PrintQueueStream classe anziché questo metodo.

Dopo aver chiamato il AddJob metodo, è necessario scrivere una Byte matrice nella JobStream proprietà dell'oggetto PrintSystemJobInfo restituito da AddJob o non viene creato alcun processo di stampa. Questa matrice stampa se la stampante funziona e non è sospesa.

Attenzione

Se l'oggetto JobStream non viene chiuso con Close prima della fine del thread in cui AddJob viene chiamato, viene generata un'eccezione InvalidOperationException quando termina il thread perché il thread spooler non può ottenere il controllo sull'oggetto Stream .

Nell'interfaccia utente grafica (GUI) della coda di stampa, il processo ha il nome "Print System Document". Per assegnare al processo un nome diverso, usare l'overload AddJob(String) .

Altri modi per stampare in Windows Presentation Foundation (WPF) includono il PrintDialog.PrintDocument metodo , che può essere usato con o senza aprire il dialogo, e molti Write metodi e WriteAsync di XpsDocumentWriter.

Si applica a

AddJob(String)

Inserisce nella coda un nuovo processo di stampa, il cui contenuto è una matrice Byte.

public:
 System::Printing::PrintSystemJobInfo ^ AddJob(System::String ^ jobName);
public System.Printing.PrintSystemJobInfo AddJob (string jobName);
member this.AddJob : string -> System.Printing.PrintSystemJobInfo
Public Function AddJob (jobName As String) As PrintSystemJobInfo

Parametri

jobName
String

Nome del processo di stampa.

Restituisce

Oggetto PrintSystemJobInfo che rappresenta il processo di stampa e il suo stato.

Esempio

Nell'esempio seguente viene illustrato come usare AddJob(String) per leggere un file in una Byte matrice e inviare la matrice a una coda di stampa. Questo codice presuppone che sia presente un file denominato test.txt nella radice dell'unità C: . Questo codice funziona solo con stampanti in grado di rilevare e stampare testo normale. Alcuni di loro non possono.

// Create the printer server and print queue objects
LocalPrintServer localPrintServer2 = new LocalPrintServer();
PrintQueue defaultPrintQueue2 = LocalPrintServer.GetDefaultPrintQueue();

// Call AddJob 
PrintSystemJobInfo anotherPrintJob = defaultPrintQueue2.AddJob("MyJob");

// Read a file into a StreamReader
StreamReader myStreamReader = new StreamReader("C:\\test.txt");

// Write a Byte buffer to the JobStream and close the stream
Stream anotherStream = anotherPrintJob.JobStream;
Byte[] anotherByteBuffer = UnicodeEncoding.Unicode.GetBytes(myStreamReader.ReadToEnd());
anotherStream.Write(anotherByteBuffer, 0, anotherByteBuffer.Length);
anotherStream.Close();
' Create the printer server and print queue objects
Dim localPrintServer2 As New LocalPrintServer()
Dim defaultPrintQueue2 As PrintQueue = LocalPrintServer.GetDefaultPrintQueue()

' Call AddJob 
Dim anotherPrintJob As PrintSystemJobInfo = defaultPrintQueue2.AddJob("MyJob")

' Read a file into a StreamReader
Dim myStreamReader As New StreamReader("C:\test.txt")

' Write a Byte buffer to the JobStream and close the stream
Dim anotherStream As Stream = anotherPrintJob.JobStream
Dim anotherByteBuffer() As Byte = UnicodeEncoding.Unicode.GetBytes(myStreamReader.ReadToEnd())
anotherStream.Write(anotherByteBuffer, 0, anotherByteBuffer.Length)
anotherStream.Close()

Commenti

Utilizzare questo metodo per scrivere informazioni specifiche sul dispositivo, in un file di spooling, che non viene incluso automaticamente dallo spooler di Microsoft Windows. Naturalmente, è necessario sapere se il file di spooling è Enhanced Metafile (EMF) o XML Paper Specification (XPS). Se si preferisce usare l'API Stream , è possibile usare la PrintQueueStream classe anziché questo metodo.

Dopo aver chiamato il AddJob metodo, è necessario scrivere una Byte matrice nella JobStream proprietà dell'oggetto PrintSystemJobInfo restituito da AddJob o non viene creato alcun processo di stampa. Questa matrice stampa se la stampante funziona e non è sospesa.

Attenzione

Se l'oggetto JobStream non viene chiuso con Close prima della fine del thread in cui AddJob viene chiamato, viene generata un'eccezione InvalidOperationException quando termina il thread perché il thread spooler non può ottenere il controllo sull'oggetto Stream .

Altri modi per stampare in Windows Presentation Foundation (WPF) includono il PrintDialog.PrintDocument metodo , che può essere usato con o senza aprire il dialogo, e molti Write metodi e WriteAsync di XpsDocumentWriter.

Si applica a