delphi - 用delphi打印

标签 delphi delphi-2007

我在打印时遇到了一些困难,当我将报告打印到物理打印机时,文本完全居中,但是当我将相同的报告打印到 PDF 打印机(例如,cutePDF)或 XPS 文档编写器时,左边距变为 0。同时当我尝试调整页边距它在 PDF 和 XPS 中工作正常,但物理打印打印的页面有一些额外的左边距。我无法找出这种差异,我也尝试仅为非物理打印设置边距,但无法做到这一点。
如果可以根据打印机选择设置 marige,那就太好了,例如如果我将选择 PDF 打印机或 XPS 写入器,则边距会更改。我正在使用 Printer.canvas.textout(),打印文本的过程。

任何人都可以帮我解决这个问题。

最佳答案

一些值得强调的点:

  • 从 Windows(和 Delphi 的 TPrinter.Canvas ) POV,有 没有绘图期间的边距等概念:整个纸张大小可用于 Canvas - 例如,X=0 将指向纸张的绝对最左侧部分;
  • 根据打印机的能力,有所谓的“硬件边距”或“物理边距”:这是纸张周围的不可打印区域;也就是说,如果你在这个区域画了一些东西,它就不会被绘制——这些边距取决于所使用的打印机的技术和型号,在某些情况下,可以通过以下方式从打印机驱动程序中检索这些“边距”值 GetDeviceCaps API calls ;
  • 但是,根据我的实验,不要相信打印机驱动程序检索到的那些“物理边距” - 使用一些软件定义的边距更好(并且更美观),并让您的用户在必要时更改它(如“页面布局"MS Word 的选项);
  • PDF 打印机通常是虚拟打印机,因此它们没有任何“物理边距”;
  • 当您打印 PDF 文档时,Acrobat Reader 能够使页面内容“适合”物理打印机的“物理边距”。

  • 所以这里有一些可能的解决方案:
  • 在 Acrobat Reader 中,如果您的 PDF 没有边距,请单击“打印”,然后在“页面处理/页面缩放”选项中选择“适合可打印区域” - 我猜您此处的设置为“无”,因此结果被截断打印机;
  • 在您的 Delphi 应用程序中,在绘制报告时设置一些“逻辑”边距(例如纸张周围 1 厘米) - 也就是说,不要从 X=0 和 Y=0 开始,而是有一些偏移量,并让宽度和高度您的绘图区域更小(例如,请参阅我们的开源 Report engine 是如何实现的);
  • 在您的 Delphi 应用程序中,如果您使用 Report 组件,应该有一些属性来设置边距。

  • this article关于使用 Delphi 进行一般打印(一些信息是旧的,但大多数仍然是准确的),或正确设置您的报告引擎。

    关于delphi - 用delphi打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8062569/

    相关文章:

    regex - CPP 指令 #ifdef 正则表达式解决方案

    delphi - 德尔福更换线

    delphi - 如何使用 Delphi 从 Thunderbird 获取电子邮件文本

    delphi - 如何选择Delphi 2007的迁移路径

    delphi - 优化Delphi中包含的文件和使用

    windows - 如何在一个窗口内运行多个进程的 Delphi 中创建类似 Chrome 的应用程序?

    delphi - Lazarus Free Pascal/Delphi - 运行错误 211

    delphi - 为什么仅在将重载过程分配给局部变量后才使用重载过程时会出现 'H2219 Private symbol X declared but never used'?

    delphi - 在 Delphi 2007 中正确显示德语特殊字符

    delphi - 如何找出哪些代码调用了已经卸载的模块?