Drucken eines Dokuments programmgesteuert oder mithilfe von Dialogen

In diesem Artikel wird beschrieben, wie Sie ein Textverarbeitungsdokument aus einer ASP.NET- oder Windows-Dienstanwendung mithilfe von Aspose.Words und XpsPrint API drucken. Außerdem werden die Methoden zum Drucken eines Dokuments mit den Dialogfeldern “Einstellungen”, “Druckvorschau” und “Druckfortschritt” demonstriert und erklärt, wie Sie die Zeit des ersten Aufrufs zum Drucken eines Dokuments verkürzen können.

Drucken eines Dokuments auf einem Server über das XpsPrint-API

Dieser Abschnitt richtet sich an Benutzer, die ein XPS-Dokument aus einer .NET-Anwendung mithilfe von Aspose.Words an den nicht verwalteten XpsPrint API senden möchten.

Einschränkungen beim Drucken eines Dokuments in den ASP.NET- oder Windows-Dienstanwendungen

Wenn Sie eine .NET-Anwendung entwickeln, die gedruckte Ausgaben erzeugt, können Sie normalerweise Klassen verwenden, die im System.Drawing.Printing-Namespace bereitgestellt werden, oder Windows Presentation Foundation (WPF)-Klassen. Wenn es sich bei der Anwendung jedoch um eine ASP.NET- oder Windows-Dienstanwendung handelt, sind die Druckoptionen begrenzt, da Microsoft von der Verwendung dieses Ansatzes abrät. Die .NET Framework-Druckklassen werden von der Dienstanwendung nicht unterstützt. Dazu gehören ASP-Seiten, die im Allgemeinen im Kontext des Serverdienstes ausgeführt werden.

Die Verwendung der Klassen im System.Drawing.Printing-Namespace wird in einem Windows-Dienst oder einer ASP.NET-Anwendung oder einem ASP.NET-Dienst nicht unterstützt, und der Versuch, sie zu verwenden, kann zu einer verminderten Dienstleistung, Laufzeitausnahmen und anderen Problemen führen. Die Verwendung von WPF zum Aufbau von Windows-Diensten wird ebenfalls nicht unterstützt. Da es sich bei WPF um eine Präsentationstechnologie handelt, benötigt der Windows-Dienst entsprechende Berechtigungen, um visuelle Vorgänge mit Benutzerinteraktion auszuführen. Wenn der Windows-Dienst nicht über solche Berechtigungen verfügt, kann es zu unerwarteten Ergebnissen kommen.

Das Aspose.Words Document-Objekt stellt eine Familie von Print-Methoden zum Drucken von Dokumenten bereit. Diese Methoden verwenden die im System.Drawing.Printing-Namespace definierten .NET-Druckklassen. Es gibt viele Aspose.Words-Kunden, die es erfolgreich zum Drucken in ihren serverseitigen Anwendungen einsetzen. Dennoch zeigt dieser Artikel eine alternative Druckmethode auf, die den Empfehlungen von Microsoft entspricht.

Methoden zum Drucken eines Dokuments auf einem Server

Der richtige Weg, Dokumente gemäß Microsoft zu drucken, ist die Verwendung des nicht verwalteten XpsPrint API. Dieses API ist auf Windows 7, Windows Server 2008 R2 und auf Windows Vista verfügbar, sofern das Plattformupdate für Windows Vista installiert ist.

Da Aspose.Words problemlos jedes Dokument in XPS konvertieren kann, müssen Sie nur den Code schreiben, der ein XPS-Dokument an das XpsPrint-API übergibt. Das einzige Problem besteht darin, dass das XpsPrint-API nicht verwaltet wird und einige Kenntnisse der Platform Invoke-Technologie erfordert.

Um ein Dokument zu drucken, stellt Aspose.Words eine XpsPrintHelper-Klasse bereit, die eine einfache Print-Methode enthält, bei der Sie lediglich die folgenden Parameter angeben müssen (weitere Details finden Sie im Artikel Dokument über XPS API drucken):

  • Dokument, das Sie drucken möchten.
  • Druckername.
  • Jobname (optional). – Boolescher Wert, der angibt, ob das Programm warten soll, bis der Druckauftrag abgeschlossen ist. Daher prüft das System entweder, ob das Dokument erfolgreich gedruckt wurde, oder meldet sich sofort nach dem Absenden des Druckauftrags. Im letzten Fall kann nicht festgestellt werden, ob der Druckauftrag erfolgreich war.

Wenn beim Senden oder Drucken des Dokuments Probleme auftreten, löst die Methode eine Ausnahme aus.

Das folgende Codebeispiel zeigt, wie man ein Dokument mit der XpsPrintHelper-Klasse druckt:

