以编程方式打印 XPS 文件

10行代码搞定打印 Visio 图表文档 VSDX、DWGX、VSTX 我们可以使用 C#以编程方式打印VSDX、DWG、VDW、VSTX等图表文档。Aspose.Diagram for .NET API 可以集成到基于 .NET 的应用程序中,以处理 Microsoft Visio 文件。请参考以下用例打印图表文档: 使用 C# 以编程方式使用 XpsPrint 打印 Visio 文档 在 C# 中以编程方式将 Visio 图表打印到默认打印机 使用 C# 以编程方式将 Visio 图表打印到特定打印机 我们可以使用Aspose.Diagram for .NET以 VS 阅读详情

摘自微软的技术文章


如何:以编程方式打印 XPS 文件

可以使用 AddJob 方法的一个重载来打印 XML 纸张规范 (XPS) 文件,而不必打开PrintDialog,或者从原则上来说,根本不必打开任何用户界面 (UI)。

您还可以使用 XpsDocumentWriter 的许多Write 和WriteAsync 方法来打印 XML 纸张规范 (XPS) 文件。有关更多信息,请参见Printing an XPS Document。

打印 XML 纸张规范 (XPS) 的另一种方法是使用 PrintDialog 控件的PrintDocument 或PrintVisual 方法。请参见如何:调用打印对话框。

使用三参数 AddJob(String, String, Boolean) 方法的主要步骤如下。下面的示例给出了详细信息。

  1. 确定打印机是否是 XPSDrv 打印机 (有关 XPSDrv 的更多信息,请参见打印概述)。

  2. 如果打印机不是 XPSDrv 打印机,将线程的单元设置为单线程。

  3. 实例化一个打印服务器和打印队列对象。

  4. 调用该方法,并指定作业名称、要打印的文件以及指示打印机是否是 XPSDrv 打印机的 Boolean 标志。

下面的示例演示如何以批处理方式打印一个目录中的所有 XPS 文件。 尽管应用程序提示用户指定目录,但是三参数的 AddJob(String, String, Boolean) 方法不需要用户界面 (UI)。它可以用在可传递给它的 XPS 文件名和路径所在的任何代码路径中。

只要 Boolean 参数是false(当使用的不是 XPSDrv 打印机时,该参数必须为此值),AddJob 的三参数AddJob(String, String, Boolean) 重载就必须运行在单个线程单元中。但是,Microsoft .NET 的默认单元状态是多线程。 必须将此默认设置反过来,因为本示例采用的不是 XPSDrv 打印机。

有两种方法来更改默认设置。 一种方法是在应用程序的 Main 方法的第一行(通常是“static void Main(string[] args)”)的紧上方添加STAThreadAttribute(即“[System.STAThreadAttribute()]”)。但是,许多应用程序都要求 Main 方法有多线程单元状态,因此存在第二种方法,即:在一个单独的线程中放置对AddJob(String, String, Boolean) 的调用,该线程的单元状态通过SetApartmentState 设置为STA。下面的示例使用第二种方法。

因此,示例的开头实例化一个 Thread 对象,并将一个PrintXPS 方法作为 ThreadStart 参数传递给它(PrintXPS 方法在本示例的稍后部分定义)。接下来,线程设置为单线程单元。Main 方法的剩余代码启动新线程。

该示例的主要内容在 staticBatchXPSPrinter.PrintXPS 方法中。在创建打印服务器和队列后,该方法会提示用户输入包含 XPS 文件的目录。 在确认该目录存在并且其中存在 *.xps 文件后,该方法将每个这样的文件添加到打印队列中。 该示例假定打印机不是 XPSDrv,因此我们将 false 传递给 AddJob(String, String, Boolean) 方法的最后一个参数。为此,该方法在尝试将文件转换为打印机的页面描述语言之前,会先验证文件中的 XPS 标记。如果验证失败,将引发一个异常。 代码示例将捕捉此异常,将有关此异常的信息通知给用户,然后继续处理下一个 XPS 文件。

	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 Main

	End Class 'end Program 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 PrintXPS method

	End Class ' end BatchXPSPrinter class


如果您使用的是 XPSDrv 打印机,则可以将最后一个参数设置为 true。在这种情况下,因为 XPS 是打印机的页面描述语言,所以此方法会将文件发送到打印机,而不对它进行验证或将它转换为另一种页面描述语言。如果您在设计时不确定应用程序是否将使用 XPSDrv 打印机,则可以修改应用程序,使它读取 IsXpsDevice 属性,并根据它找到的内容进行分支。

