转贴 打印机自定义纸张

C#针式打印机自定义纸张连续打印爬坑过程 前言 最近接到一个项目,主要功能是对业务单据的流程管理。但是要实现针式打印机对业务单据的连续打印。客户提供的单据格式如下,要求针式打印机一次可连续打印50-100张单据。 接到需求以后,迅速开搞,单据的流程管理开发非常顺利。但针式打印机连续打印单据的开发过程异常艰辛。本文主要讲述开发选型的过程、遇到的问题、以及填坑过程。 选型 之前开发过的票据打印程... 阅读详情

转贴

近日因项目需要接触了打印机,自定义纸张的大小问题困扰了我一个多星期,还以为XP系统无法自定义纸张,后来在网上搜索时无意中发现,打印机都有最小纸张的标准,如果小于或大于这个标准,就算自定义好了页面,都无法选择它(不会显示出来),如果用程序强制设置打印的话,它会按A4的标准走纸,比如我用的Epson LQ-300K+这款打印机,最小纸张是10CM*10.16CM,而我要的宽度正好小于10CM,后来我改成10CM后,就能正常打印了。使用下面第一段例子就可以搞定了!  

转自:http://delphi.ktop.com.tw/board.php?cid=30&fid=100&tid=75503

在 WindowsNT/200 環境下要自訂紙張尺寸所使用的方法與 Win9x 不同,
你必須先為目前的印表機定義一個自訂的 "Form" (呼叫 API: AddForm ,
此 API 宣告於 WinSpool 單元中),然後把這個 Form 的名稱設定給
DEVMODES 結構中的 dmFormName 欄位。以下的函式可以直接拿來使用:
 
uses Windows, WinSpool, Printers;
 
(*------------------------------------------------------
Define a new Form (WinNT/2000 only).
If FormName already exists, do nothing and return.
If failed, an exception will be raised.
------------------------------------------------------*)
procedure PrnAddForm( const FormName: string ; PaperWidth, PaperLength: integer);
var
PrintDevice, PrintDriver, PrintPort : array [ 0 .. 255 ] of Char;
hDMode : THandle;
hPrinter: THandle;
FormInfo: TFormInfo1;
PaperSize: TSize;
PaperRect: TRect;
errcode: integer;
s: string ;
begin
Printer.GetPrinter(PrintDevice, PrintDriver, PrintPort, hDMode);
OpenPrinter(PrintDevice, hPrinter, nil );
if hPrinter = 0 then
raise Exception.Create( 'Failed to open printer!' );
FormInfo.Flags := FORM_USER;
FormInfo.pName := PChar(FormName);
PaperSize.cx := PaperWidth;
PaperSize.cy := PaperLength;
PaperRect.Left := 0 ;
PaperRect.Top := 0 ;
PaperRect.Right := PaperWidth;
PaperRect.Bottom := PaperLength;
FormInfo.Size := PaperSize;
FormInfo.ImageableArea := PaperRect;
if not AddForm(hPrinter, 1 , @FormInfo) then
begin
errcode := GetLastError;
if errcode <> ERROR_FILE_EXISTS then // Form name exists?
begin
case errcode of
ERROR_ACCESS_DENIED: s := 'Access is denied' ;
ERROR_INVALID_HANDLE: s := 'The handle is invalid' ;
ERROR_NOT_READY: s := 'The device is not ready' ;
ERROR_CALL_NOT_IMPLEMENTED:
s := 'Function "AddForm" is not supported on this system' ;
else
s := 'Failed to add a Form (paper) name!' ;
end ;
raise Exception.Create(s);
end ;
end ;
ClosePrinter(hPrinter);
end ;
 
(*
Set custom paper size for WinNT/2000.
Make sure FormName is supported by current printer,
You can call PrnAddForm to define a new Form.
*)
procedure PrnSetPaperSizeNT(FormName: string ; PaperWidth, PaperLength: integer);
var
Device, Driver, Port: array [ 0 .. 80 ] of Char;
DevMode: THandle;
pDevmode: PDeviceMode;
begin
// Get printer device name etc.
Printer.GetPrinter(Device, Driver, Port, DevMode);
// force reload of DEVMODE
Printer.SetPrinter(Device, Driver, Port, 0 ) ;
// get DEVMODE handle
Printer.GetPrinter(Device, Driver, Port, DevMode);
if DevMode <> 0 then
begin
// lock it to get pointer to DEVMODE record
pDevMode := GlobalLock( DevMode );
if pDevmode <> nil then
try
with pDevmode^ do
begin
// modify form
StrLCopy( dmFormName, PChar(FormName), CCHFORMNAME- 1 );
// tell printer driver that dmFormname field contains
// data it needs to inspect.
dmPaperWidth := PaperWidth;
dmPaperLength := PaperLength;
dmFields := dmFields or DM_FORMNAME or DM_PAPERWIDTH or DM_PAPERLENGTH;
end ;
finally
GlobalUnlock( Devmode ); // unlock devmode handle.
end
打印机自定义纸张设置工具实战指南 你有没有遇到过这样的场景?——设计师在 Illustrator 里精心排好一张 1200×800mm 的广告展架图,信心满满地点下“打印”,结果系统弹出:“不支持该纸张尺寸”。无奈之下只能缩放到 A3 凑合,最后裁剪拼接,边角对不齐、颜色有偏差……整个过程像极了“用乐高搭航母”:理想很丰满,现实太骨感。这背后的问题,其实不是打印机不行,也不是软件太弱,而是数字内容与物理输出之间的桥梁断了。标准纸张模板早已跟不上创意和工程的节奏。 阅读详情

