为什么同样的内容,在不同的电脑上打印的位置和字体都不一样?

时间:2022-05-20 19:05:35
我的程序
Printer()->BeginDoc();
       
      
         TextOut(Printer()->Handle, 400, 450,Label1->Caption.c_str(),Label1->Caption.Length());
         TextOut(Printer()->Handle, 345, 660,Label2->Caption.c_str(),Label2->Caption.Length());
         TextOut(Printer()->Handle, 645, 660,Label3->Caption.c_str(),Label3->Caption.Length());
         TextOut(Printer()->Handle, 650, 1280,Edit1->Text.c_str(),Edit1->Text.Length());

         Printer()->NewPage();
       Printer()->EndDoc();

在我的电脑上打印的位置没有问题,但在别人的机上位置就不一样了,为什么这样呢?请指教一下!

10 个解决方案

#1


我以前碰到过,与打印驱动有关

#2


与打印机的分辨率有关,程序需要先获得打印机的分辨率,然后再调整字体大小和打印的坐标位置。

#3


打印的坐标位置与打印机的分辨率有什么关系?应该怎样做?希望能给出代码。谢谢!

#4


prnptr = Printer();
         // 获取分辨率
ipixelPerInchX = GetDeviceCaps(prnptr->Handle, LOGPIXELSY);
ipixelPerInchY = GetDeviceCaps(prnptr->Handle, LOGPIXELSX);
         // 每厘米对应的点数
ipixelPerCmX = (int)(ipixelPerInchX / 2.54);
ipixelPerCmY = (int)(ipixelPerInchY / 2.54);

#5


prnptr = Printer();
         // 获取分辨率
ipixelPerInchX = GetDeviceCaps(prnptr->Handle, LOGPIXELSX);
ipixelPerInchY = GetDeviceCaps(prnptr->Handle, LOGPIXELSY);
         // 每厘米对应的点数
ipixelPerCmX = (int)(ipixelPerInchX / 2.54);
ipixelPerCmY = (int)(ipixelPerInchY / 2.54);
         prnptr->Orientation = poPortrait; 
...
         prnptr->Canvas->TextOut(m_BaseX+ ipixelPerCmX*9.35, m_BaseY+ ipixelPerCmY*1.2, "打印标题");

#6


TO BenLeak(摇摆人) :
prnptr->Orientation = poPortrait; 这行什么意思?还有ipixelPerCmX*9.35,ipixelPerCmY*1.2乘9.35和1.2又是什么意思呢?不太懂,请说明一下,谢谢!

#7


prnptr->Orientation = poPortrait; 打印纵向或者横向
9.35 与 1.2 就是位置 9.35、1.2厘米偏移

#8


分辨率就是 DPI(点每英寸),1 英寸为 2.54 厘米,所以 ipixelPerCmX 就是 1 厘米对应的象素点

#9


对于不同的打印机m_BaseX和m_BaseY应该是一样的吧?就是说在不同的打印机上
prnptr->Canvas->TextOut(m_BaseX+ ipixelPerCmX*9.35, m_BaseY+ ipixelPerCmY*1.2, "打印标题");
这一句所打印出来的位置都是相同的吧?

#10


?????

#1


我以前碰到过,与打印驱动有关

#2


与打印机的分辨率有关,程序需要先获得打印机的分辨率,然后再调整字体大小和打印的坐标位置。

#3


打印的坐标位置与打印机的分辨率有什么关系?应该怎样做?希望能给出代码。谢谢!

#4


prnptr = Printer();
         // 获取分辨率
ipixelPerInchX = GetDeviceCaps(prnptr->Handle, LOGPIXELSY);
ipixelPerInchY = GetDeviceCaps(prnptr->Handle, LOGPIXELSX);
         // 每厘米对应的点数
ipixelPerCmX = (int)(ipixelPerInchX / 2.54);
ipixelPerCmY = (int)(ipixelPerInchY / 2.54);

#5


prnptr = Printer();
         // 获取分辨率
ipixelPerInchX = GetDeviceCaps(prnptr->Handle, LOGPIXELSX);
ipixelPerInchY = GetDeviceCaps(prnptr->Handle, LOGPIXELSY);
         // 每厘米对应的点数
ipixelPerCmX = (int)(ipixelPerInchX / 2.54);
ipixelPerCmY = (int)(ipixelPerInchY / 2.54);
         prnptr->Orientation = poPortrait; 
...
         prnptr->Canvas->TextOut(m_BaseX+ ipixelPerCmX*9.35, m_BaseY+ ipixelPerCmY*1.2, "打印标题");

#6


TO BenLeak(摇摆人) :
prnptr->Orientation = poPortrait; 这行什么意思?还有ipixelPerCmX*9.35,ipixelPerCmY*1.2乘9.35和1.2又是什么意思呢?不太懂,请说明一下,谢谢!

#7


prnptr->Orientation = poPortrait; 打印纵向或者横向
9.35 与 1.2 就是位置 9.35、1.2厘米偏移

#8


分辨率就是 DPI(点每英寸),1 英寸为 2.54 厘米,所以 ipixelPerCmX 就是 1 厘米对应的象素点

#9


对于不同的打印机m_BaseX和m_BaseY应该是一样的吧?就是说在不同的打印机上
prnptr->Canvas->TextOut(m_BaseX+ ipixelPerCmX*9.35, m_BaseY+ ipixelPerCmY*1.2, "打印标题");
这一句所打印出来的位置都是相同的吧?

#10


?????