【问题标题】:RDLC printing on half A4在半 A4 上打印 RDLC
【发布时间】:2013-03-07 10:18:35
【问题描述】:

我想要完成的事情

要求:打印一张 A4 宽度和 A4 高度一半的收据,并旋转打印,以便可以在连续 A4 (CCP) 上打印。

我总是得到什么

我的尝试

RDLC 报告被定义为 205 毫米 x 145 毫米,因此它应该很好地适合可用空间。
我已经尝试了以下

  • 打印到 A4 纸纵向
  • 横向打印到 A4 纸
  • 创建定义为 210 x 147 的自定义纸张尺寸并打印纵向和横向
  • 处理ReportViewerPrintingBegin 事件并将DefaultPageSettings 设置为相同的纸张大小

没有任何帮助。我似乎记得在某处读过,如果报告高度小于宽度,打印输出会自动旋转为横向。不知道能不能关掉这个功能...

更新:页面大小为 208 毫米 x 147 毫米,边距为 12 毫米。报告正文为 173mm x 121mm

【问题讨论】:

  • 你把边距设为0了吗?
  • @NaNNy 我已经更新了问题。
  • 我尝试给出答案,但我想如果你向我们展示你的代码会更好。那真的很有帮助。感谢您的考虑!
  • 您好,我也有同样的问题,请问您有这个问题的答案吗?
  • @Willy 可悲的是,没有。

标签: .net printing report reporting rdlc


【解决方案1】:

前段时间我在打印时遇到了同样的问题,我想我应该分享对我有用的解决方案。如果您使用了替代路线,您也可以分享,我想看看什么对您有用。

有一个技巧,您需要做的是将报告创建为正方形,即宽度 = 210 毫米和高度 = 210 毫米但仅使用报告的前 145 毫米从上到下放置项目。

将底部 65 毫米的空间留空。

【讨论】:

    【解决方案2】:

    我会试一试的。 我的猜测是您正在使用一组用于打印的库,它们在高级别的情况下运行良好,但您应该使用更“手动”的东西。 我爸爸拥有一家咖啡店,我制作了他的 POS 软件。我们的收据打印机只打印带有我要给你的代码的行。我猜这种方式对你有用。

    此方法不打印图像,只打印文本,这一点很重要。

    我代码中的打印方式好像和你的不一样;它们是“字符敏感的”。这意味着,如果您需要 3 个空格键笔划的边距,您需要编写 3 个空格键笔划,然后是您的文本。

    要运行此代码,您必须创建一个“.txt”,然后将该文本文件作为参数发送给打印类。 我不确定你使用的是 c# 还是 VB,我的代码是在 c# 中的。

    因此,首先,要在程序中的任何位置创建文本文件,您需要标题:

    using System.IO;
    

    然后,您将开始创建文本文件:

    StreamWriter sw = new StreamWriter("receipt.txt");
    

    这会在您当前的文件夹中创建一个文件 - 与您的 .exe 所在的文件夹相同。它还会覆盖旧文件,因此您不必担心以前是否存在同名文件。 要写收据行,您将使用:

    sw.WriteLine("  the text is supposed to be written, you may use concatenations  ");
    

    WriteLine 方法将一行文本写入文件,然后移动到下一行。

    写完后,需要用...关闭文件

    sw.Close();
    

    然后你需要打电话给我要给你的印刷课。假设您已经拥有它,您需要创建它的一个实例,如下所示:

    PimpMyPrint p = new PimpMyPrint();
    

    然后用...调用 PrintDoc 方法

    p.PrintDoc("receipt.txt");
    

    再一次,你仍然需要一个包含所有必要方法的类。 我不会在这门课上学分;它是来自西班牙的作家弗朗西斯科·哈维尔·塞巴洛斯的作品。 Ceballos 先生是讲西班牙语的 SD 社区的知名作家,这来自他的书“Microsoft C# Curso de programación”。

    所以这里是你需要添加的类:

    using System;
    using System.IO;
    using System.Drawing;
    using System.Drawing.Printing;
    
    namespace SomeNamespace
    {   
        class PimpMyPrint
        {
            private Font font;
            private StreamReader sr;
    
            public void PrintDoc(string textfile)
            {
                try
                {
                    sr = new StreamReader(textfile);
    
                    try
                    {
                        font = new Font("Arial", 10);
                        PrintDocument pd = new PrintDocument();
                        pd.PrintPage += new PrintPageEventHandler(this.PrintPage);
                        pd.Print();
                    }
                    finally
                    {
                        sr.Close();
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }
    
            private void PrintPage(object obj, PrintPageEventArgs ev)
            {
                float LinesPerPage = 0;
                float pos_Y = 0;
                int count = 0;
                float marginLeft = ev.MarginBounds.Left;
                float marginUP = ev.MarginBounds.Top;
                string line = null;
    
                float fontHeight = font.GetHeight(ev.Graphics);
                LinesPerPage = ev.MarginBounds.Height / fontHeight;
    
                while (count < LinesPerPage && ((line = sr.ReadLine()) != null))
                {
                    pos_Y = marginUP + (count * fontHeight);
                    ev.Graphics.DrawString(line, font, Brushes.Black, 0, pos_Y, new StringFormat());
                    count++;
                }
    
                if (line != null)
                    ev.HasMorePages = true;
                else
                    ev.HasMorePages = false;
            }   
        }   
    }   
    

    我希望这对你有用,对我也有用!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-08
      • 2010-10-22
      • 1970-01-01
      相关资源
      最近更新 更多