2010. január 18., hétfő
How to create and insert a *.wmf into an *.rtf file
Problem/Question/Abstract:
How to create and insert a *.wmf into an *.rtf file
Answer:
Well, create a metafile with the old wmf format (with enhanced = false). Code like this works:
{ ... }
var
f: TPicture;
c: TMetafileCanvas;
fs: TMemoryStream;
begin
f := TPicture.create;
f.Metafile.width := 100;
f.Metafile.height := 100;
f.Metafile.Enhanced := false;
c := TMetafileCanvas.create(f.Metafile, 0);
c.Ellipse(5, 5, 95, 95);
c.Free;
end;
Get the bytes of the metafile, put in a buffer and call this function:
procedure TRtfWriter.InsertWMFFromBuffer(Buffer: PByte; const BufLen: integer;
iWidth, iHeight: integer);
var
wmfTag: string;
HexEncoded: string;
i: integer;
begin
HexEncoded := '';
for i := 0 to BufLen - 1 do
begin
HexEncoded := HexEncoded + IntToHex(Buffer^, 2);
Inc(Buffer);
end;
{You gotta skip the wmf header}
HexEncoded := Copy(HexEncoded, (Sizeof(LongInt) + Sizeof(SmallInt) + Sizeof(TSmallRect) +
Sizeof(Word) + Sizeof(LongInt) + Sizeof(Word)) * 2 + 1,
Length(HexEncoded));
HexEncoded := LowerCase(HexEncoded);
wmfTag := '{\pict\wmetafile8\picw%d\pich%d %s }';
wmfTag := Format(wmfTag, [iWidth * 20, iHeight * 20, HexEncoded]);
fStream.Write(wmfTag[1], Length(wmfTag));
end;
Note that fStream is a stream with the rtf file my TRtfWriter class is working on. You'll have to the the rtf job yourself, but that's the way to inser a wmf file. If you want a quick test, place this on the top of the file:
{\rtf1\ansi\ansicpg1252\deff0\deflang1046{\fonttbl{\f0\fswiss\fprq2\fcharset
0 Verdana;}{\f1\fswiss\fcharset0 Arial;} {\f2\fmodern\fprq1\fcharset0
Courier New;}}\viewkind4\uc1
and this on the bottom
\par}
Feliratkozás:
Megjegyzések küldése (Atom)
Nincsenek megjegyzések:
Megjegyzés küldése