WPF 中的 PrintDialog.PrinterSettings 等效项

2024-04-14

我正在尝试向我正在编写的 C# WPF 应用程序添加打印支持,对此我感到抓狂。我正在尝试从 WPF 应用程序中的窗口打印单个图像。该图像是运输标签,打印机是装有 4"x6" 运输标签纸的热敏打印机。打印的代码如下:

PrintDialog pd = new PrintDialog();

if (pd.ShowDialog() == true)
{
    Image tmpImage = new Image();
    tmpImage.Stretch = Stretch.Uniform;
    tmpImage.Width = pd.PrintableAreaWidth;
    tmpImage.Source = this.img_label.Source;
    tmpImage.Measure(new Size(pd.PrintableAreaWidth, pd.PrintableAreaHeight));
    tmpImage.Arrange(new Rect(new Point(0, 0), tmpImage.DesiredSize));

    pd.PrintVisual(tmpImage, "Shipping Label");
}

此代码的工作原理是,它将显示打印对话框,我可以选择我的打印机,将其配置为使用正确的标签纸,然后打印标签。但是,正如其他帖子所示,它不会保存我选择的设置。因此,如果我选择再次打印相同的图像而不关闭应用程序,它会恢复为默认打印机,即使我选择了正确的打印机,也会将该打印机默认为默认设置,其中包括使用错误尺寸的标签纸。因此,每次打印时,我都必须选择打印机并将其配置为使用正确的库存。这在现实世界的使用中根本不可接受。

经过在网上大量搜索后,我发现了很多关于此的帖子,但它们都谈到了保存PrintDialog.PrinterSettings对象,然后使用它来初始化下一个PrintDialog实例。然而,在WPF中,没有PrinterSettings的成员PrintDialog班级。那是一个 Win Forms 对象。为什么 Win Forms 和 WPF PrintDialog 对象不同,我无法理解,但这可能是一个无法得到解答的问题。真正的问题是我现在做什么。如果有必要,我可以重新发明整个轮子,拥有自己的打印机选择器和打印机配置页,并使用PrintDocument对象并绕过PrintDialog完全。除非完全必要,否则我宁愿不这样做。显示PrintDialog很好,这是人们所习惯的,并且它已经具有配置内置打印机的所有功能。但是我如何初始化PrintDialog在 WPF 中选择正确的打印机并使用正确的打印机设置?如果我使用的是 Windows 窗体,那么这将是内置的。WPF 的等效项是什么?

第二个问题是,如果没有 WPF 等效项,建议的处理方法是什么?我真的不需要让用户能够在我的应用程序中配置打印机。我想要它做的就是记住他们在下次打印时选择的先前设置,就像曾经编写的所有其他 PC 应用程序一样。这怎么这么难呢?

任何人可以提供的任何帮助将不胜感激。与此同时,我正在走上重新发明众所周知的轮子的道路。我希望尽快得到更简单的答案。

Thanks!


WPF has PrintTicket http://msdn.microsoft.com/en-us/library/system.printing.printticket.aspx and PrintQueue http://msdn.microsoft.com/en-us/library/system.printing.printqueue.aspx类(和PrintDialog有相应的属性,可以使用您保存的设置进行初始化)。

为简单起见,您可以将第一个设置视为纸张设置,将第二个设置视为打印机设置(选定的打印机)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF 中的 PrintDialog.PrinterSettings 等效项 的相关文章

  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template

