【问题标题】:Font Size Difference between Printer Canvas and Form Canvas打印机画布和表单画布之间的字体大小差异
【发布时间】:2014-04-16 14:11:48
【问题描述】:

我用

Printer.BeginDoc;
Printer.Canvas.Font := Self.Font;
Printer.Canvas.Font.Name := 'Verdana';
Printer.Canvas.Font.Size := 10;
Printer.Canvas.TextOut(10,0,'Nom : Prenom Nom');
Printer.Canvas.TextOut(10,100,'Nom2 : Prenom2 Nom2');
Printer.EndDoc;

现在我想做一些预览,所以决定做一个预览表格。 但是,我必须将字体大小设置得更大。

Form2.Canvas.Font := Self.Font;
Form2.Canvas.Font.Name := 'Verdana';
Form2.Canvas.Font.Size := 25;  //<=======Have to set this a lot higher to resemble what is on the print.
Form2.Canvas.TextOut(10,0,'Nom : Prenom Nom');
Form2.Canvas.TextOut(10,100,'Nom2 : Prenom2 Nom2');

为什么字体大小在 printer.canvas 和 form.canvas 上的行为不一样?

【问题讨论】:

  • 您到底期待什么?你有什么体验?
  • 我期待如果我打印到画布上,它是屏幕上的画布还是打印机画布都没有关系。所以我期待展示同样的效果。 (屏幕有点大,因为屏幕作为打印机的分辨率较低)
  • 当我决定提出这个问题时,我找到了解决方案:Form2.Canvas.Font.PixelsPerInch:=Printer.Canvas.Font.PixelsPerInch(在 begindoc 初始化打印机之后。)跨度>
  • @PieterB 在屏幕上,你通常有 96DPI IIRC,而在打印机上 300+
  • @ComputerSaysNo 是的,我很困惑,因为当打印像素、形状或在画布上定位时,Delphi 采用绝对值,而与 dpi 无关,但字体会根据 dpi 自动缩放。

标签: windows delphi printing delphi-7


【解决方案1】:

发生这种情况是因为取决于打印机 DPI,例如

Printer.Canvas.Font.Size := 8 适用于 300 DPI a 的打印机 具有 600 DPI 的打印机需要 .Size := 4 才能获得相同的结果。

在 Printer.beginDoc 之前试试这个

Printer.Canvas.Font.PixelsPerInch := GetDeviceCaps(Printer.Handle,LOGPIXELSY);

或者在你需要改变字体大小时尝试这个功能:

procedure TForm1.SetPixelsPerInch;
var
 FontSize: integer;
begin
  FontSize := Printer.Canvas.Font.Size;
  Printer.Canvas.Font.PixelsPerInch := GetDeviceCaps(Printer.Handle,LOGPIXELSY);
  Printer.Canvas.Font.Size := FontSize;
end;

http://www.delphigroups.info/2/e7/314459.html查看更多详情

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    • 2013-12-31
    相关资源
    最近更新 更多