网站首页 > 技术文章 正文
在软件开发中,打印功能是几乎每个企业级应用必须具备的。 在 Lazarus / FreePasca l中打印很容易。 但是,需要遵循一些必需的步骤。
必须执行如下操作才可以正确使用打印机:
- 将 Printer4Lazarus 包增加到系统中
- 引用打印机单元 【Printers】.
- 使用现有打印机
将 Printer4Lazarus 包添加到项目中
Printer4Lazarus 包定义了基本打印机,并提供了独立于系统的打印,因此可在任何系统上打印。
Lazarus IDE 中执行如下操作:
- 菜单栏 工程 - 工程查看器. 会弹出工程查看器窗口 需要的包. 默认 需要的包 包含 LCL 包.
- 点击工程查看器顶部的加号 添加 按钮。
- 打开 新建需要 选项。
- 在 包名 列表框中选择 Printer4Lazarus.
- 点击 确定.
- Printer4Lazarus 这个包就被添加到 工程查看器 。
引用打印单元
步骤很简单,看下面的样例,其实就是Uses Printers:
unit MainUnit;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Printers;
使用已有打印机对象
加入要点击按钮打印一段文字. 在窗体上放置一个按钮名为 PrintBtn 在 OnClick 事件中使用如下代码实现:
procedure TForm1.PrintBtnClick(Sender: TObject);
const
LEFTMARGIN = 100;
HEADLINE = 'I Printed My Very First Text On ';
var
YPos, LineHeight, VerticalMargin: Integer;
SuccessString: String;
begin
with Printer do
try
BeginDoc;
Canvas.Font.Name := 'Courier New';
Canvas.Font.Size := 10;
Canvas.Font.Color := clBlack;
LineHeight := Round(1.2 * Abs(Canvas.TextHeight('I')));
VerticalMargin := 4 * LineHeight;
// There we go
YPos := VerticalMargin;
SuccessString := HEADLINE + DateTimeToStr(Now);
Canvas.TextOut(LEFTMARGIN, YPos, SuccessString);
finally
EndDoc;
end;
end;
从 begin 到 end; 详细发生如下:
- Printer.BeginDoc 开始打印,其实是开始修改打印的内容, 直到 Printer.EndDoc; 出现,才真正开始打印。
- Printer 使用 Canvas 绘制输出内容,页面才最终显示在打印页上, Canvas.Font 是 canvas 的输出字体 ,也就是说,TextOut 将使用我们的设置来输出文本内容。
- 在画布上绘制的所有内容都必须使用坐标进行定位。 因此,我们计算了 “LineHeight” 以垂直放置文本。 可以对水平位置执行相同的操作,这里我将其命名为 “LEFTMARGIN”。
- 通过TextOut 调用绘制文本。
- 这些所有的结果都通过 Printer.EndDoc最终来执行。
示例
实现一个打印文本和打印图片的程序,在 ListBox 中显示系统中所有的打印机,用户选择打印机后在打印机上输出。程序界面如下:
首先,创建一个 Application 应用程序,在窗体上放置一个 ListBox,命名为 PrinterListBox,用于显示系统中所有的打印机,然后放置两个按钮,分别命名为:PrintTextButton 和 PrintPictureButton。
在 Form 的单元文件中 uses 中增加:
Printers, Printer4Lazarus
Form 的 OnCreate 事件代码:
procedure TForm1.FormCreate(Sender: TObject);
begin
if (Printer = nil) or (Printer.Printers.Count <= 0) then Exit;
PrinterListBox.Items:=Printer.Printers;
PrinterListBox.ItemIndex:=Printer.PrinterIndex;
end;
打印文本按钮的单击事件:
procedure TForm1.PrintTextButtonClick(Sender: TObject);
begin
if PrinterListBox.ItemIndex < 0 then Exit;
Printer.SetPrinter(PrinterListBox.Items[PrinterListBox.ItemIndex]);
Printer.begindoc;
Printer.Canvas.Font.Name := '微软雅黑';
Printer.Canvas.Font.Size := 14;
Printer.Canvas.Font.Color := clBlack;
Printer.canvas.moveto(0, 0);
Printer.canvas.lineto(300, 300);
Printer.canvas.textout(300, 300, '打印文字');
Printer.enddoc;
end;
打印图片按钮的单击事件:
procedure TForm1.PrintPictureButtonClick(Sender: TObject);
var
ABitmap: TBitmap;
begin
if PrinterListBox.ItemIndex < 0 then Exit;
Printer.SetPrinter(PrinterListBox.Items[PrinterListBox.ItemIndex]);
Printer.begindoc;
ABitmap:=TBitmap.Create;
ABitmap.LoadFromFile('test.bmp');
// Printer.Canvas.Draw(0, 0, ABitmap);
Printer.Canvas.StretchDraw(Printer.Canvas.ClipRect, ABitmap);
Printer.enddoc;
ABitmap.Free;
end;
事先准备好图片。
文本打印效果:
图片打印效果:
- 上一篇: 「3D效果图」法线贴图的正确使用方法和技巧
- 下一篇: 游戏画面绘图 透明特效的制作方法
猜你喜欢
- 2024-12-28 游戏画面绘图 透明特效的制作方法
- 2024-12-28 Android 性能优化工具篇:如何使用 DDMS 中的 TraceView 工具
- 2024-12-28 「3D效果图」法线贴图的正确使用方法和技巧
- 2024-12-28 TF Lite Model Maker: 构建安卓图片分类器
- 2024-12-28 用户界面控件Xtreme Calendar发布v17.0.0
- 2024-12-28 UG各版本安装时出现报警问题及解决方法
- 2024-12-28 记本人使用人工智能辅助编程的实践
- 2024-12-28 6.1 用Bitmap实现精确去重 bitmap字符串去重
- 2024-12-28 MFC常用函数与指令 mfcformat函数
- 2024-12-28 MFC中双缓冲技术 双缓冲技术java
- 02-21走进git时代, 你该怎么玩?_gits
- 02-21GitHub是什么?它可不仅仅是云中的Git版本控制器
- 02-21Git常用操作总结_git基本用法
- 02-21为什么互联网巨头使用Git而放弃SVN?(含核心命令与原理)
- 02-21Git 高级用法,喜欢就拿去用_git基本用法
- 02-21Git常用命令和Git团队使用规范指南
- 02-21总结几个常用的Git命令的使用方法
- 02-21Git工作原理和常用指令_git原理详解
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)