Tisk dokumentu Programově nebo pomocí dialogů

Tento článek popisuje, jak tisknout dokument o zpracování slov z ASP.NET nebo Windows Servisní aplikace Aspose.Words a XpsPrint API. Ukazuje také metody tisku dokumentu pomocí dialogů Nastavení, náhledu tisku a postupu tisku a vysvětluje, jak snížit čas první výzvy k tisku dokumentu.

Tisknout dokument na Server prostřednictvím XpsPrint API

Tento oddíl je určen pro uživatele, kteří chtějí předložit XPS dokument pro nespravovaný XpsPrint API z .NET aplikace Aspose.Words.

Omezení tisku dokumentu ASP.NET nebo Windows Žádosti o služby

Při vývoji .NET aplikace, která vytváří nějaký tištěný výstup, můžete obvykle používat třídy uvedené v System.Drawing.Printing jmenný prostor nebo Windows Třída Prezentační nadace (WPF). Pokud se však žádost týká ASP.NET nebo Windows Servisní aplikace, možnosti tisku jsou omezené, protože Microsoft odrazuje od používání tohoto přístupu. • .NET Framework Tiskové třídy nejsou podporovány aplikací služeb. To zahrnuje ASP stránky, které obvykle běží v rámci serverové služby.

Třídy v rámci System.Drawing.Printing nejsou podporovány pro použití v rámci Windows služba nebo ASP.NET aplikace nebo služby, a pokus o jejich použití může způsobit snížení výkonu služeb, časové výjimky a další problémy. Využití WPF k budování Windows Rovněž služby nejsou podporovány. Vzhledem k tomu, WPF je prezentační technologie, Windows služba vyžaduje vhodná oprávnění k provádění vizuálních operací zahrnujících interakci uživatelů. Pokud Windows služba nemá taková povolení, mohou být neočekávané výsledky.

• Aspose.Words Document objekt poskytuje rodinu Print metody tisku dokumentů. Tyto metody používají .NET třídy tisku definované v System.Drawing.Printing jmenný prostor. Je jich mnoho. Aspose.Words zákazníci, kteří je úspěšně využívají pro tisk v aplikacích na straně serveru. Tento článek však ukazuje alternativní metodu tisku, která je v souladu s MicrosoftDoporučení.

Metody pro tisk dokumentu na Server

Správný způsob tisku dokumentů podle Microsoft je pomocí nespravované XpsPrint API. Tohle API je k dispozici na Windows 7, Windows Server 2008 R2, a dále Windows Vista za předpokladu aktualizace platformy pro Windows Vista je nainstalován.

Od Aspose.Words lze snadno převést jakýkoli dokument na XPS,? stačí napsat kód, který prochází XPS dokument k XpsPrint API. Jediný problém je, že XpsPrint API je nezvládnutelná a vyžaduje znalosti technologie Platform Invoke.

Vytisknout dokument, Aspose.Words poskytuje XpsPrintHelper třída obsahuje jednoduchou metodu tisku, kde stačí zadat následující parametry (viz podrobnosti v článku Vytisknout dokument prostřednictvím XPS API):

  • Dokument, který chcete vytisknout.
  • Jméno tiskárny.
  • Pracovní jméno (nepovinné).
  • Booleova hodnota, s uvedením, zda program má počkat, až bude tisk dokončen. Systém proto buď zkontroluje, zda byl dokument úspěšně vytištěn, nebo se vrátí ihned po odeslání tiskového úkolu. V posledním případě není možné určit, zda byl tisk úspěšný.

Po zjištění jakýchkoliv problémů s předložením nebo tiskem dokumentu bude metoda hodit výjimku.

Příklad kódu níže ukazuje, jak tisknout dokument pomocí XpsPrintHelper třída:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
// The path to the documents directory.
string dataDir = RunExamples.GetDataDir_RenderingAndPrinting();
// Open a sample document in Aspose.Words.
Document document = new Document(dataDir + "TestFile.doc");
// Specify the name of the printer you want to print to.
const string printerName = @"\\COMPANY\Brother MFC-885CW Printer";
// Print the document.
XpsPrintHelper.Print(document, printerName, "My Test Job", true);

Při spuštění projektu tiskne vzorový dokument na zadanou tiskárnu a otevře okno konzole pro zobrazení výsledků tisku. Po dokončení tiskové práce nebo chybách zobrazí systém zprávu o úspěchu nebo text vrhané výjimky.

Můžete také nastavit některé nastavení tisku pomocí PageSetup třída. Například Microsoft Word, Pro každou část jsou definovány zásobníky tiskárny a jsou specifické pro tiskárnu. Proto můžete programově změnit tyto hodnoty pro každou sekci prostřednictvím FirstPageTray a OtherPagesTray vlastnosti.

Existují dvě přetížení XpsPrintHelper.Print metoda. První přetížení vyžaduje Document objekt a ukládá jej do MemoryStream v XPS formát. Druhé přetížení přijímá Stream objekt. Potok musí obsahovat dokument v XPS formát.

Můžete si stáhnout příklady metody přetížení z Aspose.Words GitHub.

Soubor vzorku tohoto příkladu si můžete stáhnout z Aspose.Words GitHub.

Tisk dokumentu s nastavením a náhledem tisku

Při práci s dokumenty je často nutné tisknout do vybrané tiskárny. Je užitečné využít dialogové okno náhledu tisku a vizuálně zkontrolovat, jak se zobrazí tištěný dokument a zvolit příslušné možnosti tisku.

