首页 > 解决方案 > 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®ºë®ºë®ÀÂ` Á`Ì‚Š&amp;"Š(¢Š(¢Š/Ìý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 工作正常,那么它就不会是打印机问题。

任何指导将不胜感激。

标签: c#.netprinting

解决方案


推荐阅读