- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 BitBlt 将 Printer.Canvas 捕获为位图。然后我想获取该位图并将其显示在油漆盒上。然而,当我尝试这样做时,我只得到一个与我为 Bitmap.SetSize 输入的值成比例的白色矩形。我的打印输出看起来正确,所以我几乎肯定打印机的 Canvas 已正确绘制。我尝试使用变量位图作为目标和绘画框作为源来编写以下代码(本质上,我正在将一个简单的矩形和文本行绘制到绘画框,将其位 block 转换为位图,清除它,然后将其发布回到颜料盒),但现在 Printer.Canvas.Handle 是它不显示的源。
我知道屏幕和打印机之间的尺寸不同,因此我会清楚地标明尺寸,以防万一我做错了。
procedure TForm2.btnDrawClick(Sender: TObject);
begin
Printer.BeginDoc;
Printer.Canvas.Font.Size := 10; //Not Sure if this is necessary
Printer.Canvas.Font.Name := 'Arial'; //Not Sure if this is necessary
Printer.Canvas.Font.Color := clBlack; //Not Sure if this is necessary
Printer.Canvas.Rectangle(100,100,200,200); //Should print very tiny to paper
//But will look bigger when posted to
//The Paintbox
Printer.Canvas.TextOut(120,120,'XRay-Cat');
PCBitmap.SetSize(Paintbox1.Width,Paintbox1.Height); //Paint box is 300W,300H
Application.ProcessMessages;
BitBlt(PCBitmap.Canvas.Handle, //PCBitmap, is created on create, freed on destroy,
//Defined in the private section
0,
0,
PCBitmap.Width, //300
PCBitmap.Height, //300
Printer.Canvas.Handle,
0,
0,
SRCCOPY);
Application.ProcessMessages;
Printer.EndDoc;
procedure TForm2.btnPostBMClick(Sender: TObject);
begin
PaintBox1.Canvas.Draw(0,0,PCBitmap);
end;
我希望 Canvas 也能被写入, Canvas 将被复制到位图,然后可以在油漆盒上绘制。然而我看到的只是一个白色的矩形。我将位图的尺寸设置为整个颜料盒而不是打印机的整个 Canvas 。我这样做是因为如果我理解正确的话,我应该只在打印机 Canvas 的 TopLeft 0,0 和 BottomRight 300,300 之间进行绘制,就像在我的油漆盒上一样。我希望看到与直接在 Paintbox 中执行此操作相同的结果。
任何帮助将不胜感激。提前致谢。
鉴于我收到的评论,我想做的事情似乎是不可能的。我想做的是写入打印机 Canvas ,然后获取该 Canvas 的图像数据并将其存储在位图中。既然 BitBlt 不能使用,有没有办法做我想做的事?我认为不是,因为我被告知 Printer.Canvas 无法读取。此时我已经找到了解决方法,但我只是好奇。
最佳答案
切换你的逻辑...绘制到 PaintBox...并打印 PaintBox
procedure TForm55.Button1Click(Sender: TObject);
var
a_BM: TBitMap;
begin
a_BM := TBitmap.Create;
try
PaintBox1.Canvas.Font.Size := 10; //Not Sure if this is necessary
PaintBox1.Canvas.Font.Name := 'Arial'; //Not Sure if this is necessary
PaintBox1.Canvas.Font.Color := clBlack; //Not Sure if this is necessary
PaintBox1.Canvas.Rectangle(0,0,300,300); //Should print very tiny to paper
//But will look bigger when posted to
//The Paintbox
PaintBox1.Canvas.TextOut(120,120,'XRay-Cat');
PaintBox1.Width := 300;
PaintBox1.Height := 300;
a_BM.SetSize(PaintBox1.Width, PaintBox1.Height);
BitBlt(a_BM.Canvas.Handle, 0, 0, a_BM.Width, a_BM.Height, PaintBox1.Canvas.Handle, 0, 0, SRCCOPY);
Application.ProcessMessages;
Printer.BeginDoc;
Printer.Canvas.Draw(a_BM.Canvas.ClipRect.Left, a_BM.Canvas.ClipRect.Top, a_BM);
Printer.EndDoc;
Application.ProcessMessages;
finally
a_BM.Free;
end;
end;
关于delphi - BitBlt Printer.Canvas 到 TBitMap 显示为纯白色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17816270/
我创建了一个 Delphi 服务,负责将 QuckReports 打印到 Printer.Printers 列表中包含的特定打印机。我将打印机名称传递给例程,然后它在 Printer.printers
powershell "get-content foo.txt|Out-Printer" 只要 foo.txt 是英文的,一切都很好(大部分情况下) 如果 foo.txt 包含 unicode 字符,
我将几个zpl文件发送到打印机进行测试,并且工作正常。 之后,我从UPS接收base64编码的zpl数据,并创建一个文件并通过Java小程序将其发送到打印机,现在我发送给它的任何zpl命令或文件都无济
我想在 ZPL 代码中注释行,例如: ^XA ^MMT ^LL0531 ^PW1280 ^LS0 ^FT81,528^A0B,29,28^FH\^FDTEXT^FS //
显然不是: use strict; use warnings; use Data::Printer; my @values = 1 .. 99; p @values[0..9]; 退货 10 docu
我使用 Zebra Designer 创建标签。但是我有一个问题来居中我的元素。 事实上,当我用 Zebra Designer 创建一个文本框时,它有一个固定的长度,当我替换里面的文本时(例如通过一个
我正在使用 Zebra MZ320 打印机来集成黑标。当黑标设置为True时,我面临问题。在纸张上遇到黑标后,打印机进纸2-3行 用于成功校准黑标的命令: ! DF CONFIG.SYS
我正在开发一个 chrome 应用程序,它需要经常与打印机通信,因此我将直接向打印机发送数据而无需打印对话框,因为该 chrome 提供 chrome.printerProvider API。但 ap
我刚刚修改了 Zebra 打印机的标签。我几乎完成了它,但我目前停留在第一行,我在多个站点上阅读了不同的主题,但没有任何帮助我得到我想要的东西。我们的标签是10cm高15cm宽,下面一行需要从中间到边
我知道这很容易解决,但我已经为此奋斗了一个小时。我需要不断从用户那里获取单词,直到他们输入“退出”并将其写入进程中的文件中。但问题是,它出现了“输入单词:”,但是当我输入它并按回车键时,它不会接受它,
我正在尝试在我的打印机 CANON MB5000 上使用 java print 打印一个文本文件。它适用于 Linux 但不适用于 Windows。在 Windows 上,这里支持文档风格: for
我想测试 IPP 应该具备的一些功能(即监控印象数;参见 this question),但我还没有得到硬件。我如何模拟这样的打印机?是否有虚拟 IPP 打印机的代码? 我将在 Linux 或 Wind
从标题可以看出,这个问题过去已经讨论过。我已将之前的帖子作为引用,并尝试在 Zebra 标签打印机上打印位图图像。我无法打印我正在寻找的图像。请不要忽略,因为它已经讨论过了。 请查看下面提到的代码片段
我正在使用 Crystal Reports 将订单打印到 KOT 打印机。我有四台不同的 KOT 打印机。根据分配的相应打印机名称打印项目。 这工作正常,但为了提高打印速度,我选中了“无打印机”选项。
我正在使用 Zebra GT800 标签打印机,标签角色大小为 2.5' * 1.75'。我正在努力使用 ZPL 命令将其调整为内部标签。我尝试使用在 ZPL 的用户指南中阅读的粗体文本中的几个值,但
我的客户端在使用旧的 Brother 打印机从 JAVA 应用程序打印时遇到问题。他得到的异常(exception)是“打印机不接受作业”。 其他应用程序(不是 java 应用程序)设法使用这些打印机
如何为“文本”添加换行符?比如说: Hello World 会变成 Hello World 无论如何,我可以为我的代码添加一个换行符吗? ^FT78,76^A0N,28,28^FH\^FDHello\
当执行powershell cmdlet Get-Printer时,我很好奇它从何处获取信息。它依靠WMI吗?它会解析注册表吗?我遇到过Get-Printer的响应不同于Windows设备和打印机控制
我正在将 ZPL 代码传递给 Zebra 打印机。在这个 ZPL 代码中,我有一部分会生成二维码。 QR 码的值来 self 在为 WM6.5 开发的移动应用程序中使用条形码扫描功能获得的字符串。扫描
我有一卷 5.1cm x 1.6cm(每行两个)的标签,我需要在每行上打印两个不同的标签(expected result),但是 ZPL 格式的打印命令只打印一个标签并送入下一个标签,将相邻的标签留空
我是一名优秀的程序员,十分优秀!