【发布时间】:2021-05-26 05:59:48
【问题描述】:
我需要打印从扫描仪获取的图像。
当扫描适合一张 A4 页面时,没有问题,我的代码打印完美。
但是,当扫描不适合,但需要 2 页时,只打印一页。第一个。
这是我目前的代码
procedure TFormMain.PrintPicture;
var
MyRect: TRect;
Scale: Double;
begin
try
Printer.BeginDoc;
Scale := Printer.PageWidth / ImgHolder.Picture.Bitmap.Width;
MyRect.Left := 0;
MyRect.Top := 0;
MyRect.Right := trunc(ImgHolder.Picture.Bitmap.Width * Scale);
MyRect.Bottom := trunc(ImgHolder.Picture.Bitmap.Height * Scale);
Printer.Canvas.StretchDraw(MyRect, ImgHolder.Picture.Bitmap);
Printer.EndDoc;
except
on E:Exception do
begin
MessageBox(Handle, PChar('Printing failed' + chr(13) + E.Message), PChar(Caption), MB_OK or MB_ICONWARNING);
end;
end;
end;
图片占一页时,MyRect的高度=13092
当图像包含 2 页时,高度为 26185
这对我来说似乎是正确的,但仍然只打印了第一页。 所以我一定是做错了,有人可以指出我如何打印高于一页高度的图像的正确方向
编辑
如果图像较大,我想打印多页。
我不想将图像缩小到一页。
我的代码中比例尺的原因是因为我一开始无法正确打印,我在另一个问题中找到了这段代码,为我解决了这个问题。
但现在看来这种做法是错误的。
因此,如果我能在正确设置打印方面获得帮助,我将不胜感激。
如果用户扫描 2 或 3 次,图像将变大,新的扫描将添加到底部的图像中。
这就是图片长度超过一页的原因。
现在我需要完整地打印这张图片,如果需要的话,打印不止一页
【问题讨论】:
-
您应该根据高度和宽度计算两个比例因子,并使用两者中最严格的一个。
-
@fpiette 这需要更多解释
-
@GuidoG:
ScaleX := Printer.PageWidth / ImgHolder.Picture.Bitmap.Width; ScaleY := Printer.PageHeight / ImgHolder.Picture.Bitmap.Height; Scale := Min(ScaleX, ScaleY)(uses Math)。或者,换句话说:ScaleX是使图像适合纸张宽度所需的缩小因子。例如,如果纸张为 1000×1000,图像为 2000×1000,您显然需要将其缩小到 50% 以使其水平适合。但如果图像是 1000×5000,问题不是宽度而是高度,显然需要将其缩小到 20% 以使其垂直适合。所以一般来说,你需要这些中最小的。 -
所以如果图像是 2000×5000,你需要比例因子为 50% 或更小才能使它水平适合,你需要比例因子为 20% 或更小才能使它适合垂直。因此,比例因子必须
-
@AndreasRejbrand(和.at. fpiette)他问的是如何在两页上打印,而不是如何让输出适合一页。我已经有十年或更长时间没有做过任何打印代码(而且从来没有在 Delphi 中做过),所以我似乎不适合尝试答案......
标签: delphi canvas printing delphi-10.3-rio