我会在图像画布上使用lineto函数,然后打印出来。但打印机会创建一个空白页面。我使用printer.canvas.StretchDraw,但如果图像已保存并加载,则图像打印将会成功。有人知道原因吗?(delphi)打印图像问题
1
A
回答
2
这是我使用:
function PrintWrapper(ADrawProc : TDrawProc;
APreview: Boolean;
AWidth, AHeight : longint) : boolean;
var
bmp : Graphics.TBitmap;
PixPerInchX, PixPerInchY : longint;
begin
bmp := Graphics.TBitmap.Create;
try
if APreview then begin
PixPerInchX := GetDeviceCaps(bmp.Canvas.Handle, LOGPIXELSX);
PixPerInchY := GetDeviceCaps(bmp.Canvas.Handle, LOGPIXELSY);
bmp.Width := PixPerInchX * AWidth;
bmp.Height := PixPerInchY * AHeight;
bmp.Canvas.Brush.Color := clWhite;
bmp.Canvas.FillRect(Rect(0,0,bmp.Width,bmp.Height));
ADrawProc(bmp.Canvas,AWidth,AHeight);
result := (not APreview) or TFormImagePrintPreview.PrintNow(bmp);
if not result then
exit;
end;
Printer.Orientation := poLandscape;
Printer.BeginDoc;
try
ADrawProc(Printer.Canvas,AValues,AWidth,AHeight);
finally
Printer.EndDoc;
end;
result := true;
finally
FreeAndNil(bmp);
end;
end;
其中DrawProc是:
type
TDrawProc = procedure(ACanvas : TCanvas;
Width, Height : longint);
图像预览是:
unit formImagePreviewDef;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TformImagePrintPreview = class(TForm)
pnBottom: TPanel;
btPrint: TButton;
btCancel: TButton;
imgMain: TImage;
lbNotes: TLabel;
procedure btPrintClick(Sender: TObject);
procedure btCancelClick(Sender: TObject);
public
procedure Init(AGraphic : TGraphic; ANotes : string = '');
class function PrintNow(AGraphic : TGraphic; ANotes : string = '') : boolean;
end;
implementation
{$R *.dfm}
{ TformImagePrintPreview }
procedure TformImagePrintPreview.btCancelClick(Sender: TObject);
begin
Close;
ModalResult := mrCancel;
end;
procedure TformImagePrintPreview.btPrintClick(Sender: TObject);
begin
Close;
ModalResult := mrOk;
end;
procedure TformImagePrintPreview.Init(AGraphic: TGraphic; ANotes : string = '');
const
MAXSIZE = 600;
begin
lbNotes.caption := ANotes;
imgMain.Picture.Assign(AGraphic);
if AGraphic.Height > AGraphic.Width then begin
ClientWidth := trunc(MAXSIZE * AGraphic.Width/AGraphic.Height);
ClientHeight := MAXSIZE + pnBottom.Height;
end else begin
Width := MAXSIZE;
Height := trunc(MAXSIZE * AGraphic.Height/ AGraphic.Width)+pnBottom.Height;
end;
end;
class function TformImagePrintPreview.PrintNow(AGraphic: TGraphic; ANotes : string = ''): boolean;
var
form : TformImagePrintPreview;
begin
form := TformImagePrintPreview.Create(nil);
try
form.Init(AGraphic,ANotes);
result := form.ShowModal = mrOk;
finally
FreeAndNil(form);
end;
end;
end.
1
也许你忽略打印页面有事实与屏幕页面不同的分辨率。
要绘制印刷画布上的问题应该由系数相乘,像Zartog用途在他的例子:
PixPerInchX := GetDeviceCaps(bmp.Canvas.Handle, LOGPIXELSX);
PixPerInchY := GetDeviceCaps(bmp.Canvas.Handle, LOGPIXELSY);
bmp.Width := PixPerInchX * AWidth;
bmp.Height := PixPerInchY * AHeight;
这里是如何打印一个简单的教程:Printing Directly from Delphi
相关问题
- 1. 背景图像打印问题
- 2. 打印图像
- 3. 打印问题
- 4. Delphi打印底漆
- 5. Delphi打印技术
- 6. Delphi打印机。打印机不刷新
- 7. 打印PHP图像
- 8. FusionCharts打印问题
- 9. JQuery /打印问题
- 10. WPF打印问题
- 11. WebPage打印问题
- 12. WPF打印问题
- 13. QWebView:打印问题
- 14. 打印PDf问题
- 15. 打印值问题
- 16. ICEPDF打印问题
- 17. C#打印文档打印图像
- 18. 打印按钮打印附加图像
- 19. UWP打印:FontFamily,打印问题
- 20. 打印自定义视图到打印机的问题
- 21. IFRAME tiff图像打印并不打印全图像
- 22. 的Excel迷你图打印问题
- 23. 打印问题:Google地图带路线
- 24. 打印图像通过蓝牙打印机打印字符串
- 25. 打印图像c#.net
- 26. 以横向打印图像?
- 27. AS2打印外部图像
- 28. 打印Canvas图像silverlight
- 29. 从imageview打印图像
- 30. 使用javascript打印图像
能告诉你涉及的代码?如果我们看到你在做什么,它会更容易帮助。 – Argalatyr 2009-09-27 19:46:57