因为在 Windows Vista 和 Microsoft .NET Framework 发行之后,最初几乎没有 XPSDrv 打印机可以立即投入使用,因此,可能需要将非 XPSDrv 打印机假装成 XPSDrv 打印机。为此,应将 Pipelineconfig.xml 添加到运行您的应用程序的计算机的以下注册表项中的文件列表:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows NT x86\Drivers\Version-3\<PseudoXPSPrinter>\DependentFiles

其中 <PseudoXPSPrinter> 是任一打印队列。然后必须重新启动计算机。

这种假装使您可以将 true 作为AddJob(String, String, Boolean) 的最后一个参数来传递,而不会导致异常,但因为<PseudoXPSPrinter> 并不是真正的 XPSDrv 打印机,因此打印出来的将仅仅是乱码。

注意   为简单起见,上面的示例通过检查是否存在扩展名 *.xps 来检测文件是否是 XPS。但是,XPS 文件不一定有此扩展名。 isXPS.exe(isXPS 合规性工具)也是一种测试文件是否是 XPS 的方法。

无需安装Microsoft Words即可读写打印Word文档的控件Aspose.Words Aspose.Words控件是一个类库,使您可以执行大部分文件处理的工作。 Aspose.Words支持DOC,OOXML,RTF,HTML,OpenDocument,PDF,XPS,EPUB和其他格式。采用Aspose.Words您可以生成,修改,转换,渲染和打印,无需利用Microsoft Word 。Aspose.Words for .NET是一个无图形用户界面的.NET和JAVA Word 阅读详情

相关推荐

76、WPF 打印与动画功能全解析

本文深入解析了WPF中的打印与动画功能。打印部分介绍了通过XPS文档实现打印预览、同步与异步打印、操作打印队列和作业等内容,并探讨了在不同操作系统中的兼容性处理。动画部分详细说明了WPF基于属性的动画系统,包括基本动画类的使用、复杂动画的组合以及动画的代码控制,帮助开发者创建动态且响应性强的用户界面。

oo7890的博客 94

C# winform打印总结



jing_xin的专栏 1万+

C#文件打印技术实现指南

在企业级应用中,经常需要将数据输出到打印设备,以满足文档记录和报表需求。C#作为一种流行的编程语言,提供了多种方法来直接打印文件。这些方法不仅包括传统的Windows Forms中的PrintDocument类,还包括在.NET Core以及WPF(Windows Presentation Foundation)中的新打印技术。本文将概述C#直接打印文件的几种主要方式,从基本概念到高级技巧,并讨论如何优化打印流程以提升用户体验。

weixin_42160645的博客 1232

【WPF.NET开发】以编程方式打印XPS文件

可以使用方法的一个重载来打印 XML 纸张规范 (XPS) 文件,而根本无需打开或任何用户界面 (UI)(从原理上讲)。还还可以使用多种和方法打印 XPS 文件。打印 XPS 的另一种方法是使用或方法。

Coding life, Coding world, Coding feature. 1584

c#语言将office文档转为XPS

c#语言将office文档转为XPS,核心代码已经给出。

C# DoucmentViewer控件读取Xps格式的文档

DoucmentViewer控件读取Xps格式的文档 WPF添加菜单的方法

c# 调用Microsoft XPS Document Writer打印机,将Pdf文件转换成Xps文件

  最近碰到个项目,其中有个需要将pdf文件转换成xps文件的功能,xps文件还算是新东西,所以基本没啥了解,通过一段时间的调查, 本人算是找到了2个方法:   1)通过PDFNet第三发开发组件即可很容易的完成转换功能,并且还有其他针对pdf文件操作的功能,还是很强大的。当然啦,这个东       西是要买的,可以先下一个试用版先体验体验。     下载地址:http://www.pdf...

weixin_34242819的博客 770

脑机接口(BCI)从原理到开发实战 07|运动想象BCI实战:基于BCI Competition IV 2a数据集

本文基于BCI Competition IV 2a数据集,详细介绍运动想象脑机接口系统的全流程实现。首先概述了该数据集的实验范式、参数特点和优势,然后指导环境准备与数据下载。通过代码示例展示了数据加载、事件标记提取和信号可视化方法。重点构建了完整的预处理流水线,包括通道选择、重参考、带通滤波(8-30Hz)和ICA去伪迹等关键步骤。文章旨在帮助读者将零散的BCI知识整合为完整的实战项目,掌握从原始脑电数据到运动意图解码的核心技术。

