网站首页 > 技术文章 正文
在软件开发中,打印功能是几乎每个企业级应用必须具备的。 在 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
- 1509℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 530℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 494℃MySQL service启动脚本浅析(r12笔记第59天)
- 473℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 470℃启用MySQL查询缓存(mysql8.0查询缓存)
- 451℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 430℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 427℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)