java 计算打印纸大小,如何使用winforms中的自定义纸张尺寸进行打印

我正在尝试在我的应用程序中打印文档 . 但在不同的打印机上我得到不同的结果 . 这是我的代码:

PaperSize paperSize = new PaperSize("My Envelope", 440, 630);

paperSize.RawKind = (int)PaperKind.Custom;

PrintDocument pd = new PrintDocument();

pd.PrintPage += (sender, args) => Console.Out.WriteLine("Printable Area for printer {0} = {1}", args.PageSettings.PrinterSettings.PrinterName, args.PageSettings.PrintableArea);

pd.DefaultPageSettings.PaperSize = paperSize;

pd.DefaultPageSettings.Landscape = true;

pd.DefaultPageSettings.Margins = new Margins(60, 40, 20, 20);

Console.Out.WriteLine("My paper size: " + pd.DefaultPageSettings.PaperSize);

PrintDialog printDialog = new PrintDialog(); // to choose printer

printDialog.Document = pd;

if (printDialog.ShowDialog(this) == DialogResult.OK)

{

// pd.DefaultPageSettings.PaperSize = paperSize; // uncomment to override size from dialog

Console.Out.WriteLine("Paper size for printer {0} = {1}", printDialog.PrinterSettings.PrinterName, pd.DefaultPageSettings.PaperSize);

_sptTxtControl.Print(pd);

}

对话框显示我有两台打印机 - 三星和惠普 . 这是这两个的控制台输出:

My paper size: [PaperSize My Envelope Kind=Custom Height=630 Width=440]

Paper size for printer HP LaserJet 1022n = [PaperSize A4 Kind=A4 Height=1169 Width=827]

Printable Area for printer HP LaserJet 1022n = {X=21,83333,Y=15,66667,Width=789,3333,Height=1137,333}

My paper size: [PaperSize My Envelope Kind=Custom Height=630 Width=440]

Paper size for printer Samsung SCX-4x28 Series PCL6 = [PaperSize A4 Kind=A4 Height=1169 Width=827]

Printable Area for printer Samsung SCX-4x28 Series PCL6 = {X=17,33333,Y=17,16667,Width=792,3333,Height=1135,167}

您可以看到对话框正在将大小更改为A4 . 因此,如果你在showdialog之后取消注释,我正在执行paperize . 打印时的输出如下所示:

My paper size: [PaperSize My Envelope Kind=Custom Height=630 Width=440]

Paper size for printer HP LaserJet 1022n = [PaperSize My Envelope Kind=Custom Height=630 Width=440]

Printable Area for printer HP LaserJet 1022n = {X=21,83333,Y=15,66667,Width=789,3333,Height=1137,333}

My paper size: [PaperSize My Envelope Kind=Custom Height=630 Width=440]

Paper size for printer Samsung SCX-4x28 Series PCL6 = [PaperSize My Envelope Kind=Custom Height=630 Width=440]

Printable Area for printer Samsung SCX-4x28 Series PCL6 = {X=16,66667,Y=20,Width=400,1667,Height=589,8333}

您可以看到三星打印机具有良好的可打印区域,而惠普则没有 . 无论我在代码中改变什么,HP总是A4大小(设置originatmargins等)

如果我在打印属性中更改了纸张设置(抱歉波兰语对话框):

5d937553-d067-480e-917c-7350652108a5.png

显示对话框后不更改纸张尺寸,然后HP正在打印所有内容 . 输出看起来像这样:

My paper size: [PaperSize My Envelope Kind=Custom Height=630 Width=440]

Paper size for printer HP LaserJet 1022n = [PaperSize My Envelop Format Kind=Custom Height=630 Width=440]

Printable Area for printer HP LaserJet 1022n = {X=18,66667,Y=16,Width=405,3333,Height=597,3333}

但我不想强迫用户为他的打印机保存自定义大小 . 我也试过用Kyocera打印机 - 它可以工作,但对于其他两台惠普打印机却没有 .

最糟糕的是,Word 2010在两台打印机上都打印出相同尺寸的RTF文档,我不能责怪HP驱动程序 .

有任何想法吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WinForms是一种基于.NET框架的Windows应用程序开发工具,可以使用C#或VB.NET语言进行编码。要实现自定义打印设计工具,可以按照以下步骤进行: 1. 创建一个新的WinForms应用程序项目。 2. 在项目添加一个打印设计窗口,用于用户设计打印布局和设置打印选项。 3. 在窗口添加需要的控件,例如文本框、按钮、图像框等,并设置其位置和大小。 4. 使用.NET的打印机类(PrinterSettings和PrintDocument)来实现打印功能。可以通过打印机类检测和选择可用的打印机、设置打印纸张、页边距、打印方向等。 5. 设计一个打印预览窗口,用于显示打印结果,可以在预览窗口使用PrintPreviewControl控件实现。 6. 添加一个菜单栏或工具栏,包含打印、预览、设置、保存等功能按钮,方便用户进行操作。 7. 在代码处理按钮的点击事件,调用相应的打印相关函数来处理打印任务。 8. 可以实现一些高级的打印功能,例如打印多页文档、自定义页眉页脚、选择打印区域等。可以通过自定义打印事件和处理程序来实现这些功能。 9. 最后,编译并发布应用程序,以供用户使用。可以将应用程序导出为可执行文件,或在安装程序打包发布。 总结:通过使用WinForms的控件和打印机类,可以轻松实现自定义打印设计工具。用户可以在设计窗口自由布局并设置打印选项,通过预览窗口查看打印结果,最后通过相应的按钮来触发打印任务。这样的工具可以方便用户进行打印布局的设计和打印任务的管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值