PrintQueue.AddJob Méthode

Définition

Insère un nouveau travail d'impression dans la file d'attente.

Surcharges

AddJob(String, String, Boolean, PrintTicket)

Insère un nouveau travail d’impression pour un document XPS (XML Paper Specification) dans la file d’attente, lui donne le nom et les paramètres spécifiés, et spécifie s’il doit être validé ou non.

AddJob(String, PrintTicket)

Insère un nouveau travail d’impression pour un document XPS (XML Paper Specification) dans la file d’attente et lui donne le nom et les paramètres spécifiés.

AddJob(String, String, Boolean)

Insère un nouveau travail d’impression pour un document XPS (XML Paper Specification) dans la file d’attente, lui donne le nom spécifié et spécifie s’il doit ou non être validé.

AddJob()

Insère, dans la file d'attente, un nouveau travail d'impression (appelé de façon générique) dont le contenu est un tableau Byte.

AddJob(String)

Insère un nouveau travail d'impression dont le contenu est un tableau Byte, dans la file d'attente.

Remarques

À moins que la file d’attente ne soit suspendue ou dans un état d’erreur, le travail s’imprime lorsqu’il atteint le haut de la file d’attente. Il s’agit donc d’une fonction d’impression.

D’autres méthodes d’impression dans Windows Presentation Foundation (WPF) incluent la PrintDialog.PrintDocument méthode, qui peut être utilisée avec ou sans l’ouverture de la boîte de dialogue, ainsi que les nombreuses Write méthodes et WriteAsync du XpsDocumentWriter.

AddJob(String, String, Boolean, PrintTicket)

Insère un nouveau travail d’impression pour un document XPS (XML Paper Specification) dans la file d’attente, lui donne le nom et les paramètres spécifiés, et spécifie s’il doit être validé ou non.

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

Paramètres

jobName
String

Chemin d'accès et nom du document en cours d'impression.

documentPath
String

Chemin d'accès et nom du document en cours d'impression.

fastCopy
Boolean

true pour mettre en file d’attente rapidement sans commentaires de progression page par page et sans valider que le fichier est valide XPS ; sinon, false.

printTicket
PrintTicket

Paramètres du travail d'impression.

Retours

PrintSystemJobInfo représentant le travail d'impression et son état.

Remarques

Pour plus d’informations, consultez AddJob(String, String, Boolean).

S’applique à

AddJob(String, PrintTicket)

Insère un nouveau travail d’impression pour un document XPS (XML Paper Specification) dans la file d’attente et lui donne le nom et les paramètres spécifiés.

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

Paramètres

jobName
String

Chemin d'accès et nom du document en cours d'impression.

printTicket
PrintTicket

Paramètres du travail d'impression.

Retours

PrintSystemJobInfo représentant le travail d'impression et son état.

Remarques

Pour plus d’informations, consultez AddJob(String).

S’applique à

AddJob(String, String, Boolean)

Insère un nouveau travail d’impression pour un document XPS (XML Paper Specification) dans la file d’attente, lui donne le nom spécifié et spécifie s’il doit ou non être validé.

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

Paramètres

jobName
String

Nom du travail d'impression.

documentPath
String

Chemin d'accès et nom du document en cours d'impression.

fastCopy
Boolean

true pour mettre en file d’attente rapidement sans commentaires de progression page par page et sans valider que le fichier est valide XPS ; sinon, false.

Retours

PrintSystemJobInfo représentant le travail d'impression et son état.

Exemples

L’exemple suivant montre comment utiliser AddJob(String, String, Boolean) pour imprimer par lot tous les fichiers XPS (XML Paper Specification) dans un répertoire.

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

Remarques

Si fastCopy a la valeur true, l’imprimante doit être une vue d’ensemble de l’impression. Si ce n’est pas le cas, la AddJob(String, String, Boolean) méthode lève une exception.

Si fastCopy a la valeur false, il n’est pas nécessaire d’utiliser une imprimante XPSDrv. Le fichier XPS ajouté à la file d’attente est converti en langage de description de page de l’imprimante, tel que PCL ou Postscript. Toutefois, ce type d’impression effectue un appel à COM (Component Object Model). L’appel à COM nécessite que le thread appelant ait un appartement à thread unique (STA) au lieu de l’appartement à threads multiples (MTA), qui est la valeur par défaut dans Microsoft .NET 2.0 et versions ultérieures. (Pour plus d’informations sur les états de thread et d’appartement, consultez Threading managé et non managé, et ApartmentState.) Il existe deux façons de procéder :

  • Le moyen le plus simple consiste à ajouter le STAThreadAttribute (autrement dit, «[System.STAThreadAttribute()] ») juste au-dessus de la première ligne de la méthode de Main l’application (généralement «static void Main(string[] args) »).

  • Si vous avez besoin que l’état d’appartement de votre Main thread soit MTA, vous pouvez héberger l’appel à AddJob(String, String, Boolean) dans un thread distinct dont l’état d’appartement est défini sur STA avec SetApartmentState. L’exemple ci-dessous illustre cette deuxième technique.

