问题标签 [printdocument]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
21739 浏览

.net - 向 Printing.PrintDocument (.Net 2.0) 添加页眉和页脚的最简单方法?

向 .Net PrintDocument 对象添加页眉和页脚的最简单方法是实用的还是在设计时?

具体来说,我正在尝试打印第 3 方网格控件(Infragistics GridEx v4.3),该控件采用 PrintDocument 对象并将其自身绘制到其中。

生成的页面只包含网格及其内容 - 但是我想添加一个标题或标题来标识打印的报告,并可能添加一个页脚来显示谁打印它,何时打印,理想情况下是页码和总页数。

我正在使用 VB.Net 2.0。

谢谢你的帮助!

0 投票
2 回答
378 浏览

c# - 共享一个 PrintDocument 实例

在我的 WinForms 应用程序中,可以在许多位置打印数据。每次用户想要打印时,我都会创建一个新的 PrintDocument 实例,该实例用于当前的打印作业,然后进行处理。一切正常,但“打印”对话框始终设置回默认打印机及其默认参数。如果选择了另一台打印机,用户必须一次又一次地选择它。

创建一个全局 PrintDocument 实例并为整个应用程序的所有打印作业共享它是一种常见的方法吗?像这样将始终使用最后选择的打印机。或者还有其他方法吗?

谢谢你,彼得

0 投票
4 回答
8069 浏览

.net - 如何在 .NET 中翻转/旋转 PrintDocument?

我有一个文档,我想在打印时翻转/旋转 180 度。(这是由于打印机中标签纸的方向所致)。

有一个属性PrintDocument.PrinterSettings.LandscapeAngle,但它是只读的。

我认为这个属性受打印机驱动程序的影响,因此不是“可设置的”。

有没有一种很好的方法可以将打印件旋转 180 度而不必做任何太讨厌的事情?

0 投票
3 回答
3178 浏览

.net - 在 .NET 中打印 PrintDocument 对象的奇怪错误

我有一个 Winforms 应用程序,它生成自己的 PrintDocument 对象进行打印。经过我自己的测试,它在 XP 和 Windows 7 中运行良好,但一位用户在 Vista 中选择带有打开文档的打印命令时出现以下异常:

我很难弄清楚这个错误的性质以及复制它的任何潜在方式。可执行文件上的清单处于“受限”权限模式,甚至让用户以管理员身份运行应用程序也会产生错误。

0 投票
1 回答
3601 浏览

wpf - XPSDocumentWriter 和 PrintDialog.PrintDocument 的问题

我们公司正在使用 MindFusion 的 WPF 图表组件开发一个应用程序(WPF,针对 .NET 3.5)。显然,打印和保存 XPS 文档会导致不同系统上的各种错误。

我将问题简化为从我们的应用程序创建的单个示例XPS 文档。我将首先概述相关系统,并在分别保存 xps 文档和使用新的 WPF 打印路径打印图表时分解问题以下列表:

注意:所有三个系统都安装了带有 .NET 3.5 Framework SP1 的 Windows XP SP3。

使用 XpsDocumentWriter 通过 Paginator 编写 XPS 文档:

PC 1 - XPS 查看器(使用 IE 7.0)不起作用(即使在重新安装 .Net 3.5 之后)。Essential Pack 中的 XPS 查看器可打开文档,但视图完全模糊。但如您所见,我们在屏幕截图右侧的应用程序使用 DocumentViewer 来测试这个问题,它可以正常工作。从损坏的 XPS 查看器打印会产生与屏幕上相同的输出,而从 DocumentViewer 中的集成打印功能打印(无需我们的应用程序干预)会产生模糊的输出,可读性更高,但仍然不可接受。

PC 2 - IE XPS 查看器工作正常。打印输出不一致。有时,图形(形状)不完整,或者打印设备通知内存不足(使用相同的文档)。

PC 3 – IE XPS 查看器工作正常,但启动打印作业总是会导致IE 本身出现此异常。注意:之前提到的所有问题都已使用我们的应用程序创建的XPS 文档(上面已经提到)进行了测试。

使用 PrintDialog.PrintDocument 和 Paginator 创建打印作业:

从我们的应用程序打印与所有系统提供一致的输出:文档越大(就页面介质大小而言),它变得越模糊。不幸的是,很多潜在的原因已经被忽略了。打印文档的代码相当简单。

• 我没有使用我们自己的Paginator,而是将后者替换为我们使用的 MindFusion WPF 图表组件的另一个 Paginator 部分。我得到了同样的结果。(此语句也适用于保存为文件的 XPSDocuments)。

• 我使用了最新的可用打印驱动程序

• PrintTicket 分辨率的更改似乎不会以任何方式影响输出

• 使用另一个视觉对象而不是图表(如我们的应用程序本身的窗口)不会影响输出

由于这些不同的问题,似乎也有多种原因。之前的排除让我假设PrintTicket中缺少一些关键设置,或者 XPS 到 GDI 转换的场景发生了严重错误。除了这些假设之外,我的想法已经不多了。

注意:所有打印设备都有非 XPS 驱动程序。HP Designjet 500、HP 2100

最后但同样重要的是,我序列化了用于 XPS 文档文件和打印作业的相同PrintTicket 。如果有人遇到过类似的问题,我将不胜感激。欢迎任何建议。

0 投票
3 回答
26627 浏览

c# - 为什么 Graphics.MeasureString() 返回的数字高于预期?