相关推荐

Delphi 设置打印纸大小.rar

Delphi 设置打印纸张大小,手动设置打印纸的长度和宽度,自定义纸张。相关代码:   procedure TForm1.SetPaperSize(cx, cy: Integer);   var    a,b,c: array[0..255]of char;    bb: Cardinal;    ee: PDEVMODE;   begin    printer.PrinterIndex := printer.PrinterIndex;    printer.GetPrinter(a,b,c,bb);    ee:= GlobalLock(bb);    ee^.dmPaperSize := DMPAPER_USER;    ee^.dmPaperLength := cy*10;    ee^.dmPaperWidth := cx*10;    ee^.dmFields :=ee^.dmFields or DM_PAPERSIZE or    DM_PAPERWIDTH or    DM_PAPERLENGTH;    ee^.dmFields := ee^.dmFields or DMBIN_MANUAL;    ee^.dmDefaultSource :=DMBIN_MANUAL;    GlobalUnlock(bb);    printer.PrinterIndex := printer.PrinterIndex;   end;

实用的打印机自定义纸张

还在为添加打印机纸张烦恼吗?还在为添加的打印机纸张不成功而苦恼吗?下载这个工具吧,能解决你的烦恼。

Delphi设置打印纸大小的程序示例..rar

Delphi设置打印纸大小的程序示例..rar

802.11 NDP Sounding

NDP Sounding1.NDP原理2.NDP 过程3.帧结构3.1 NDPA结构3.2 CBF帧 1.NDP原理 802.11n标准提供的波束成形技术,可以通过预先补偿发射天线的相位,让两条波束进行叠加以实现最好的效果 显式波束成形需要终端反馈信道信息: AP向STA发送探测数据(NDP: null data packet sounding) STA向AP反馈信道信息(Compressed beamforming) AP根据STA的反馈或自行计算的权重信息进行波束成形 2.NDP 过程 802.

weixin_45799954的博客 8262

手把手教你用Python模拟侧信道攻击:从电磁辐射到数据窃取(附防御代码)

本文详细介绍了如何使用Python模拟侧信道攻击,从电磁辐射信号采集到数据窃取的全过程,并提供了实用的防御代码。通过实战案例,帮助安全研究员和开发者理解侧信道攻击原理,掌握信号处理与图像重建技术,同时学习有效的噪声干扰和电磁屏蔽防御措施。

weixin_28716443的博客 162

第一章、isaacsim 及 isaaclab 安装教程

本专栏所有内容将根据上述资源地址展开,请结合食用~

m0_47719040的博客 4780

【低空经济】低空无人驾驶航空器运行管理系统设计方案

低空无人驾驶航空器运行管理系统(以下简称“系统”)旨在为低空域内的无人驾驶航空器(UAV)提供高效、安全、智能的运行管理服务。系统通过集成先进的通信、导航、监控、数据处理和人工智能技术,实现对低空域内无人驾驶航空器的实时监控、动态调度、风险评估和应急响应,确保其在复杂空域环境中的安全运行。系统的核心功能包括空域管理、飞行计划审批、实时监控、冲突预警、应急管理和数据分析。空域管理模块负责划分和管理低空域资源,确保不同飞行任务之间的空域隔离和高效利用。

2502_92579126的博客 1140

以ATT&CK为例构建网络安全知识图

随着攻击工具、方法的逐渐升级和复杂化,安全数据的大规模融合,攻防对抗愈加激烈。安全团队如何在浩瀚数据中有效发现高级威胁的蛛丝马迹,如何把网络安全专家的经验、知识有效转化为可复制可扩展的数据分析能力,如何将对抗高级威胁的“炼金术”逐步升级为科学淘金指南,如何将安全从业者从繁重的体力劳动中解放出来,愈发成为安全能力亟需突破的难点和重点,也是我们正在探索的方向。正如医疗行业中治疗疑难杂症依赖医疗专家,网络空间高级威胁的防护和处置也依赖安全专家的经验与知识。

2401_88752684的博客 1091

硬件电路RS485通信EMC 设计

RS485通讯硬件设计与STM32实现要点 本文详细介绍了RS485通讯系统的硬件设计和STM32实现方案。硬件设计重点包括:采用总线型拓扑结构、120Ω终端电阻匹配、屏蔽双绞线布线、TVS管和自恢复保险丝保护等核心要素。EMC设计强调共模电感抑制干扰、屏蔽层单端接地、光电隔离等技术。软件实现方面,提供了基于STM32F103的完整程序框架,包括UART初始化、收发控制逻辑和中断处理机制,特别强调了收发切换时机、波特率精度等关键注意事项。文中还给出了工业传感器节点的实际应用案例,展示了一个完整的EMC防护电

qq_37999850的博客 1384

【推荐100个unity插件之7】使用BehaviorDesigner插件制作BOSS的AI行为树

Behavior Designer是一个行为树插件,是一款为了让策划,程序员,美术人员方便使用的可视化编辑器。Behavior Designer提供了强大的AP1可以让你轻松的创建tasks(任务),配合uScript和PlayMaker这样的插件,可以不费吹灰之力就能够创建出强大的Al系统,而无需写行代码。(不懂PlayMaker的,我后面在单独出文章介绍一下,可以期待一下)

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 6571

MOS管驱动电路设计全攻略

MOS管驱动电路设计全攻略

让你爱上电路设计 3634

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

上一篇: EnumForms 函数枚举指定打印机支持有所有页形.
下一篇: 如何使用GetPrinter
Persistent8813
博客等级 码龄23年 7粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值