Notes

Vous ne pouvez appliquer le STAThreadAttribute à aucune méthode, sauf Main et vous ne pouvez pas utiliser SetApartmentState pour le Main thread.

D’autres méthodes d’impression dans Windows Presentation Foundation (WPF) incluent la PrintDialog.PrintDocument méthode, qui peut être utilisée avec ou sans l’ouverture de la boîte de dialogue, ainsi que les nombreuses Write méthodes et WriteAsync du XpsDocumentWriter.

Voir aussi

S’applique à

AddJob()

Insère, dans la file d'attente, un nouveau travail d'impression (appelé de façon générique) dont le contenu est un tableau Byte.

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

Retours

PrintSystemJobInfo représentant le travail d'impression et son état.

Exemples

L’exemple suivant montre comment utiliser AddJob() pour envoyer un Byte tableau à une file d’attente d’impression. Ce code fonctionne uniquement avec des imprimantes capables de détecter et d’imprimer du texte brut. Certains d’entre eux ne le peuvent pas.

// 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()

Remarques

Utilisez cette méthode pour écrire des informations spécifiques à l’appareil, dans un fichier de spouleur, qui n’est pas automatiquement inclus par le spouleur Microsoft Windows. Bien sûr, vous devez savoir si le fichier de pool est emf (Enhanced Metafile) ou XML Paper Specification (XPS). Si vous préférez utiliser l’API Stream , vous pouvez utiliser la PrintQueueStream classe au lieu de cette méthode.

Une fois la AddJob méthode appelée, vous devez écrire un Byte tableau dans la JobStream propriété du PrintSystemJobInfo qui est retournée par AddJob ou aucun travail d’impression n’est créé. Ce tableau est ce qui s’imprime si l’imprimante fonctionne et n’est pas suspendue.

Attention

Si le JobStream n’est pas fermé avec Close avant la fin du thread dans lequel AddJob est appelé, un InvalidOperationException est levée lorsque ce thread se termine, car le thread du spouleur ne peut pas prendre le contrôle de l’objet Stream .

Dans l’interface utilisateur graphique (GUI) de la file d’attente d’impression, le travail porte le nom « Print System Document ». Pour donner un autre nom au travail, utilisez la AddJob(String) surcharge.

D’autres méthodes d’impression dans Windows Presentation Foundation (WPF) incluent la PrintDialog.PrintDocument méthode, qui peut être utilisée avec ou sans l’ouverture de la boîte de dialogue, ainsi que les nombreuses Write méthodes et WriteAsync du XpsDocumentWriter.

S’applique à

AddJob(String)

Insère un nouveau travail d'impression dont le contenu est un tableau Byte, dans la file d'attente.

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

Paramètres

jobName
String

Nom du travail d'impression.

Retours

PrintSystemJobInfo représentant le travail d'impression et son état.

Exemples

L’exemple suivant montre comment utiliser AddJob(String) pour lire un fichier dans un Byte tableau et envoyer le tableau à une file d’attente d’impression. Ce code suppose qu’il existe un fichier appelé test.txt à la racine du lecteur C :. Ce code fonctionne uniquement avec des imprimantes capables de détecter et d’imprimer du texte brut. Certains d’entre eux ne le peuvent pas.

// 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()

Remarques

Utilisez cette méthode pour écrire des informations spécifiques à l’appareil, dans un fichier de spouleur, qui n’est pas automatiquement inclus par le spouleur Microsoft Windows. Bien sûr, vous devez savoir si le fichier de pool est emf (Enhanced Metafile) ou XML Paper Specification (XPS). Si vous préférez utiliser l’API Stream , vous pouvez utiliser la PrintQueueStream classe au lieu de cette méthode.

Une fois la AddJob méthode appelée, vous devez écrire un Byte tableau dans la JobStream propriété du PrintSystemJobInfo qui est retournée par AddJob ou aucun travail d’impression n’est créé. Ce tableau est ce qui s’imprime si l’imprimante fonctionne et n’est pas suspendue.

Attention

Si le JobStream n’est pas fermé avec Close avant la fin du thread dans lequel AddJob est appelé, un InvalidOperationException est levée lorsque ce thread se termine, car le thread du spouleur ne peut pas prendre le contrôle de l’objet Stream .

D’autres méthodes d’impression dans Windows Presentation Foundation (WPF) incluent la PrintDialog.PrintDocument méthode, qui peut être utilisée avec ou sans l’ouverture de la boîte de dialogue, ainsi que les nombreuses Write méthodes et WriteAsync du XpsDocumentWriter.

S’applique à