You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将TAdvRichEditor中编程绘制的Canvas内容导出为PDF?

解决TAdvRichEditor Canvas绘制内容无法通过TAdvRichEditorPDFIO导出PDF的问题

问题核心

直接操作TAdvRichEditor.Canvas绘制的内容仅属于控件的界面临时绘制,并未被纳入编辑器的文档模型中。而TAdvRichEditorPDFIO是基于编辑器的内部文档结构生成PDF,因此无法识别这些临时绘制的内容。

解决方案

方法1:插入图形对象到编辑器文档

将需要绘制的内容先绘制到TGraphic对象(如TBitmap)中,再将该图形对象插入到编辑器的文档里,这样内容会被编辑器的文档模型管理,导出PDF时就能被正常识别。

示例代码:

var
  DrawBitmap: TBitmap;
begin
  DrawBitmap := TBitmap.Create;
  try
    // 设置画布尺寸
    DrawBitmap.Width := 300;
    DrawBitmap.Height := 200;
    
    // 在Bitmap画布上绘制内容
    DrawBitmap.Canvas.Font.Size := 12;
    DrawBitmap.Canvas.TextOut(5, 5, 'TEST');
    DrawBitmap.Canvas.MoveTo(10, 10);
    DrawBitmap.Canvas.LineTo(200, 200);
    
    // 将绘制好的Bitmap插入到编辑器中
    advRichEditor1.InsertGraphic(DrawBitmap);
  finally
    DrawBitmap.Free;
  end;
end;

方法2:利用编辑器的自定义绘图事件(可选)

如果需要保留动态绘制的逻辑,可以使用TAdvRichEditor的OnDrawPage或OnDrawParagraph事件进行绘制。但需要确认TAdvRichEditorPDFIO在导出过程中会触发这些事件(部分版本可能支持)。不过这种方式的可靠性不如插入图形对象,因为依赖导出组件对事件的支持。

验证

执行上述方法后,绘制的内容会成为编辑器文档的一部分,此时使用TAdvRichEditorPDFIO导出PDF,这些内容会和手动输入的文本一样被正常导出。

内容的提问来源于stack exchange,提问作者Jsk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 18:32:40