waha 发表于 2023-8-8 15:23:58

WPF ActiveReports打印不能在同一页上

设置在5cm*3cm的打印纸上打印,打印出来会自动在两页上显示。


Felix.Li 发表于 2023-8-8 15:23:59

本帖最后由 Felix.Li 于 2023-8-11 11:34 编辑

如果代码设置这些都无效,就还是怀疑是不是打印机有什么设置,您可以参考如下截图:


您预览的时候两边是没有边距的,但是实际打印出来,两边多了很多边距。而且看您打印的方向。应该也是对的,其实就是横向打印的。
横向的字体处于宽的那边。但是问题就是出在了两边莫名其妙多出来的边距。我猜测是不是咱们有什么打印机设置。打印机设置带了边距
也就是两侧纸张边距是多少多少,导致最终打印的时候执行了这个边距,导致预览和打印的不一样

类似这种打印机首选项导致的:

Bella.Yuan 发表于 2023-8-8 16:48:21

您好,下载了您的报表文件,使用桌面设计器未复现出来,看您给报表设置的边距是0但是根据您上传的图片看左边距好像不是0,您检查一下是不是代码中设置了左边距。

waha 发表于 2023-8-11 08:59:19

Bella.Yuan 发表于 2023-8-8 16:48
您好,下载了您的报表文件,使用桌面设计器未复现出来,看您给报表设置的边距是0但是根据您上传的图片看左 ...

代码中没有设置边距。
只要是宽大于高就自动转成横向了,有强制纵向打印的设置没。

Eden.Sun 发表于 2023-8-11 09:14:34

本帖最后由 Felix.Li 于 2023-8-11 09:20 编辑

waha 发表于 2023-8-11 08:59
代码中没有设置边距。
只要是宽大于高就自动转成横向了,有强制纵向打印的设置没。

看您的截图,感觉有是有边距,但是您的报表没有设置边距,而且看着字体大小也不太对,
您先预览一下或者导出一个pdf,看一下效果:


其次关于您提到的,我们其实没有办法直接控制强制横纵向,这种一般都是打印机控制的。不过倒是可以代码控制纸张横向纵向:
您可以试一下:
pageReport.Report.PaperOrientation = PaperOrientation.Landscape;    或者;
pageReport.Report.PaperOrientation = PaperOrientation.Protrait;

其次或者开启自动旋转试一下:
var settings = new PrinterSettings(pageReport.Report);
settings.PrintOptions.AutoRotate = true;
pageReport.Document.Print(settings)

waha 发表于 2023-8-11 09:24:25

Eden.Sun 发表于 2023-8-11 09:14
看您的截图,感觉有是有边距,但是您的报表没有设置边距,而且看着字体大小也不太对,
您先预览一下或 ...

预览看着正常。代码中也没设置什么边距。



打印代码:

/// <summary>
      /// 多参数指定打印机名打印
      /// </summary>
      /// <param name="reportFilePath">报表文件路径</param>
      /// <param name="reportJsons">Json数据</param>
      /// <param name="printerName">打印机名</param>
      static public void NowPrint(string reportFilePath, List<string> reportJsons, string printerName)
      {
            PageReport pageReport = new PageReport(new FileInfo(reportFilePath));
            PageDocument pageDocument = new PageDocument(pageReport);
            for (int i = 0; i < reportJsons.Count; i++)
            {
                pageReport.Report.DataSources.ConnectionProperties.ConnectString = "jsondata=" + reportJsons;
            }

            pageDocument.Printer.PrinterName = printerName;

            Viewer viewer = new Viewer();
            viewer.LoadCompleted += view_LoadCompleted;
            viewer.LoadDocument(pageDocument);
      }

      #endregion


      #region 加载完报表文件直接打印

      static private void view_LoadCompleted(object sender, EventArgs e)
      {
            ((Viewer)sender).Print(false, false, true);
      }

      #endregion

Bella.Yuan 发表于 2023-8-11 09:58:01

waha 发表于 2023-8-11 09:24
预览看着正常。代码中也没设置什么边距。




您好,您有尝试使用上面版主回复您的2种方法吗?方法1:控制纸张横向和纵向;方法2:开启纸张自动旋转。

waha 发表于 2023-8-11 10:46:49

Bella.Yuan 发表于 2023-8-11 09:58
您好,您有尝试使用上面版主回复您的2种方法吗?方法1:控制纸张横向和纵向;方法2:开启纸张自动旋转。

试了,不行。

Bella.Yuan 发表于 2023-8-11 11:29:23

waha 发表于 2023-8-11 10:46
试了,不行。

您好,如果上面的2种方法均设置无效,建议您修改一下报表的宽高,按对应的标签大小进行打印。查看了您的报表,报表的纸张是宽3高5,页面1的纸张是宽4.8高2.8,您可以依据报表的纸张大小去调整对应的页面大小,同时也需要跳转组件的位置,让组件可以全部放置在页面上。按您提供的图片您应该是要纵向打印报表到标签上,,您修改一下尺寸和组件,在打印看看效果。
页: [1]
查看完整版本: WPF ActiveReports打印不能在同一页上