Page 1 of 1
Doc Thumbnail
Posted: Sat Apr 01, 2023 12:27 pm
by standay
Hi Sergey,
Is there a "built-in" or simple way to generate a small thumbnail image of a given rvf file? I've searched and so far have not discovered anything for this. I'd like to be able to generate a small thumbnail that I could insert into the rve I'm using.
Thanks Sergey
Stan
Re: Doc Thumbnail
Posted: Tue Apr 18, 2023 7:35 pm
by Sergey Tkachenko
Sorry for the delay.
You can use TRVReportHelper to draw a document into bitmap of the specified size.
Like this:
Code: Select all
function MakeBitmap(const FileName: String; Width, Height: Integer): TBitmap;
var rvh: TRVReportHelper;
Stream: TFileStream;
bmp : TBitmap;
begin
Result := nil;
bmp := nil;
try
bmp := TBitmap.Create;
bmp.Width := Width;
bmp.Height := Height;
rvh := TRVReportHelper.Create(nil);
try
rvh.RichView.Style := TRVStyle.Create(rvh);
rvh.RichView.RVFTextStylesReadMode := rvf_sInsertMerge;
rvh.RichView.RVFParaStylesReadMode := rvf_sInsertMerge;
rvh.RichView.RVFOptions := rvh.RichView.RVFOptions + [rvfoIgnoreUnknownPicFmt,
rvfoIgnoreUnknownCtrls, rvfoConvUnknownStylesToZero,
rvfoConvLargeImageIdxToZero, rvfoLoadBack, rvfoLoadLayout];
Stream := TFileStream.Create(FileName, fmOpenRead);
try
rvh.RichView.LoadRVFFromStream(Stream)
finally
Stream.Free;
end;
rvh.Init(bmp.Canvas, Width);
rvh.FormatNextPage(Height);
if rvh.Finished and (rvh.GetLastPageHeight<Height) then
begin
// remove this code if you need a bitmap exactly Width x Height
Height := rvh.GetLastPageHeight;
bmp.Height := Height;
end;
rvh.DrawPage(1, bmp.Canvas, True, Height);
finally
rvh.Free;
end;
Result := bmp;
except
bmp.Free;
end;
end;
Probably, it makes sense to create this bitmap larger than the thumbnail size, and stretch-draw it to thumbnail.
You can use RVThumbnailMaker object from RVThumbMaker unit.
Code: Select all
function MakeThumbnail(const FileName: String; Width, Height: Integer): TBitmap;
var
bmp: TBitmap;
const
Ratio = 3;
begin
Result := nil;
bmp := MakeBitmap('c:\Docs\test.rvf', Width * Ratio, Height * Ratio);
if bmp = nil then
exit;
Result := RVThumbnailMaker.MakeThumbnail(bmp, bmp.Width div Ratio, bmp.Height div Ratio);
bmp.Free;
end;
Re: Doc Thumbnail
Posted: Tue Apr 18, 2023 8:48 pm
by standay
Thanks Sergey, I'll give this a try. No problem on the delay, not an urgent thing.
Stan
Re: Doc Thumbnail
Posted: Sun Jun 18, 2023 12:02 pm
by standay
Sergey,
I finally had a chance to implement this and it works. I use some rvf files as "covers" (i.e., a little text with a big central image) in my app. Creating thumbnails of the files in my covers folder lets me select files visually in the open dialog which is much better than just seeing filenames.
Any chance of a system DLL that would let Windows explorer show previews of rvf files in all explorer windows?
Thanks again Sergey!
Stan