Wenn Sie das Projekt ausführen, druckt es ein Beispieldokument auf dem angegebenen Drucker und öffnet ein Konsolenfenster, um die Druckergebnisse anzuzeigen. Wenn der Druckauftrag abgeschlossen ist oder ein Fehler auftritt, zeigt das System eine Erfolgsmeldung oder einen Text der ausgelösten Ausnahme an.

Sie können einige Druckeinstellungen auch mithilfe der PageSetup-Klasse festlegen. In Microsoft Word werden beispielsweise Druckerfächer für jeden Abschnitt definiert und sind druckerspezifisch. Daher können Sie diese Werte für jeden Abschnitt programmgesteuert über die FirstPageTray- und OtherPagesTray-Eigenschaften ändern.

Es gibt zwei Überladungen der XpsPrintHelper.Print-Methode. Die erste Überladung nimmt ein Document-Objekt und speichert es in einem MemoryStream im XPS-Format. Die zweite Überladung akzeptiert ein Stream-Objekt. Der Stream muss ein Dokument im XPS-Format enthalten.

Sie können die Beispiele für Methodenüberladung von Aspose.Words GitHub herunterladen.

Sie können die Beispieldatei dieses Beispiels von Aspose.Words GitHub herunterladen.

Drucken eines Dokuments mit Einstellungs- und Druckvorschau-Dialogen

Bei der Arbeit mit Dokumenten ist es häufig erforderlich, diese auf einem ausgewählten Drucker auszudrucken. Es ist hilfreich, einen Druckvorschaudialog zu verwenden, um visuell zu prüfen, wie das gedruckte Dokument aussehen wird, und relevante Druckoptionen auszuwählen.

Das Aspose.Words verfügt über keine integrierten Dialoge oder Formulare, sondern implementiert die AsposeWordsPrintDocument-Klasse, basierend auf der .NET-PrintDocument-Klasse. Eine Instanz dieser Klasse kann an das PrintPreviewDialog-Formular übergeben werden, um eine Vorschau des Dokuments anzuzeigen und es zu drucken. Außerdem definiert die PrintPreviewDialog-Klasse die Ausgabe, die an einen Drucker übertragen werden soll.

Das folgende Beispiel zeigt, wie Sie diese Klassen verwenden, um ein Dokument aus Aspose.Words über die Dialogfelder “Druckvorschau” und “Einstellungen” zu drucken:

Um das Erscheinungsbild der Druckvorschau-Dialogeinstellungen zu optimieren, geben Sie Eigenschaften der PrintPreviewDialog-Klasse an.

Drucken mehrerer Seiten auf einem Blatt

Es ist immer von Vorteil, beim Drucken von Dokumenten mehr Flexibilität zu haben. Mithilfe von .NET und Aspose.Words können Sie den Druckvorgang ganz einfach optimieren, um Ihre benutzerdefinierte Logik zu implementieren, indem Sie festlegen, wie das Dokument auf der gedruckten Seite angezeigt wird.

Wie im vorherigen Abschnitt implementiert Aspose.Words die MultipagePrintDocument-Klasse, die auf der .NET-PrintDocument-Klasse basiert. Dies bedeutet, dass die vorhandene .NET-Druckinfrastruktur so genutzt werden kann, dass die Druck- und Druckvorschaudialoge eine Visualisierung des Dokuments vor dem Drucken ermöglichen. Die MultipagePrintDocument-Klasse bietet die Möglichkeit, mehrere Seiten auf einem Blatt Papier zu drucken.

Das Ergebnis dieses Codebeispiels ist unten dargestellt:

print-a-document-programmatically-or-using-dialogs-aspose-words-net

Ausblenden des Druckfortschrittsdialogs beim Drucken eines Dokuments

Der Druckfortschrittsdialog erscheint nicht, wenn ein Dokument über die Print-Methode gedruckt wird. Dieser Dialog erscheint jedoch beim Drucken mit einer anderen Print-Methode. Um in diesem Fall zu verhindern, dass das Dialogfeld “Drucken” angezeigt wird, sollten Sie bei dieser Methode gültige Druckereinstellungen und einen Standard-Druckcontroller angeben, wie im folgenden Beispiel gezeigt:

Sie können die Beispieldatei dieses Beispiels von Aspose.Words GitHub herunterladen.

So verkürzen Sie die Zeit des ersten Aufrufs zum Drucken eines Dokuments

Aspose.Words liest und speichert einige PrinterSettings-Felder zwischen, um die Druckzeit zu verkürzen. Dies erreichen Sie durch den Aufruf der CachePrinterSettings-Methode. Diese Methode wird vor Beginn des Druckvorgangs aufgerufen, sofern sie nicht zuvor ausgeführt wurde. Beachten Sie, dass die Gesamtzeit des Druckens mit und ohne Aufruf dieser Methode nahezu gleich ist. Der Zweck dieser Methode besteht darin, die Zeit des ersten Aufrufs der Print-Methode zu verkürzen. Das folgende Codebeispiel zeigt, wie diese Methode verwendet wird:

Siehe auch