我想要实现的目标
要求:打印A4宽度和A4高度的一半的收据并打印旋转,以便可以连续A4(CCP)打印.
我一直得到什么
我试过了什么
RDLC报告定义为205mm x 145mm,因此它应该很好地适合可用空间.
我尝试了以下内容
>打印到A4纸张纵向
>打印到A4纸张横向
>创建定义为210 x 147的自定义纸张尺寸并打印纵向和横向
>处理ReportViewer的PrintingBegin事件并将DefaultPageSettings设置为相同的纸张大小
什么都没有帮助.我似乎记得在某处读取如果报告高度小于宽度,打印输出会自动旋转到横向.我不知道该功能是否可以关闭…
更新:页面尺寸为208mm x 147mm,四面边距均为12mm.报告正文为173mm x 121mm
最佳答案 我要试一试.
我的猜测是你正在使用一组用于打印的库,这些库在高级别上工作得很好,但你应该使用更多“手动”的东西.
我父亲拥有一家咖啡店,我制作了他的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");
再一次,你仍然需要一个具有所有必要方法的课程.
我不打算为此课程取得学分;这是来自西班牙的作家Francisco Javier Ceballos的作品. Ceballos先生是讲西班牙语的SD社区的着名作家,这是他的书“Microsoft C#Cursodeprogramació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;
}
}
}
我希望这对你有用,因为它对我有用!