小明的博客 849

C# 打印PDF文档的10种方法

前言操作PDF文档时,打印是常见的需求之一。针对不同的打印需求,可分多种情况来进行,如设置静默打印、指定打印页码范围和打印纸张大小、双面打印、黑白打印等等。经过测试,下面将对常见的几种PDF打印需求做一些归纳总结,这里归纳了10种打印需求及方法。如下:1、使用默认打印机打印PDF文档2、使用虚拟打印机(Microsoft XPS Document Writer)打印PDF文档】3、指定打印机及P...

weixin_68436326的博客 916

ASPP - 空洞空间金字塔池化

文章目录1 空洞卷积1.1 空洞卷积的理解1.1.1 一维1.1.2 二维1.2 空洞卷积的优劣2. ASPP3. 代码 1 空洞卷积 1.1 空洞卷积的理解 1.1.1 一维 (a) 正常卷积:输入特征 Input feature,kernel = 3,stride = 1,pad = 1,输出特征 Output feature。 (b) 空洞卷积:与图 (a) 不同之处在于 pad = 2,同时引入一个 rate = 2(表示卷积核中参数间间隔的超参)。   还可通过下图进一步理解普通卷积与空洞卷

晓野豬 2万+

AIDD-人工智能药物设计-构建基于机器学习方法的在线预测平台高准确预测药物诱导骨毒性

在此基础上,提取多种药物分子特征,包括分子指纹(如MACCS、Morgan、RDKit、TopologicalTorsion、AtomPairs与Descriptors)及分子图谱,通过Transformer编码器与神经网络进行机器学习模型训练。最后,将训练好的模型部署为在线Web服务器(BoneToxPD),供用户快速预测药物的骨毒性。本研究不仅在骨毒性预测的准确性方面取得了突破,还在模型解释性方面提供了新的视角,通过注意力机制精准识别出影响骨毒性的关键化学基团,推动药物研发领域更安全、更高效的发展。

itwangyang520的博客 1079

java 打印 xps_使用PrintTicket打印XPS,OutputColor PagesPerSheet无效

我有一个从内置的Microsoft xps编写器打印机生成的.xps文件,我想将其打印到真正的打印机,但具有修改的属性,如:duplex,grayscale,n-up等 .我按照MSDN中的示例进行操作,我可以打印.xps,但问题是我只能设置作业的几个属性 . 通过使用PrintQueue设置PrintTicket,可以使用修改后的副本和双面设置正确打印作业,但不会转换为灰度或遵循任何n-up设置...

weixin_33728584的博客 594

unity打包流程整理-Windows/Mac/Linux平台

1.Platform(平台)功能: 选择目标构建的目标平台选项PC, Mac & Linux Standalone: 适用于 Windows、Mac 和 Linux 平台2.Target Platform(目标平台)功能: 选择具体的操作系统版本选项Windows: 针对 Windows 操作系统Mac: 针对 macOS 操作系统Linux: 针对 Linux 操作系统3.Architecture(架构)功能: 选择应用程序的目标处理器架构选项x86: 针对 32 位系统。

weixin_42333247的博客 5135

Word格式处理控件Aspose.Words for .NET教程——更新和删除字段

在以前的版本中,调用Document.UpdateFields或Range.UpdateFields只会更新常规字段(例如IF或DOCPROPERTY),而不会更新与页面布局相关的字段(例如PAGE或NUMPAGES)。当执行将文档转换为固定页面格式(例如PDF或XPS)时,Aspose.Words会自动更新与页面布局相关的字段PAGE,PAGEREF,这些字段位于文档的页眉/页脚中。逻辑当然更复杂,例如,当到达文档/邮件合并区域的末尾但仍然有其他数据要合并时,则需要复制该区域并更新新的字段集。...

励志做最业余的专业博主,控件产品可以私我~ 766

网页内容抓取的艺术:使用R语言解析动态网页

本文探讨了使用R语言处理动态网页数据的方法。针对AJAX加载的学术网站,传统的静态抓取和RSelenium方法存在会话终止、浏览器错误等问题。通过分析发现内容通过admin-ajax.php加载,提出使用httr2模拟POST请求获取数据,配合rvest解析HTML内容。该方法避免了浏览器自动化的弊端,实现了高效稳定的动态内容提取,为处理类似AJAX网站提供了通用解决方案。

