我在打印时遇到一些困难,当我将报表打印到物理打印机时,文本完全居中但是当我将相同的报表打印到PDF打印机(例如cutePDF)或XPS文档编写器时,左边距变为0。我正在尝试调整它在PDF和XPS中正常工作的边距,但物理打印会打印带有一些额外左边距的页面。我无法找到这种差异,我也试图仅为非物理打印设置边距,但无法做到这一点。 如果可以根据打印机选择设置例如,那将是很好的。如果我选择PDF打印机或XPS刻录机,则保证金会发生变化。我正在使用Printer.canvas.textout(),过程来打印文本。
任何人都可以帮助我。
答案 0 :(得分:3)
值得高度重视的一些观点:
TPrinter.Canvas
)POV中,在绘图过程中没有这样的概念为 margin :画布可以使用整个纸张大小 - 例如,X = 0将指向纸张的绝对最左边部分; GetDeviceCaps
API calls; 所以这里有一些可能的解决方案:
请参阅this article关于使用Delphi进行常规打印的信息(有些信息很旧,但大多数仍然准确),或者正确设置报告引擎。
答案 1 :(得分:0)
如果您使用TextOut
(而不是DrawText
),您将拥有x和y坐标,您将在其中放置需要打印的字符串。您可以在调试器中跟踪计算(如果应用程序在没有调试器的情况下运行,则记录它们)。确定坐标时可能出现问题(例如TextExtend
无法在居中之前测量文本,例如分辨率与您的预期不同,您将获得带有变换的Printer Canvas,因此坐标不是1:1像素。
如果您不确定坐标/字体问题:尝试在预期坐标处绘制一些框,这样您就可以将所有与字体无关的错误排除在等式之外。如果它们表现出相同的问题,那就是一个坐标问题,如果不是它的字体问题。
正如肯所说,如果你没有展示代码,我们就什么都不知道......有这么多的可能性......