Convert richview files to rtf

General TRichView support forum. Please post your questions here
borax1974
Posts: 3
Joined: Thu Jul 21, 2016 7:44 am

Convert richview files to rtf

Post 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
Sergey Tkachenko
Site Admin
Posts: 17236
Joined: Sat Aug 27, 2005 10:28 am
Contact:

Post by Sergey Tkachenko »

Do you need to convert all files in some directory?
borax1974
Posts: 3
Joined: Thu Jul 21, 2016 7:44 am

Post 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.
Sergey Tkachenko
Site Admin
Posts: 17236
Joined: Sat Aug 27, 2005 10:28 am
Contact:

Post 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;
borax1974
Posts: 3
Joined: Thu Jul 21, 2016 7:44 am

Post by borax1974 »

Thanks Sergey,

Will I be needing a registered version for this code to run?
Sergey Tkachenko
Site Admin
Posts: 17236
Joined: Sat Aug 27, 2005 10:28 am
Contact:

Post by Sergey Tkachenko »

No, a trial version can be used.
edward
Posts: 7
Joined: Thu Jun 29, 2017 2:35 pm

Re: Convert richview files to rtf

Post 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
Sergey Tkachenko
Site Admin
Posts: 17236
Joined: Sat Aug 27, 2005 10:28 am
Contact:

Re: Convert richview files to rtf

Post 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
edward
Posts: 7
Joined: Thu Jun 29, 2017 2:35 pm

Re: Convert richview files to rtf

Post 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
print_preview.png (20.49 KiB) Viewed 34951 times
editor.png
editor.png (7.24 KiB) Viewed 34951 times
Sergey Tkachenko
Site Admin
Posts: 17236
Joined: Sat Aug 27, 2005 10:28 am
Contact:

Re: Convert richview files to rtf

Post by Sergey Tkachenko »

How do you insert these fields?
edward
Posts: 7
Joined: Thu Jun 29, 2017 2:35 pm

Re: Convert richview files to rtf

Post 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;
Last edited by edward on Mon Jul 24, 2017 7:00 pm, edited 2 times in total.
edward
Posts: 7
Joined: Thu Jun 29, 2017 2:35 pm

Re: Convert richview files to rtf

Post 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;
Last edited by edward on Mon Jul 24, 2017 7:01 pm, edited 1 time in total.
edward
Posts: 7
Joined: Thu Jun 29, 2017 2:35 pm

Re: Convert richview files to rtf

Post 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
edward
Posts: 7
Joined: Thu Jun 29, 2017 2:35 pm

Re: Convert richview files to rtf

Post by edward »

Firebird 3.0
Character Set WIN1252
edward
Posts: 7
Joined: Thu Jun 29, 2017 2:35 pm

Re: Convert richview files to rtf

Post 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);
Post Reply