找回密码
 立即注册

QQ登录

只需一步,快速开始

foxtable
金牌服务用户   /  发表于:2016-3-19 11:45  /   查看:12126  /  回复:22
本帖最后由 foxtable 于 2016-3-19 14:40 编辑

因为单据是横向的,宽度大于高度,所以AutoRotate属性需要设置为False。
我做了一个打印按钮,按钮的代码如下:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim doc As New C1.C1Preview.C1PrintDocument
        doc.DefaultUnit = C1.C1Preview.UnitTypeEnum.Mm
        doc.PageLayout.PageSettings.Width = 150
        doc.PageLayout.PageSettings.Height = 80
        doc.PageLayout.PageSettings.TopMargin = 10
        doc.PageLayout.PageSettings.LeftMargin = 10
        doc.PageLayout.PageSettings.RightMargin = 10
        doc.PageLayout.PageSettings.BottomMargin = 10
        Dim ra As New C1.C1Preview.RenderArea()
        ra.Width = "130"
        ra.Height = "60"
        ra.Style.Borders.All = New C1.C1Preview.LineDef(1, Color.Red)
        doc.Body.Children.Add(ra)
        Dim pm As New C1.C1Preview.C1PrintManager
        pm.PrintOptions.AutoRotate = False  '禁止自动旋转
        pm.PrintOptions.CenterPage = False
        pm.PrintOptions.PageScaling = C1.C1Preview.PageScalingEnum.None
        pm.Document = doc
        doc.Generate()
        Dim ps As System.Drawing.Printing.PrinterSettings = doc.PageLayout.PageSettings.ToPageSettings.PrinterSettings
        pm.Print(ps)
    End Sub

得到的打印效果如下,是符合我的预期的:




接着我做了一个预览按钮,预览按钮的代码如下:

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim doc As New C1.C1Preview.C1PrintDocument
        doc.DefaultUnit = C1.C1Preview.UnitTypeEnum.Mm
        doc.PageLayout.PageSettings.Width = 150
        doc.PageLayout.PageSettings.Height = 80
        doc.PageLayout.PageSettings.TopMargin = 10
        doc.PageLayout.PageSettings.LeftMargin = 10
        doc.PageLayout.PageSettings.RightMargin = 10
        doc.PageLayout.PageSettings.BottomMargin = 10
        Dim ra As New C1.C1Preview.RenderArea()
        ra.Width = "130"
        ra.Height = "60"
        ra.Style.Borders.All = New C1.C1Preview.LineDef(1, Color.Red)
        doc.Body.Children.Add(ra)
        Dim dlg As New C1.Win.C1Preview.C1PrintPreviewDialog
        dlg.PreviewPane.PageSettings = doc.PageLayout.PageSettings.ToPageSettings
        With dlg.PreviewPane.PrintOptions
            .AutoRotate = False '静止自动旋转
            .CenterPage = False
            .PageScaling = C1.C1Preview.PageScalingEnum.None
        End With
        dlg.Document = doc
        dlg.ShowDialog()
    End Sub

单击这个按钮,出现打印预览窗口,在窗口单击打印按钮,得到的打印结果如下:



显然这个这个结果是不对的,我希望是横向,这里变成了纵向,AutoRotate属性在这里似乎没有生效,为什么几乎同样的代码得到的打印结果不一样呢。

然后我将删除 “.AutoRotate = False '静止自动旋转”,将打印预览按钮改为:

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim doc As New C1.C1Preview.C1PrintDocument
        doc.DefaultUnit = C1.C1Preview.UnitTypeEnum.Mm
        doc.PageLayout.PageSettings.Width = 150
        doc.PageLayout.PageSettings.Height = 80
        doc.PageLayout.PageSettings.TopMargin = 10
        doc.PageLayout.PageSettings.LeftMargin = 10
        doc.PageLayout.PageSettings.RightMargin = 10
        doc.PageLayout.PageSettings.BottomMargin = 10
        Dim ra As New C1.C1Preview.RenderArea()
        ra.Width = "130"
        ra.Height = "60"
        ra.Style.Borders.All = New C1.C1Preview.LineDef(1, Color.Red)
        doc.Body.Children.Add(ra)
        Dim dlg As New C1.Win.C1Preview.C1PrintPreviewDialog
        dlg.PreviewPane.PageSettings = doc.PageLayout.PageSettings.ToPageSettings
        With dlg.PreviewPane.PrintOptions
            .CenterPage = False
            .PageScaling = C1.C1Preview.PageScalingEnum.None
        End With
        dlg.Document = doc
        dlg.ShowDialog()
    End Sub

单击这个按钮,出现打印预览窗口,在窗口单击打印按钮,得到的打印结果如下:



我的问题是:
1、怎样才能在预览窗口打印的时候,得到的结果能够和直接打印一致?
2、AutoRotate属性在直接打印和打印预览的时候,效果似乎是相反的。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

22 个回复

倒序浏览
foxtable
金牌服务用户   /  发表于:2016-3-19 11:49:02
沙发
另: 主页Reports for WinForms的文档,不管是PDF还是CHM的,都却了API部分,哪里能下载到完整的文档呢?
回复 使用道具 举报
foxtable
金牌服务用户   /  发表于:2016-3-19 11:49:04
板凳
本帖最后由 foxtable 于 2016-3-19 14:38 编辑

英文版的也是可以的
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2016-3-21 09:22:02
地板
foxtable 发表于 2016-3-19 11:49
另: 主页Reports for WinForms的文档,不管是PDF还是CHM的,都却了API部分,哪里能下载到完整的文档呢?