我正在生成收据并使用 Graphics 对象调用 DrawString 方法以打印出所需的文本。

这适用于我需要它做的事情。我一直都知道我要打印什么,所以我可以手动修剪任何字符串,使其适合 80 毫米收据纸。然后我不得不添加一些额外的功能,使之更加灵活。用户可以传入将添加到底部的字符串。

因为我不知道他们要放什么,所以我只是创建了自己的自动换行函数,该函数接受许多要换行的字符和字符串本身。为了找出字符数,我正在做这样的事情:

现在宽度返回我 283,以毫米为单位约为 72,当您考虑 80 毫米纸上的边距时,这是有道理的。

但是 MeasureString 方法在 Courier New 8pt 字体上返回 10.5。因此,我没有绕过我预期的 36 - 40,而是得到 26,导致 2 行文本变成 3-4。

PrintableArea.Width 的单位是 1/100 英寸,图形对象的 PageUnit 是 Display(对于打印机来说通常是 1/100 英寸)。那么为什么我只得到 26 回来呢?

0 投票
2 回答
917 浏览

image-processing - 如何在 .NET 中处理具有 Windows Photo Gallery 质量的整页打印图像?

我正在使用 .NET PrintDocument 类在 C# 中编写打印路由,处理 OnPrintPage 事件。

我已经设法最大化边距并以横向模式打印图像,但它看起来不像我从默认图像预览程序 Windows 照片库(以前称为 Windows 图片和传真查看器)打印相同的图像文件时那样好在 Windows Vista 中。

我注意到那里有一个选择“锐化图像以进行打印”的选项,但它有什么作用?

我考虑过先从 Windows 照片库打印图像的副本,然后再次通过打印机发送纸张以打印我需要的自定义叠加层,但每次都很难让它对齐,因为打印机很糟糕在没有我需要的那种精度的情况下,我真的需要在 C# 中执行所有绘图命令,包括图像。

有谁知道如何对位图进行预处理,使其打印得和 Windows 照片库一样好? 是否有任何简单的打印驱动程序可以将照片库打印输出截获为可由 .NET Image 类读取的标准图像文件(bmp、png 等)?我在这里全力以赴。

0 投票
1 回答
1457 浏览

c# - PrintDocument (c#) 忽略打印机配置

我已经配置了一些逻辑打印机并指向同一个物理打印机。每个逻辑打印机都配置有特定的输入和输出托盘。打开文档(例如 pdf)并打印到这些打印机中的任何一个都会导致正确的输入/输出打印。但是我开发了一个 Windows 服务(win2003),当我使用 PrintDocument 类打印时,打印机忽略目标逻辑打印机的配置,只使用(它会出现)默认设置(例如任何输入托盘 => 顶部输出托盘)。我在 XP 机器上尝试过相同的服务,一切正常。

有任何想法吗?

谢谢肖恩

0 投票
1 回答
211 浏览

c# - 将 PrindDocument 发送到另一个表单

我想将 printDocument 发送到第二个表单,以在 printPreviewControl 中显示它放置在第二个表单中。

表格1代码

在 form1 中定义了具有公共访问权限的 printDocument 类

form2代码

我确定 form1 中的 printDocument 有要打印的文档,但是当 form2 加载时 printPreviewControl 中没有显示任何内容。在显示form2之前应该调用form1中的printDocument的什么方法?

0 投票
2 回答
1512 浏览

c# - C# PrintDocument 更改事件

我的问题是我创建了一个“扩展”RichTextBox 控件,该控件使用本机 API 添加标准控件中缺少的许多 RichEdit 功能(即:修改选择中的单个字体属性而不更改其他字体属性,自动换行到打印机 [如 WordPad] 等)。作为控件的一部分,我公开了一个 PrintDocument,用于打印 RichTextBox 的格式化内容。当 wordwrap 设置为“Wrap To Printer”时,我将 EM_SETTARGETDEVICE 消息发送到 RichTextBox 并使其换行到适当的长度。

当某些东西(用户/代码)更改我的控件的 WordWrap 属性时,这一切都可以正常工作。但是,如果在那之后修改了 PrintDocument,我就无法知道了。因此,即使用户可能更改了 PrintDocument 上的边距,我的 RichTextBoxEx 也不会重新发送新宽度的 EM_SETTARGETDEVICE,直到 WordWrap 属性发生更改。

我看到了一些克服这个问题的选择,但我不是其中任何一个的忠实粉丝。这是我所拥有的:

  1. 添加一个 UpdatePrintDocument() 方法或类似的方法,在控件的外部内容(即:父窗体上的 PageSetupDialog)更新 PrintDocument 中的设置后需要调用该方法。缺点:我将分发控件,所以我想让它尽可能友好。虽然我可能记得在成功更新其他人可能不会的 PrintDocument 设置时调用该方法。优点:实现起来很简单。

  2. 创建一个新的 PrintDocumentEx 类,该类基于 PrintDocument 并实现所需的“已更改”事件。缺点:可能还不够,可能需要创建 PrintSettingsEx、PageSettingsEx 等。优点:实施一次,无需再担心。

我真的认为#2是我将不得不使用的选项,但对于下一个我需要一些类似功能的实例来说,它不是很可重用。我想我正在寻找一种将“通用 PropertyChanged 事件”附加到任何现有类属性的方法,因为这将适用于未来的情况。很想看看你们对我有什么:-)