使用Delphi填写使用富文本(rtf)文件制作的表格模板

时间:2011-07-25 19:48:09

标签: delphi delphi-2010

我有一个rtf(富文本格式)文件格式的表格。

我想知道是否可以在运行时将不同的内容放入单元格中。

这是截图。某些空白字段需要填入值。

screenshot

3 个答案:

答案 0 :(得分:4)

你写了“有些空白字段需要编辑” - 如果这意味着RTF是某种模板,其中空字段需要以编程方式填写,这就是我要做的:

  • 使用文本编辑器打开RTF文档(例如OpenOffice或MS Word)
  • 在$ field1 $,$ field2 $ ...
  • 等空字段中插入特殊占位符字符串
  • 保存文档
  • 在您的Delphi应用程序中
  • ,将RTF加载到一个字符串中(例如使用TStringlist)
  • 使用Delphi字符串函数查找并使用实际值替换特殊占位符字符串

答案 1 :(得分:2)

要在一张纸上打印表单,只需在打印机的画布​​上绘图!

procedure TForm1.Button1Click(Sender: TObject);
var
  y, Margin, Col2: integer;
  LineHeight: integer;
begin
  with TPrintDialog.Create(nil) do
    try
      if not Execute then
        Exit;
    finally
      Free;
    end;

  Printer.BeginDoc;

  Printer.Title := 'Sample Form';
  Printer.Canvas.Font.Name := 'Arial';
  Printer.Canvas.Font.Size := 11;

  Margin := 5*Printer.Canvas.TextWidth('M');
  Col2 := 35*Printer.Canvas.TextWidth('M');
  LineHeight := 3 * Printer.Canvas.TextHeight('M') div 2;

  y := Margin;

  Printer.Canvas.Font.Style := [fsBold];
  Printer.Canvas.TextOut(MARGIN, y, 'Name: ');
  Printer.Canvas.Font.Style := [];
  Printer.Canvas.TextOut(Col2, y, 'Andreas Rejbrand');

  inc(y, LineHeight);

  Printer.Canvas.Font.Style := [fsBold];
  Printer.Canvas.TextOut(MARGIN, y, 'Age: ');
  Printer.Canvas.Font.Style := [];
  Printer.Canvas.TextOut(Col2, y, '23');

  inc(y, LineHeight);

  Printer.Canvas.Font.Style := [fsBold];
  Printer.Canvas.TextOut(MARGIN, y, 'Nationality: ');
  Printer.Canvas.Font.Style := [];
  Printer.Canvas.TextOut(Col2, y, 'Swedish');

  Printer.EndDoc;

end;

结果:http://privat.rejbrand.se/sampledrawing.pdf

答案 2 :(得分:1)

要在TRichEdit中使用现有RTF内容,请将其加载到组件的Text或Lines属性中:

RichEdit1.Lines.LoadFromFile(rtfFilename);

-OR -

RichEdit1.Text := StringILoadedFromAnRtfFileOnDisk;

我不确定您要做什么(以编程方式创建或修改基于某些现有未指定的RTF内容的表,打印它等)。通过询问丰富的编辑,并询问常规编辑,这很难理解。

您在评论中询问如何在TRichEdit中创建表格:

procedure TForm1.PutTableIntoRichEdit;
begin
  RichEdit1.Text := '{\rtf1\ansi\deff0'#13#10+
'\trowd'#13#10+
'\cellx1000'#13#10+
'\cellx2000'#13#10+
'\cellx3000'#13#10+
'cell 1\intbl\cell'#13#10+
'cell 2\intbl\cell'#13#10+
'cell 3\intbl\cell'#13#10+
'\row'#13#10+
'}' ;
end;

如果您想在上面显示的屏幕截图中使用该RTF内容,在您的delphi程序中,只需加载它并尝试一些东西,并询问一个特定的问题。向我们展示微软单词的屏幕截图并不能帮助您解决问题。