C1Report的英文文档在如下链接查看:
http://helpcentral.componentone. ... ntonereportsf1.html

您的打印问题测试后给你反馈。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2016-3-21 11:06:41
5#
我这里进行了测试,预览效果和打印效果是一致的。
主要在于PrintPreviewDialog打开后,打印的设置,如果打印设置这里进行了手动修改,就有可能出现打印和预览不一致的效果。
比如打印纸张,选择不同的纸张类型,打印出来的结果是不一致的。

我测试的是2015V3版本。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
foxtable
金牌服务用户   /  发表于:2016-3-21 16:02:18
6#
本帖最后由 foxtable 于 2016-3-21 16:06 编辑

我用的是2016v1,实际上和版本无关,这个问题存在很多年了(最初是我的用户反馈的),你这样测试:
1、单击我的第一个按钮(打印按钮),打印得到一张纸

2、单击我的第二个按钮(预览按钮),可以看到预览效果和第一个按钮打印出来的一样,然后在预览窗口的工具栏中单击打印按钮,打印得到一张纸。

3、比较两张纸, 你会发现第一张纸的打印出来的是横向的四边形,第二张纸打印出来的是纵向的四边形,正如我在一楼贴的图片。
4、请用实际的打印机测试,不要用虚拟打印你。

另: 我知道英文版的网站可以看到带api的文档,我只是想下载下来,在本地看。




回复 使用道具 举报
Alice
社区贡献组   /  发表于:2016-3-21 17:49:43
7#
foxtable 发表于 2016-3-21 16:02
我用的是2016v1,实际上和版本无关,这个问题存在很多年了(最初是我的用户反馈的),你这样测试:
1、单 ...

对你的代码进行了测试。
第一个按钮和你的图片结果一致。
第二个按钮在我这里打印不出任何东西,我测试发现打印设置的纸张不对,然后添加如下代码将纸张变成A4:
  1.         doc.PageLayout.PageSettings.PaperKind = Drawing.Printing.PaperKind.A4        
复制代码



预览和打印结果是一致的。

但是第二个按钮和第一个按钮的效果不一致。
测试发现这个在PrintSetting的打印的页面设置中,纸张是横向的。
于是添加如下代码:
  1. doc.PageLayout.PageSettings.Landscape = False
复制代码
这个时候按钮一和按钮二的预览以及打印结果一致。

希望对你有帮助。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
foxtable
金牌服务用户   /  发表于:2016-3-22 10:36:49
8#
Alice 发表于 2016-3-21 17:49
对你的代码进行了测试。
第一个按钮和你的图片结果一致。
第二个按钮在我这里打印不出任何东西,我测试 ...

1、客户是用来打印票据的,是自定义纸张,纸张大小如下:
doc.PageLayout.PageSettings.Width = 150
doc.PageLayout.PageSettings.Height = 80
所以不能改为A4的来测试,这样就回避了问题发生的条件,实际上这个问题发生是有两个条件的:
a、使用自定义纸张
b、自定义纸张的宽度大于高度。

2、这是自定义纸张,所以同样不能设置Landscape属性,实际上我这边加上Landscape=false后,结果成了这样:


你可以测试下面的代码:

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim doc As New C1.C1Preview.C1PrintDocument
        doc.DefaultUnit = C1.C1Preview.UnitTypeEnum.Mm
        doc.PageLayout.PageSettings.Width = 150
        doc.PageLayout.PageSettings.Height = 80
        doc.PageLayout.PageSettings.TopMargin = 10
        doc.PageLayout.PageSettings.LeftMargin = 10
        doc.PageLayout.PageSettings.RightMargin = 10
        doc.PageLayout.PageSettings.BottomMargin = 10
        doc.PageLayout.PageSettings.Landscape = False
        Dim ra As New C1.C1Preview.RenderArea()
        ra.Width = "130"
        ra.Height = "60"
        ra.Style.Borders.All = New C1.C1Preview.LineDef(1, Color.Red)
        doc.Body.Children.Add(ra)
        Dim dlg As New C1.Win.C1Preview.C1PrintPreviewDialog
        dlg.PreviewPane.PageSettings = doc.PageLayout.PageSettings.ToPageSettings
        With dlg.PreviewPane.PrintOptions
            .AutoRotate = False '静止自动旋转
            .CenterPage = False
            .PageScaling = C1.C1Preview.PageScalingEnum.None
        End With
        dlg.Document = doc
        dlg.ShowDialog()
    End Sub



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2016-3-22 11:26:45
9#
foxtable 发表于 2016-3-22 10:36
1、客户是用来打印票据的,是自定义纸张,纸张大小如下:
doc.PageLayout.PageSettings.Width = 150
do ...

很抱歉我这里没有自定义的纸张,比如信纸。目前我能找到的就是A4纸张,所以没办法测试打印机打印的情况。
据我了解,打印票据都会有专门的纸张,客户自定义了纸张,打印机里放的纸张是否和自定义纸张保持一致?

您的代码已经在本地运行,和你预览的结果一致。
或者是我没有理解意思,用户最终想要的打印结果是什么样子的?
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
foxtable
金牌服务用户   /  发表于:2016-3-22 15:09:25
10#
本帖最后由 foxtable 于 2016-3-22 15:12 编辑

我也一样,只有A4纸,但可以通过代码模拟实际情况,要逼真的话,可以直接裁剪一张150(宽)*80(高)的纸张来测试。
我的问题很简单:在使用自定义纸张(宽度大于高度)的时候,同样的进纸位置和方向,如何让预览窗口打印出来的效果和直接打印一样。
如果版主这边效果一样,可以给你这边的完整代码给我测试一下。
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部