0
TPrinter* prn = Printer::Printer();

TCanvas* Canvas = prn->Canvas;
String text = "Long live the king";

TFillTextFlags fTextFlag = TFillTextFlags();
prn->BeginDoc();
    TRectF rect{100, 100, 800, 800};
    Canvas->FillText(rect, text, false, 1, fTextFlag, TTextAlign::Leading, TTextAlign::Leading);
prn->EndDoc();

ShowMessage("Done Printing!");

出来的文本非常小(好像没有对 DPI 进行缩放......就像它正在打印到屏幕,而不是打印机)......我在 VCL 中尝试了上述(类似)代码,它来了出来很好...

4

1 回答 1

0

DocWiki 帮助提醒您需要在应用程序中设置打印分辨率 (DPI)。在帮助中它说:

每台打印机都有自己的以 DPI(每英寸点数)为单位的打印分辨率列表。DPICount 属性为您提供打印机支持的分辨率数量。DPI 属性是一个索引属性,可以遍历它以找出实际分辨率。ActiveDPIIndex 是 DPI 索引属性的从零开始的索引,表示打印设备上的打印分辨率。

http://docwiki.embarcadero.com/RADStudio/Rio/en/Printing_from_a_FireMonkey_Application#About_DPI_and_Driver_Support

在打印机上打印图像位图的帮助中有一个 C++Builder 示例。它向您展示了如何设置 DPI,然后设置要打印的矩形。

http://docwiki.embarcadero.com/CodeExamples/Rio/en/FMXPrinting_(C%2B%2B)

我尝试使用 10.4 Sydney 打印出 Beatles Sgt Peppers Hearts Club Band 专辑封面的位图。当我将矩形大小设置为完整的打印机页面宽度和高度时,专辑封面适合整个页面。当我将矩形大小设置为 800 x 800 时,专辑封面打印在页面左上角约一英寸处。

Printer->ActivePrinter->SelectDPI(1200, 1200);

// DestRect = TRectF(0, 0, Printer->PageWidth, Printer->PageHeight);
DestRect = TRectF(0, 0, 800, 800);

看看吧:D

于 2020-07-05T04:59:29.147 回答