C# PrinterSettings修改打印机纸张类型,paperType

news2024/11/29 8:41:08

需求:直接上图,PrinterSettings只能改变纸张大小,打印质量,无法更改打印纸类型

爱普生打印机打印照片已经设置了最高质量,打印图片仍不清晰,需要修改打印纸类型,使用PrintDialog调出对话框,修改打印纸类型后,关掉软件还需要每次人工进行调,所以需要打印照片自动选择“高质量普通纸”,打印文字使用“普通纸”

需求视频

安装包Vanara.PInvoke.Kernel32


将打印机设置保存为文件

PrintDialog printDialog = new PrintDialog();
//显示打印对话框,更改打印纸类型
printDialog.ShowDialog();
PrinterSettings printSetting = printDialog.PrinterSettings;            
var devmode= printSetting.GetHdevmode();
var fileName="高质量打印纸.bin";
//将devmode序列化保存为文件,方便下次调用加载高质量打印纸
SaveHdevmode(devmode,fileName);

每次打印之前,加载上图保存的打印配置文件即可

PrintDialog printDialog = new PrintDialog();
PrinterSettings printSetting = printDialog.PrinterSettings;
IntPtr hDevMode = IntPtr.Zero;
IntPtr pDevMode = IntPtr.Zero;
hDevMode=printSetting.GetHdevmode();
//在句柄上锁定
pDevMode= Vanara.PInvoke.Kernel32.GlobalLock(hDevMode);
var source = File.ReadAllBytes("高质量打印纸.bin");
Marshal.Copy(source, 0, pDevMode, source.Length);
//解锁
Vanara.PInvoke.Kernel32.GlobalUnlock(hDevMode);
printSetting.SetHdevmode(hDevMode);
printSetting.DefaultPageSettings.SetHdevmode(hDevMode);
//释放内存
Vanara.PInvoke.Kernel32.GlobalFree(hDevMode);
 

打印测试

PrintDocument pd = new PrintDocument();
pd.PrintController = new StandardPrintController();
pd.PrinterSettings = printSetting;
pd.DefaultPageSettings = pageSetting;
pd.PrintPage += PicturePrintDocument;
pd.Print();

附bin文件下载,下载链接在最顶部

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1348616.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

普中STM32-PZ6806L开发板(HAL库函数实现-7段共阳数码管数字显示)

简介 通过操作GPIO输出电平实现驱动单个共阳数码管 0 ~ F的显示。电路原理图 数码管电路原理图 数码管与主芯片电路原理图 其他知识 1. 由原理图可知, 共阳极已接VCC, 所以只需要控制GPIO输出低电平就可以点亮7 . 的数码管了. 2. 驱动管与主芯片引脚对应关系A -> PC0…

Python学习笔记之(一)搭建Python 环境

搭建Python 环境 1. 使用工具准备1.1 Python 安装1.1.1 下载Python 安装包1.1.2 安装Python 1.2 VScode 安装1.2.1 下载VScode安装包1.2.2 给VScode安装Python 扩展 2. 第一次编写Python 程序 本篇文章以Windows 系统为例。 1. 使用工具准备 1.1 Python 安装 1.1.1 下载Pytho…

Java多线程之线程池,volatile,悲观锁,乐观锁,并发工具类

目录 1.线程池核心原理1.创建线程池2.任务拒绝策略3.自定义线程池 2.线程池的大小1.最大并行数2.影响线程池大小的因素 3.多线程常见考点(volatile,悲观锁,乐观锁)4.并发工具类 1.线程池核心原理 ①创建一个空的池子 ②提交任务时…

印象笔记01:初识印象笔记

印象笔记01:初识印象笔记 印象笔记是一个历史比较久的笔记软件,近几年营销渠道不断完善,软件生态也日渐健全。个人因为很早接触印象笔记,从有道云笔记转粉到印象笔记了(2017 年)。而且在前几年一下子开了十…

图像分割实战-系列教程3:unet医学细胞分割实战1(医学数据集、图像分割、语义分割、unet网络、代码逐行解读)

🍁🍁🍁图像分割实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 上篇内容: Unet系列算法 下篇内容: unet医学细胞分割实战2 1、医学细胞数据…

vite+Vue3学习笔记(3)——界面设计

1 Element-plus 这是一个基于Vue3的组件库,能够快速构建界面样式。 官网链接: https://element-plus.gitee.io/zh-CN/guide/design.html 1.1 基础组件 1.1.1 安装 项目中的终端输入: npm install --save element-plus 1.1.2 引用 1.1.2.1…

Spring Boot日志:从Logger到@Slf4j的探秘