• Aspose.Words nemá vestavěný dialog nebo formuláře, ale provádí AsposeWordsPrintDocument třída, na základě .NET PrintDocument třída. Příklad této třídy může být předán PrintPreviewDialog formulář pro náhled a tisk dokumentu. Také Dialog tisku třída definuje výstup pro přenos do tiskárny.

Následující příklad ukazuje, jak použít tyto třídy k tisku dokumentu z Aspose.Words přes dialogy náhledu a nastavení tisku:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
// The path to the documents directory.
string dataDir = RunExamples.GetDataDir_RenderingAndPrinting();
Document doc = new Document(dataDir + "TestFile.doc");
PrintDialog printDlg = new PrintDialog();
// Initialize the print dialog with the number of pages in the document.
printDlg.AllowSomePages = true;
printDlg.PrinterSettings.MinimumPage = 1;
printDlg.PrinterSettings.MaximumPage = doc.PageCount;
printDlg.PrinterSettings.FromPage = 1;
printDlg.PrinterSettings.ToPage = doc.PageCount;
// Сheck if the user accepted the print settings and whether to proceed to document preview.
if (printDlg.ShowDialog() != DialogResult.OK)
return;
// Create a special Aspose.Words implementation of the .NET PrintDocument class.
// Pass the printer settings from the print dialog to the print document.
AsposeWordsPrintDocument awPrintDoc = new AsposeWordsPrintDocument(doc);
awPrintDoc.PrinterSettings = printDlg.PrinterSettings;
// Initialize the print preview dialog.
PrintPreviewDialog previewDlg = new PrintPreviewDialog();
// Pass the Aspose.Words print document to the print preview dialog.
previewDlg.Document = awPrintDoc;
// Specify additional parameters of the print preview dialog.
previewDlg.ShowInTaskbar = true;
previewDlg.MinimizeBox = true;
previewDlg.PrintPreviewControl.Zoom = 1;
previewDlg.Document.DocumentName = doc.OriginalFileName;
previewDlg.WindowState = FormWindowState.Maximized;
// Occur whenever the print preview dialog is first displayed.
previewDlg.Shown += PreviewDlg_Shown;
// Show the appropriately configured print preview dialog.
previewDlg.ShowDialog();
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
private static void PreviewDlg_Shown(object sender, EventArgs e)
{
// Bring the print preview dialog on top when it is initially displayed.
((PrintPreviewDialog)sender).Activate();
}

Pro optimalizaci vzhledu dialogového okna Print Preview zadejte vlastnosti PrintPreviewDialog třída.

Tisk více stránek na jednom listu

Při tisku dokumentů je vždy prospěšné mít větší flexibilitu. Použití .NET a Aspose.Words lze snadno doladit tiskovou operaci k provedení vlastní logiky tím, že definuje způsob, jakým se dokument objeví na tištěné stránce.

Stejně jako v předchozí části, Aspose.Words provádí MultipagePrintDocument třída, která je založena na .NET PrintDocument třída. To znamená, že stávající .NET tisková infrastruktura může být použita tak, aby dialogy tisku a tisku před tiskem umožnily vizualizaci dokumentu před tiskem. • MultipagePrintDocument třída poskytuje možnost tisknout několik stránek na jeden list papíru.

Výsledek tohoto příkladu kódu je uveden níže:

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

Schovávání Dialogu pokroku tisku při tisku dokumentu

Dialog Progress tisku se neobjeví při tisku dokumentu prostřednictvím Print metoda. Toto dialogové okno se však objeví při tisku s jiným Print metoda. V tomto případě, abyste zabránili zobrazování dialogového okna tisku, měli byste v této metodě zadat platné nastavení tiskárny a standardní tiskový ovladač, jak je uvedeno v následujícím příkladu:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
// The path to the documents directory.
string dataDir = RunExamples.GetDataDir_RenderingAndPrinting();
// Load the documents which store the shapes we want to render.
Document doc = new Document(dataDir + "TestFile RenderShape.doc");
// Obtain the settings of the default printer
System.Drawing.Printing.PrinterSettings settings = new System.Drawing.Printing.PrinterSettings();
// The standard print controller comes with no UI
System.Drawing.Printing.PrintController standardPrintController = new System.Drawing.Printing.StandardPrintController();
// Print the document using the custom print controller
AsposeWordsPrintDocument prntDoc = new AsposeWordsPrintDocument(doc);
prntDoc.PrinterSettings = settings;
prntDoc.PrintController = standardPrintController;
prntDoc.Print();

Soubor vzorku tohoto příkladu si můžete stáhnout z Aspose.Words GitHub.

Jak snížit čas první výzvy k tisku dokumentu

Aspose.Words čte a ukládá některé oblasti PrinterSettings snížit čas tisku. Můžete toho dosáhnout voláním CachePrinterSettings metoda. Tato metoda se volá před zahájením tisku, pokud nebyla provedena dříve. Všimněte si, že celkový čas tisku s a bez volání této metody je téměř stejný. Účelem této metody je snížit čas první výzvy Print metoda. Následující příklad kódu ukazuje, jak používat tuto metodu:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
//Load the Word document
Document doc = new Document(dataDir + "TestFile.doc");
// Build layout.
doc.UpdatePageLayout();
// Create settings, setup printing.
PrinterSettings settings = new PrinterSettings();
settings.PrinterName = "Microsoft XPS Document Writer";
// Create AsposeWordsPrintDocument and cache settings.
AsposeWordsPrintDocument printDocument = new AsposeWordsPrintDocument(doc);
printDocument.PrinterSettings = settings;
printDocument.CachePrinterSettings();
printDocument.Print();

Viz také