当前位置: 首页 > 编程语言 > C#

将文件发送到XPS打印机进行共享

时间:2023-04-10 11:35:30 C#

将文件发送到XPS打印机XPS打印机允许我们创建xps文件,无论是从图像还是txt或doc文件。我想在C#中以编程方式执行相同的操作。如何将文件发送到xps打印机并让打印机将其转换为.xps文件?有任何想法吗?我用谷歌搜索这个,但到目前为止还没有找到太多。也可以使用打印队列打印到XPS文档编写器,但它始终显示文件对话框。有关转换和打印为XPS文件的其他替代方法,请参见下文。以编程方式将文件转换为XPS这并不像您希望许多用户已经尝试过的那样简单,并且有许多不同的方法可以做到这一点,但都不是最好的。将文档转换为XPS的一种方法(最简单的方法)是使用WORD2007+API来完成。请参阅下面的MSDN论坛问题要使用Word2007以编程方式将docx转换为xps,请参阅Word对象模型参考(http://msdn2.microsoft.com/en-us/library/Bb256835.aspx)中的Document.ExportAsFixedFormat。但是,由于这是服务器端方案,您应该了解KB257757服务器端自动化办公的注意事项(请参阅http://support.microsoft.com/kb/257757)。将图像打印到XPS您可以使用以下代码轻松地将图像打印到XPS文件。下面的代码是一个WPF示例,您传递给write方法的图像需要包裹在画布中,示例参见这篇文章:http://denisvuyka.wordpress.com/2007/12/03/wpf-diagramming-saving-youCanvastoimageXPSdocument或-rawXAML/XpsDocumentxpsd=newXpsDocument("C:\YourXPSFileName.xps",FileAccess.ReadWrite);System.Windows.Xps.XpsDocumentWriterxw=XpsDocument.CreateXpsDocumentWriter(xpsd);xw.Write(YourImageYouWishToWrite);请参阅下面的扩展示例:publicvoidExport(Uripath,Canvassurface){if(path==null)return;//保存当前画布变换Transformtransform=surface.LayoutTransform;//在保存之前临时重置布局转换surface.LayoutTransform=null;//获取画布的大小Sizesize=newSize(surface.Width,surface.Height);//测量和排列元素surface.Measure(size);surface.Arrange(新矩形(尺寸));//打开新包Packagepackage=Package.Open(path.LocalPath,FileMode.Create);//根据打开的包创建新的xps文档XpsDocumentdoc=newXpsDocument(package);//为文档创建XpsDocumentWriter实例XpsDocumentWriterwriter=XpsDocument.CreateXpsDocumentWriter(doc);//将画布(作为Visual)写入文档writer.Write(surface);//关闭文档doc.Close();//关闭包package.Close();//恢复之前保存的布局surface.LayoutTransform=transform;}有3rd方工具允许您将PDF和其他文件格式打印到XPS打印XPS文件可以以编程方式打印XPS文档至少对于此解决方案,您将需要.Net4。以下示例使用WPF中的打印对话框和一些来自System.Windows.Xps和System.Printing的类。下面的代码将Xps文件打印到系统上的默认打印机,但是如果要打印到不同的打印机甚至打印服务器,则需要更改打印对话框中的PrintQueue对象。使用System.Printing命名空间非常简单。请参见下面的示例。请记住,由于它使用WPF对话框,因此需要在STATThread模型上运行。使用System.Collections.Generic;使用System.Linq;使用系统打印;使用系统文本;使用System.Threading.Tasks;使用System.Windows.Controls;{类程序{[STAThread]staticvoidMain(string[]args){PrintDialogdlg=newPrintDialog();XpsDocumentxpsDoc=newXpsDocument(@"C:DATApersonalgotest.xps",System.IO.FileAccess.Read);dlg.PrintDocument(xpsDoc.GetFixedDocumentSequence().DocumentPaginator,"文档标题");}}}查看下面一些有用的链接XpsDocumentationDocumentPrintDialogfromWPFDocumentSystem.PrintingNamespaceDocumentation希望这有助于满足您的要求以上是C#学习教程:将文件发送到XPS打印机以共享所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——classProgram{[System.MTAThreadAttribute()]//为了清楚起见,添加了这一行,但是这一行是多余的,因为MTA是默认。staticvoidMain(string[]args){//创建辅助线程并为//构造函数的ThreadStart委托参数传递打印方法。蝙蝠侠hXPSPrinter//类定义如下。线程printingThread=newThread(BatchXPSPrinter.PrintXPS);//将使用PrintQueue.AddJob的线程设置为单线程。printingThread.SetApartmentState(ApartmentState.STA);//启动打印线程。传递给Thread//构造函数的方法将执行。printingThread.Start();}//endMain}//endProgramclasspublicclassBatchXPSPrinter{publicstaticvoidPrintXPS(){//创建打印服务器和打印队列。LocalPrintServerlocalPrintServer=newLocalPrintServer();PrintQueuedefaultPrintQueue=LocalPrintServer.GetDefaultPrintQueue();//提示用户识别目录,然后创建目录对象。Console.Write("请输入包含XPS文件的目录:");StringdirectoryPath=Console.ReadLine();DirectoryInfodir=newDirectoryInfo(directoryPath);//如果用户输入错误,结束线程并返回主线程。如果(!dir.Exists){Console.WriteLine(“没有那个目录。");}else{//如果目录中没有XPS文件,则结束线程//并返回主线程。if(dir.GetFiles("*.xps").Length==0){Console.WriteLine("目录中没有XPS文件。");}else{Console.WriteLine("nJobs现在将被添加到打印队列中。");Console.WriteLine("如果队列未暂停且打印机正在工作,作业将开始打印。");//批处理目录中的所有XPS文件foreach(FileInfofindir.GetFiles("*.xps")){StringnextFile=directoryPath+"\"+f.Name;Console.WriteLine("Adding{0}toqueue.",nextFile);try{//打印Xps文件,同时提供XPS验证和进度通知。PrintSystemJobInfoxpsPrintJob=defaultPrintQueue.AddJob(f.Name,nextFile,false);}catch(PrintJobExceptione){Console.WriteLine("nt{0}无法添加到打印队列。",f.Name);if(e.InnerException.Message=="文件包含损坏的数据。”){Console.WriteLine("t它不是有效的XPS文件。使用isXPS一致性工具对其进行调试。");}Console.WriteLine("tContinuingwithnextXPSfile.n");}}//每个XPS文件结束}//如果目录中没有XPS文件则结束}//如果目录不存在则结束Console.WriteLine("PressEntertoendprogram.");控制台.ReadLine();}//结束PrintXPS方法}//结束BatchXPSPrinter类本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处: