在半张 A4 纸上打印 RDLC

cle*_*ath 5 .net printing reporting report rdlc

我想要完成的

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

在此处输入图片说明

我总是得到什么

在此处输入图片说明

我试过的

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

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

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

更新:页面大小为 208 毫米 x 147 毫米,所有边距为 12 毫米。报告的主体为 173mm x 121mm

小智 1

我要尝试一下。\n我的猜测是您正在使用一组打印库,这些库在高级中运行良好,但您应该使用更多“手动”的库。\n我爸爸拥有一家咖啡店,我做了他的POS软件。我们的收据打印机仅打印所需的行以及我要给您的代码。我猜这种移动方式可能适合你。

\n\n

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

\n\n

我的代码中的打印方法好像和你的不一样;他们是“性格敏感的”。这意味着,如果您需要 3 个空格笔画的页边距,则需要先写 3 个空格键笔画,然后再写您的文本。

\n\n

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

\n\n

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

\n\n
using System.IO;\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
StreamWriter sw = new StreamWriter("receipt.txt");\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
sw.WriteLine("  the text is supposed to be written, you may use concatenations  ");\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

当你完成写入后,你需要关闭文件...

\n\n
sw.Close();\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
PimpMyPrint p = new PimpMyPrint();\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后调用 PrintDoc 方法...

\n\n
p.PrintDoc("receipt.txt");\n
Run Code Online (Sandbox Code Playgroud)\n\n

再说一遍,您仍然需要一个具有所有必要方法的类。\n我不会为该类获得学分;这是来自西班牙的作家弗朗西斯科·哈维尔·塞巴洛斯的作品。Ceballos 先生是西班牙语 SD 社区的知名作者,这来自他的书《Microsoft C# Curso de programaci\xc3\xb3n》。

\n\n

这是您需要添加的类:

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

我希望这对你有用,就像对我有用一样!

\n