c# - C# PrintDocument 不适用于所有打印机
问题描述
直接打印到打印机时,我看到不一致的结果。我的应用程序正在获取有关页面大小和边距的配置数据,并打印一个位图文件。在很多打印机上它工作得很好,但在某些打印机上,如果我通过 GIMP 打印相同的图像,输出就会完全不同。
我的代码:
PrintDocument pd = new PrintDocument();
pd.PrintPage += (senderp, args) =>
{
Image i = ConvertToBitmap();
args.Graphics.DrawImage(i, Convert.ToInt32(_leftMargin / 0.254), Convert.ToInt32(_topMargin / 0.254), Convert.ToInt32(_widthOfPrintMedia / 0.254), Convert.ToInt32(_lengthOfPrintMedia / 0.254));
};
pd.DefaultPageSettings.Landscape = true;
Debug.WriteLine(_printerName);
Debug.WriteLine(_foolPrinterLength);
Debug.WriteLine(_foolPrinterWidth);
Debug.WriteLine(_leftMargin);
Debug.WriteLine(_topMargin);
Debug.WriteLine(_widthOfPrintMedia);
Debug.WriteLine(_lengthOfPrintMedia);
pd.PrinterSettings.PrinterName = _printerName;
pd.PrinterSettings.DefaultPageSettings.PaperSize = new PaperSize("Custom", Convert.ToInt32(_foolPrinterWidth / 0.254), Convert.ToInt32(_foolPrinterLength / 0.254));
pd.DefaultPageSettings.PaperSize = new PaperSize("Custom", Convert.ToInt32(_foolPrinterWidth / 0.254), Convert.ToInt32(_foolPrinterLength / 0.254));
pd.PrintController = new StandardPrintController();
pd.Print();
正如我所说,它在大多数打印机上都能完美运行,但有些打印机就不会打球。这是在我的应用程序中使用 Citizen CL-E321 打印机时的 .prn 文件(我指定宽度为 30mm):
<xpml><page quantity='0' pitch='30.0 mm'></xpml>G0
n
M0500
O0214
V0
t1
Kf0070
SE
<xpml></page></xpml><xpml><page quantity='1' pitch='30.0 mm'></xpml>L
D11
PE
pK
SK
Q0001
E
<xpml></page></xpml>SE
<xpml><end/></xpml>
这是从 BarTender 打印的完全相同的图像:
<xpml><page quantity='0' pitch='30.0 mm'></xpml>G0
n
M0500
O0214
V0
t1
Kf0070
<xpml></page></xpml><xpml><page quantity='1' pitch='40.0 mm'></xpml>ICYgfx0
ÿ (
h ÌãŽ8ãŽ8ãŽ8ãŽ8ãÌqÇqÇqÇqÇŒÿÌAAAAA̾ûï¾ûï¾ûï¾ûï¾ÌqÇqÇqÇqÇÌãŽ8ãŽ8ãŽ8ãŽ8ãÌqÇqÇqÇqÇÌ〠㈠£Ž8ãŽ8ãÆ þ 7ÿ@Ä @ Æ
(
(˜Æõ×Áõ×hÀÆ QDQEÆ®»É®ºìÀÀÀ0Æ
Š(Š(¢ÀÆùuÖûu×]ÿÁ÷ïÿÀÆ QF QEÀÆ®¸®ºïÁ®ÀâÀòÅŸüà ?ÿÌŠ(Š(¢ ¢Š" Ì
u×
u×]p]uÚ Ãð àÁ8ÀãÌQCQEqÇQGÌ®°®ºë€ 뮸 ÌŠ ðŠ(¢‡0¢Š(sÌ]u×
u×]tß]u×LÀ€ÀÀ Á”QÈQE@QE Ì‹®Çý®ºë³ÿk®ºßÂ@ À ÌBŠ Š(¢€ bŠ( Ì
uÀu×]p
u×\ÀÀÌQ@QEP QEÌ®€®ºë ®ºïÂ` ÀÌbŠ Š(¢„ Š(¢Ç
uÀu×]pÂu×]ÀÌ”QüQEQÿþQEÌk®ð®ºë¯€
®ºëÀÌ"Š Š(¢Š Š(¢ÌÝuÐ
u×]u°íu×]Á ÀÁ”QÈQEQQDÌk®ø?®ºë®ûï®»ëÌ"Š Š(¢Š(¢Š(ÌÝuÐýu×]u×]u×ýÀÁÌQ@QEQEQ Ì®€k®ºë®ºë®ÀÂ` Á`Ì‚Š&"Š(¢Š(¢Š/Ìýuñ]u×]u×]uð
Á0 ÌQOQEQEQÿüÊk®€k®ºë®ºï¤À€ÀÊbŠ ¢Š(¢Š(£€ÊuÏ]u×]u×\ÿÀ ÊQQEQD€Éë®÷뮺뮻áÉ"Š ¢Š(¢Š(€ÉÝuß]u×]u×@ÈQQEQDÉë®ú뮺뮻Àà ‚ÌâŠ8¢Š(¢Š(÷ß}÷Èuƒ]u×]uÐÇQQEQÇ뮺뮺뮄ÿÀÈ"Š ¢Š(¢Š&ÈÝu¿]u×]u߃ÿÈQ…QEQ@Èk®ë®ºë®€Â€ À?ƒÿÇ¢Š(¢Š(¢ŠÈ]u×]u×]uðÀÄãŽ8âÌQÅQEQÇqÇÇk®ë®ºë®Ç"Š¢Š(¢ŠÈ]t‡]u×]u€Á
ÈQ…QEQ€Çk®ë®ºë®ÀÇ"Š¢Š(¢ŠÀÌ]uÇ]u×]tÃ0ÃÅ<óÏ<ðÇQQEQÈë®ú뮺뮀À€ À‚ÿÀþÇbŠ¢Š(¢ŠÀÇuÇ]u×]tÇ”QQEQƒÿÀüÈk®ú뮺므ÀÈ"Š(¢Š(¢‰€ÀÇ]u×]u×]vÀ
ÇQDQE@Ço®»ë®ºë¾ÀÀÇŠ(¢Š(¢ˆÁÌ]u×]u×]tAýø Åï¾ûçÇQ@QE`Ç®¸®ºë€ÁïÀâÀ`Å8㎠̊(Š(¢‰Çp¢Ç
u×Íu×]pÂ×]ÇüQE<AEÿÂñEÆ®º >ºèºëÀ@ÀÆŠ(@
( Â
(¢Æþu×u×_ÿÃþu×]ÀÀÅQEQEÂQEÆ®ºï®ºøîºïÀÆ
(¢Š(Ê( Æu×]u×@Ãýu×]Á€ ÀÆ EQD€ÃQD Ì >ºë®º@ ë®»àÁ@ÃqÀÀÌãŽ(¢Š(ãŽ8¢Š(ãÅ ×]uÐÄ]uÐ Á ÀÌ0QB0…QCÌóÎúë®»óϺ뮼ó Ã(¢Š(Â(¢ŠÌ ×]u×À×]uÀ Á ÃQDÂE@È:ë®»ý~ºë¾Ç¢Š(¢Š(¢È]u×]u×]`ÂóÏ<ÂO<óÌ0ÃQEQE0ÃÆ®ºë®ºè‚ÿÆâŠ(¢Š(£‚ÿÆu×]u×\Ìa†`QQE†aÌžyçœ ú뮺yçžÀ âŠ(Ã]uÐÀÃpÀÀÀŒÿ
L
D11
A2
1Y1100000310000gfx0
Q0001
E
<xpml></page></xpml>xCGgfx0
zC
<xpml><end/></xpml>
看起来图像部分只是没有被写入打印机给我。我的问题是不一致。它适用于大多数打印机,但不是全部。我在上面两个地方都设置了“DefaultPageSettings”,因为我在其他地方读到有人在这方面取得了一些成功,但似乎没有任何区别。
我不确定还能尝试什么。我尝试了多个不同的图像,结果都相同。我已经在 9 台不同的打印机上运行了它,其中 7 台运行良好。我不禁认为我遗漏了一些东西,因为如果 BarTender 工作正常,那么它就不会是打印机问题。
任何指导将不胜感激。
解决方案
推荐阅读
- delphi - MDI-Form 忽略 StyleElements seClient
- amazon-web-services - 在 Kubernetes 中从不同云提供商的现有集群中添加节点时出现问题?
- javascript - 在循环中附加对象
- angular - Angular - http请求如何流入和流出Angular 2
- javascript - 如何在角度6中将变量从一个函数传递到同一component.ts中的另一个函数
- python - 使用 Flask Web 和 opencv 进行 IP 摄像机流式传输的问题
- excel - 在运行时刷新 Ms 访问中的链接 Excel 文件路径
- c# - 尝试将字符串格式 (dd-mm-yyyy hh:mm:ss) 转换为 (yyyy-mm-dd hh:mm:ss) 日期格式
- python - FMUException: 未能设置实验
- javascript - 我应该绑定内置的 React 方法吗?