m0_74337424的博客 54

PID、模糊PID、SkyHook、LQR、H2/H∞、ADRC等悬架控制合集

PID、模糊PID、SkyHook、LQR、H2/H∞等悬架控制合集

Mr.邹的博客 2013

C#实现office文档转换为PDF或xps的一些方法

 代码支持任意office格式需要安装office 2007 还有一个office2007的插件OfficeSaveAsPDFandXPS下载地址[url]http://www.microsoft.com/downloads/details.aspx?FamilyId=4D951911-3E7E-4AE6-B059-A2E79ED87041&displaylang=en[/url]

4638

uni-app - 将 base64 图片编码转为 Blob 本地文件路径(把base64类型的图片,转换成blob二进制文件流)适用于 uni-app / vue.js / JavaScript

uni-app/vue.js/JavaScript将base64转Blob,uniappapp端如何将图片的base64编码转换成File对象或Blob,uni-app/vue.js/JavaScript中拿到base64转blob对象,uniapp图片base64格式转blob格式方法,uniapp上传图片压缩转base64码与base64转图片路径,Base64/Blob/File图片文件转换,url、base64、blob相互转换方法,读取本地文件为Base64并转成B

🏆 前端领域优质创作者 1万+

PDF控件Spire.PDF for .NET【转换】演示:将 PDF与XPS 互相转换

本文将演示如何使用Spire.PDF for .NET以编程方式将 PDF 转换为 XPS 或将 XPS 转换为 PDF,欢迎查阅~

励志做最业余的专业博主,控件产品可以私我~ 588

智能车图像处理19-进阶篇11--斜入十字补线

这篇文章主要讲述智能车竞赛中如何对于斜入十字进行补线操作。

taiyuezyh的博客 7482

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

XPS格式轻松处理!Aspose.Page即将支持C++语言平台!

Aspose提供了100多种API来处理文件格式,是全球超77%财富企业强力推荐的格式管理工具。XPS是工作中常用的一种微软的文档保存和查看格式,针对XPS、EPS格式的管理控件Aspose.Page目前支持在.NET和Java平台使用。令人兴奋的是!考虑到大多数用户的要求和期望,Aspose.Page即将推出C++版,将能够在基于C ++的应用程序中以编程方式创建,读取,编辑,保存和转换XPS文...

mnrssj的博客 419

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Word控件Spire.Doc 【打印】教程(1):通过 5 个步骤以编程方式打印 Word 文档

在这里,必须注意的一个关键点是,在此过程中,您应该将System.Windows.Forms.PrintDialog对象与Spire.Doc.Document相关联。添加引用程序集“System.windows.forms.dll, System.Drawing.dll, Spire.Doc.dll”针对这两点,我们开发了Spire.Doc for .NET,通过它,您可以轻松地将word文档加载到.NET应用程序中,并将其完全打印出来。首先,您可以单击此处下载 Spire.Doc for .NET。

励志做最业余的专业博主,控件产品可以私我~ 1248

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

NiXPS SDK v2.6.x patch-new

NiXPS SDK,適用於您的應用程序的原生 XPS 編輯、轉換和操作。NiXPS SDK 使您能夠在應用程序中處理 XPS 文件。它是一個跨平台的庫,帶有用於 C/C++ 和 .NET 的 api。 它提供強大的高級功能,但也提供對 XPS 文件所有部分的詳細低級訪問。遠不止 Win32 和 .NET,NiXPS SDK 提供了引人注目的 api,為您提供了許多在默認 .NET 或 win32 世界中不可用的豐富功能:對像模型、對象選擇和操作、轉換為 PDF

控件与插件之大全 242

ExcelVBA把当前工作表导出为PDF文档

我们先问问KimiExcel导出为PDF的方法有多种,以下是一些常见的方法:1 使用Excel软件的内置功能:打开Excel文件,点击“文件”菜单。选择“另存为”,在“保存类型”中选择“PDF”。设置保存路径和文件名,点击“保存”。2 通过Excel的“输出为PDF”功能:在Excel中,点击“文件”菜单下的“输出为PDF”。选择“当前工作表”或“整个工作簿”。指定保存路径,点击“开始输出”。3 ...

fsyuheduo的博客 3583
上一篇: CHeaderCtrl 参考
下一篇: C++ 应用程序部署
htt9931
博客等级 码龄24年 43粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值