随机推荐

  • Flyway可以从数据模型中找到并生成迁移文件吗?

    大家好 我一直在看 Flyway 但我不确定如何使用它 就我而言 我有一个实体模型 使用 JPA 注释 对我来说 有用的是 FlyWay 可以在我每次调用 迁移 并生成迁移文件时找出模型上的更改 这就是 Rails 等的工作方式 Rails
  • 解释一下Smalltalk的一段代码?

    我无法理解这段 Smalltalk 代码 line self upTo Character cr size 0 whileTrue 有人可以帮忙解释一下吗 如果您有代码来源的映像 可以做的一件简单的事情就是在其上运行调试器并单步执行 如果您
  • iOS 模拟器无法访问任何 URL 并显示错误“此连接不是私有的”

    我遇到了一个问题 我的 iPhone 模拟器无法访问 SAFARI 上的任何网站 我也无法从我的应用程序调用任何 API SAFARI 显示的错误是下面提到的两个错误之一 此连接不是私有的 Refer Screenshot OR Safar
  • 如何优化多图像拼接?

    我正在 Visual Studio 2012 C 中进行多图像拼接 我已经修改了缝合 详细 cpp https github com opencv opencv blob master samples cpp stitching detai
  • 查询返回准确的行数

    我有一个表存储两个外键 实现 n m 关系 其中一个指向一个人 subject 另一个针对特定项目 现在 一个人可能拥有的物品数量在另一个表中指定 我需要一个查询 该查询将返回与一个人可能拥有的物品数量相同的行数 其余记录可以填写NULL价
  • ElectronJS - 在窗口之间共享 redux 存储?

    我有一个基于的电子应用程序electron react boilerplate 现在 我有一个窗口按照我希望的方式运行 我开始创建一个新窗口 我目前有 2 个 html 文件 每个窗口一个 包含 div 根 div div div div
  • 父控件的 WPF ContextMenu 在具有自己的 ContextMenu 的子控件上打开

    我在基于 Canvas 的 WPF 中制作了一个相当不错的 NodeGraph 现在我正在通过右键单击菜单添加一些漂亮的功能 这些菜单是上下文相关的 这意味着右键单击图形的背景将显示图形 ContextMenu 而右键单击图形中的节点将显示
  • 将DBContext服务添加到Worker项目中的program.cs中

    对于这一切还相当陌生 所以如果我做了任何愚蠢的事情 我深表歉意 我正在尝试实现一个与我设置的本地 SQL Server Express 数据库进行通信的工作项目 我将连接字符串存储在我的AppSettings Json如下所示 Loggin
  • 为什么 printf 仍然可以在 RAX 小于 XMM 寄存器中 FP 参数数量的情况下工作?

    我正在关注Linux 64系统中的 开始x64汇编编程 一书 我正在使用 NASM 和 gcc 在关于浮点运算的章节中 本书指定了以下用于添加 2 个浮点数的代码 在本书和其他在线资源中 我读到寄存器 RAX 根据调用约定指定要使用的 XM
  • 将数组作为声音播放并并行记录其输出

    我知道 Octave MATLAB 可以将数组作为声音播放 但我想知道 Octave 是否可以做到这一点 我想循环播放一系列频率 并让 Octave 使用计算机上的扬声器播放它们 并让 Octave 也记录使用麦克风输入的声音来获取最大值
  • 关于僵尸进程和线程的问题

    自从我阅读一些有关进程和线程的新主题以来 我脑海中浮现出这些问题 如果有人能帮助我 我会很高兴 1 如果一个线程被标记为不可取消 然后该进程在临界区内被终止 会发生什么 2 我们的程序是否有操作系统已知的主线程 我的意思是操作系统是否给予程
  • MSYS2环境的使用

    我想彻底了解MSYS2平台环境的使用情况 部分描述可在以下位置找到 https www msys2 org docs environments https www msys2 org docs environments 我理解的事情 MSY
  • 如何在 MongoDB 的 Linq 查询中使用 .Contains 和 ToLower?

    MongoDB C Linq 如何在 Linq 查询中使用 contains 和 ToLower List
  • 正则表达式将 10 位数字与特定模式完全匹配

    假设我给出一个模式 123 或 1234 我想匹配以该模式开头的任何 10 位数字 它应该正好有 10 位数字 Example 模式 123 应匹配 1234567890 但不匹配 12345678 我尝试了这个正则表达式 123 d 0
  • 按位运算符的结果是如何产生的?

    我很惊讶我在谷歌上找不到这个听起来简单的问题的答案 在检查了大约十几个不同的页面之后 我只想在这里问 根据这一页 http www leepoint net notes java data expressions bitops html 3
  • 如何在 Android 上回滚事务?

    这是交易的标准习惯用法 db beginTransaction try db setTransactionSuccessful finally db endTransaction 我想添加一个 catch 块 并且我想发出回滚 有可能吗 我
  • EJB注入时出现空指针异常

    我用一个无状态 Ejb 编写了非常简单的 Web 应用程序 当我实现接口时 有趣的时刻到来了 ejb 依赖注入不起作用 web xml
  • 如何使用 python 中的 spacy 库将句子转换为问题 [请参阅下面的我的代码进行更正]

    我需要使用 python 中的 spacy 将任何句子转换为问题 我下面的代码太长了 我需要做更多的工作才能将任何句子完成为问题格式 现在在这段代码中我根据以下条件制定条件是形式 需要形式 有形式 做形式通过检查过去时和现在时 输入 尼娜拉
  • 带有多行标签的 Tkinter 表单?

    我正在构建一个通用的 数据驱动的 Tkinter 表单 每行左侧有一个标签 右侧有一个输入字段 对于简单的测试数据 可以使用标签作为标签文本 但是当所需的标签文本比标签字段长时 它只会被截断 一旦构建了表单 我就不需要动态改变标签文本 文本
  • WPF 中的 PrintDialog.PrinterSettings 等效项

    我正在尝试向我正在编写的 C WPF 应用程序添加打印支持 对此我感到抓狂 我正在尝试从 WPF 应用程序中的窗口打印单个图像 该图像是运输标签 打印机是装有 4 x6 运输标签纸的热敏打印机 打印的代码如下 PrintDialog pd