Page 1 of 2
Convert richview files to rtf
Posted: Thu Jul 21, 2016 7:53 am
by borax1974
Hi,
I'm a Delphi developer but not a user of RichView components. I came across a database of files with TRichView's format. I have to convert these files to rtf (more than 10.000 files).
Any recommendations, command line tools etc to convert them?
Best regards
Bora Aydemir
Posted: Thu Jul 21, 2016 9:20 pm
by Sergey Tkachenko
Do you need to convert all files in some directory?
Posted: Fri Jul 22, 2016 6:30 am
by borax1974
They are stored in a database. I will fetch, convert and store it to my database. I need help with the converting (to rtf) process. A command line tool would help. Or can I do it with the trial version of the component?
I have Delphi Seattle Prof.
Posted: Fri Jul 22, 2016 2:47 pm
by Sergey Tkachenko
Do you want to store in the same database?
It's simple: TDBRichViewEdit autodetects the field format, and saves to format specified in FieldFormat property.
So, if you want to convert all the fields, you can use the code below.
Let:
Table is a data set containing documents.
DBRVE is TDBRichViewEdit linked to this table.
Code: Select all
DBRVE.AutoDeleteUnusedStyles := True;
DBRVE.FieldFormat := rvdbRTF;
Table.First;
while not Table.EOF do
begin
Table.Edit;
DBRVE.Change;
Table.Post;
Table.Next;
end;
Posted: Mon Jul 25, 2016 7:41 am
by borax1974
Thanks Sergey,
Will I be needing a registered version for this code to run?
Posted: Mon Jul 25, 2016 11:35 am
by Sergey Tkachenko
No, a trial version can be used.
Re: Convert richview files to rtf
Posted: Thu Jun 29, 2017 2:51 pm
by edward
Sergey,
I'm using TRichView with Delphi 2007 and saving data directly in firebird 2.5 blobs. I don't use dbware components. Now, I need to convert all blobs to the Seatle version, with unicode support. There is any easy way?
Best regards,
Edward
Re: Convert richview files to rtf
Posted: Thu Jun 29, 2017 6:58 pm
by Sergey Tkachenko
I do not think that conversion is needed, if you continue using TRichView.
The component can read document saved by older versions
What's the format of documents?
1) If RTF
There is no need to do something with existing RTF documents.
They will be loaded in Unicode, if TRichView.RTFReadProperties.UnicodeMode = rvruOnlyUnicode.
There is no need to change format of the field containing RTF to Unicode: all what you get is increased data size (twice). RTF is able to contain Unicode characters even when stored in ANSI field.
2) If RVF
RVF should be stored in a binary field, allowing any type of data. It must not be stored in Unicode memo field.
RVF documents are loaded as they are, so if they contained non-Unicode text, it will be non-Unicode after loading.
So, after loading, you should convert text to Unicode, see ConvertToUnicode from
http://trichview.com/forums/viewtopic.p ... 569#p11569
Re: Convert richview files to rtf
Posted: Mon Jul 24, 2017 1:48 pm
by edward
Hi Sergey,
The RVF content stored in blob field is loaded correctly but I use fields to fill data in document, in runtime. At this moment, the content of all fields are being showed in the editor correctly, but not in the print preview. If I edit the document, the characters are transformed to "chinese characters".
I did see when the editor inserts the line feed at any position of this text inserted by tag, it is changed by chinese characters too.
Do you have any idea?
Best regards
Edward
- print_preview.png (20.49 KiB) Viewed 38844 times
- editor.png (7.24 KiB) Viewed 38844 times
Re: Convert richview files to rtf
Posted: Mon Jul 24, 2017 6:06 pm
by Sergey Tkachenko
How do you insert these fields?
Re: Convert richview files to rtf
Posted: Mon Jul 24, 2017 6:53 pm
by edward
Hi, bellow is the code:
Code: Select all
procedure TfrEditor.FillFields(RVData: TCustomRVData);
function ConvertStringToItemText(const Text: String;
UnicodeItem: Boolean; CodePage: Cardinal): TRVRawByteString;
begin
if UnicodeItem then
Result:=RVU_StringToRawByteString(Text,True,CodePage)
Result := RVU_AnsiToUnicode(CodePage, Text)
else
Result := TRVAnsiString(Text);
end;
var
i, j, r, c: Integer;
table: TRVTableItemInfo;
FieldName{, FieldValue}: string;
ParaNo: Integer;
BR, ContinuePara, Unicode: Boolean;
item: TRVTextItemInfo;
CodePage: TRVCodePage;
sr: TRVRawByteString;
s,Value: String;
StyleNo: Integer;
begin
for i := 0 to ComponentCount - 1 do
if (Components[i] is TdxBarButton) and (StrLeft(TdxBarButton(Components[i]).Name,8)='btF10Var') then
TdxBarButton(Components[i]).Description:=TdxBarButton(Components[i]).Caption;
for i := 0 to RVData.ItemCount - 1 do begin
if RVData.GetItemStyle(i) = rvsTable then begin
table := TRVTableItemInfo(RVData.GetItem(i));
for r := 0 to table.Rows.Count - 1 do
for c := 0 to table.Rows[r].Count - 1 do
if table.Cells[r, c] <> nil then
FillFields(table.Cells[r, c].GetRVData);
table.Changed;
end else if RVData.GetItemStyle(i) >= 0 then begin
FieldName := RVData.GetItemTag(i);
if AllTrim(FieldName)<>'' then begin
LoadFields(FieldName);
ParaNo := RVData.GetItemPara(i);
BR := RVData.GetItem(i).BR;
StyleNo:=RVData.GetItem(i).StyleNo;
ContinuePara := RVData.GetItem(i).SameAsPrev;
StyleNo:=RVData.GetItem(i).StyleNo;
Value := GetFieldItem(FieldName).Description;
RVData.DeleteItems(i,1);
item := RichViewTextItemClass.Create(RVData);
s := Value;
item.ParaNo := ParaNo;
item.StyleNo := StyleNo;
CodePage := RVData.GetItemCodePage2(item);
item.SameAsPrev := ContinuePara;
item.BR := BR;
sr := ConvertStringToItemText(s, True, CodePage);
item.Inserting(RVData, sr, False);
RVData.Items.InsertObject(i, sr, item);
item.Inserted(RVData,i);
end;
end;
end;
end;
Re: Convert richview files to rtf
Posted: Mon Jul 24, 2017 6:54 pm
by edward
Code: Select all
// basicly to work with Unicode
sr := ConvertStringToItemText(s, True, CodePage);
item.Inserting(RVData, sr, False);
RVData.Items.InsertObject(i, sr, item);
item.Inserted(RVData,i);
function ConvertStringToItemText(const Text: String;
UnicodeItem: Boolean; CodePage: Cardinal): TRVRawByteString;
begin
if UnicodeItem then
Result:=RVU_StringToRawByteString(Text,True,CodePage)
else
Result := TRVAnsiString(Text);
end;
Re: Convert richview files to rtf
Posted: Mon Jul 24, 2017 6:58 pm
by edward
If the entire content of the field fits in to the screen, without a line break, works fine. When the field cause a line break, ou either, the content is edited, the chinese character apears in the text. The format in database is RVF. The blob field is saved in a temp file and the file is loaded to the richedit. All its process is working fine. Only my "macro" fields, is wrong.
Best regards
Edward
Re: Convert richview files to rtf
Posted: Mon Jul 24, 2017 7:12 pm
by edward
Firebird 3.0
Character Set WIN1252
Re: Convert richview files to rtf
Posted: Tue Jul 25, 2017 1:03 pm
by edward
Sergey, the problem was solved:
Code: Select all
function ConvertStringToItemText_(const Text: String; UnicodeItem: Boolean; CodePage: Cardinal): TRVRawByteString;
begin
if UnicodeItem then
Result := RVU_GetRawUnicode(Text)
else
Result := TRVAnsiString(Text);
end;
function ConvertStringToItemText(const Text: String; RVData: TCustomRVData; StyleNo: Integer): TRVRawByteString;
begin
Result := ConvertStringToItemText_(Text, RVData.GetRVStyle.TextStyles[StyleNo].Unicode, RVData.GetStyleCodePage(StyleNo));
end;
sr := ConvertStringToItemText(s, RVData, StyleNo);
if Editor.Style.TextStyles[item.StyleNo].Unicode then
item.ItemOptions := item.ItemOptions+[rvioUnicode];
item.Inserting(RVData, sr, False);
RVData.Items.InsertObject(i, sr, item);
item.Inserted(RVData,i);