写在前面 Hello大家好,今日是2024年的第一天,祝大家元旦快乐🎉 2024第一篇文章从SpringBoot日志开始 文章目录 一、前言二、日志有什么用?三、日志怎么用?四、自定义日志打印💬 常见日志框架说明4.1 在程序…

打印菱形和金字塔类型(总结)

首先,在之前的学习中,我们了解了菱形的打印,今天我们来对金字塔和菱形这类打印图形的问题,我们来做一个总结。 这个总结的来源是这今天做了一道题 这道题的答案如下 这个题做起来并不难,拓展到这类问题中,…

Java智慧工地管理平台系统源码带APP端源码

智慧工地将“互联网”的理念和技术引入建筑工地,从施工现场源头抓起,最大程度地收集人员、安全、环境、材料等关键业务数据,依托物联网、互联网,建立云端大数据管理平台,形成“端云大数据”的业务体系和新的管理模式&a…

PTA——计算火车运行时间

本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。 输入格式: 输入在一行中给出2个4位正整数,其间以空格分隔,分别表示火车的出发时间和到达时间。每个时间的格式为2位小时数(00-23&#xff0…

JavaScript:BOM操作

JavaScript:BOM操作 BOM与JavaScript的关系window对象window对象的常用属性方法定时器间歇函数延时函数 JavaScript执行机制同步异步事件循环 location对象navigator对象histroy对象浏览器的本地存储localStoragesessionStorage 复杂数据类型的存储JSON字符串 BOM与…

浅谈Verilog代码的执行顺序

一、组合逻辑和时序逻辑 数字电路可以分成两大类,一类叫组合逻辑电路,另一类叫做时序逻辑电路。 组合逻辑电路:由门电路组成,其某一时刻的输出状态只与该时刻的输入状态有关,而与电路原来的状态无关,并没有…

基于Java SSM框架实现健康管理系统项目【项目源码】

基于java的SSM框架实现健康管理系统演示 JSP技术 JSP是一种跨平台的网页技术,最终实现网页的动态效果,与ASP技术类似,都是在HTML中混合一些程序的相关代码,运用语言引擎来执行代码,JSP能够实现与管理员的交互&#xf…

AI模型私人订制

使用AI可以把你的脸换成明星的脸,可以用于直播、录播。 AI换脸1 也可以把视频中明星的脸换成你的脸 AI换脸2 之所以能够替换成功,是因为我们有一个AI人物模型,AI驱动这个模型就可以在录制视频的时候替换指定人物的脸。AI模型从哪里来&…

c++写入数据到文件中

假设你想编写一个C程序&#xff1a;当你在调试控制台输入一些数据时&#xff0c;系统会自动存入到指定的文件中&#xff0c;该如何操作呢&#xff1f; 具体操作代码如下&#xff1a; #include<iostream> #include<string> #include<fstream> using namespa…

Elasticsearch:在不停机的情况下优化 Elasticsearch Reindex

实现零停机、高效率和成功迁移更新的指南。更多阅读&#xff1a;Elasticsearch&#xff1a;如何轻松安全地对实时 Elasticsearch 索引 reindex 你的数据。 在使用 Elasticsearch 的时候&#xff0c;总会有需要修改索引映射的时候&#xff0c;遇到这种情况&#xff0c;我们只能做…

作业--day39

定义一个Person类&#xff0c;私有成员int age&#xff0c;string &name&#xff0c;定义一个Stu类&#xff0c;包含私有成员double *score&#xff0c;写出两个类的构造函数、析构函数、拷贝构造和拷贝赋值函数&#xff0c;完成对Person的运算符重载(算术运算符、条件运算…

十八、任务通知

1、前言 (1)所谓“任务通知”&#xff0c;可以反过来读"通知任务"。我们使用队列、信号量、事件组等等方法时&#xff0c;并不知道对方是谁。使用任务通知时&#xff0c;可以明确指定&#xff1a;通知哪个任务。 (2)使用队列、信号量、事件组时&#xff0c;我们都需…

C++初阶——权限与继承

目录 一、C权限方面的问题 1.访问权限 2.继承机制 二、Cconst引用 const引用有以下几个特点 临时对象引用 常量引用成员变量 二、c引用空间相关问题 三.auto 一、C权限方面的问题 【C入门】访问权限管控和继承机制详解_权限继承功能-CSDN博客文章浏览阅读840次。(2)但…

C#中string.ToUpper()和string.ToLower()的用法

目录 一、关于ToUpper()和ToLower() 1.ToUpper() 2.ToLower() 3.小结 二、实例 三、生成效果 一、关于ToUpper()和ToLower() 1.ToUpper() 使用字符串对象的ToUpper方法可以将字符串中的字母全部转换为大写。 string P_str_book "mingribook".ToUpper()…