Page 4 of 5

Posted: Tue Dec 05, 2006 7:45 am
by marcpleysier
OK, it seem to work fine :-)
I will deploy on test sites tomorow.

Posted: Wed Jan 03, 2007 7:25 am
by marcpleysier
Print out is correct now. Thanks :D

But the PDF and image exports, with TExtraDevice, didn't work anymore. It seems that the correction for the print output isn't compatible with TExtraDevice export.
See my bug report at http://www.trichview.com/forums/viewtopic.php?t=1426

Posted: Tue Jan 16, 2007 8:36 pm
by marcpleysier
Sergey...

Please look at the integration with TExtraDevice :(
It doesn't work till you correct the print out issue with RB.

PDF export of RB reports is very important for us.

Posted: Thu Jan 18, 2007 11:39 am
by Sergey Tkachenko
I'll try to do it tomorrow or at the beginning of the next week. Sorry for the delay.

Posted: Sun Jan 28, 2007 7:08 pm
by marcpleysier
what week are you talking of?

Posted: Thu Feb 01, 2007 1:49 pm
by Sergey Tkachenko
For printing in images, you need to fix ppRichView.pas.
For RB7 wrapper, you need to replace TppDrawRichView.DrawTo (I marked the lines to add)

Code: Select all

procedure TppDrawRichView.DrawTo(lCanvas: TCanvas; ADrawRect: TRect);
var
  lHelper: TRVReportHelper;
  lRVStyle: TRVStyle;
  PPI: Integer;
begin
  lHelper := TRVReportHelperRef.Create(nil);
  lRVStyle := TRVStyle.Create(Nil);

  try
    if not TPPRICHVIEWUSEPRINTERRES then
      lRVStyle.TextStyles.PixelsPerInch := TPPRICHVIEWREFCANVASPPI;
    SetHelperDefaults(lHelper);
    lHelper.RichView.Style := lRVStyle;
    FStream.Position := 0;
    lHelper.RichView.LoadRVFFromStream(FStream);
    lHelper.Init(FCanvasRef, FPageWidth);
    lHelper.FormatNextPage(FPageHeight * 2);

    if Transparent then begin
       lCanvas.CopyMode    := cmSrcAnd;
    end else begin
       lCanvas.CopyMode    := cmSrcCopy;
       lCanvas.Brush.Style := bsSolid;
       lCanvas.Brush.Color := FColor;
       lCanvas.FillRect(ADrawRect);
    end;

    lCanvas.Brush.Style := bsClear;

    IntersectClipRect(lCanvas.Handle, ADrawRect.Left, ADrawRect.Top, ADrawRect.Right, ADrawRect.Bottom);

    SetMapMode(lCanvas.Handle, MM_ANISOTROPIC);
    SetWindowExtEx(lCanvas.Handle, FPageWidth, FPageHeight, Nil);
    PPI := lCanvas.Font.PixelsPerInch;
    if not TPPRICHVIEWUSEPRINTERRES then
      lCanvas.Font.PixelsPerInch := TPPRICHVIEWREFCANVASPPI
    [color=blue]else
      lCanvas.Font.PixelsPerInch := FCanvasRef.Font.PixelsPerInch;[/color]

    SetViewportExtEx(lCanvas.Handle, ADrawRect.Right - ADrawRect.Left, ADrawRect.Bottom - ADrawRect.Top, Nil);
    SetViewportOrgEx(lCanvas.Handle, ADrawRect.Left, ADrawRect.Top, Nil);
    lHelper.TransparentBackground := FTransparent;
    if not Transparent then
      lHelper.RichView.Color := Color;

    lHelper.DrawPage(1, lCanvas, True, FPageHeight);

    lCanvas.Font.PixelsPerInch := PPI;
    SetMapMode(lCanvas.Handle, MM_TEXT);
    SetViewportOrgEx(lCanvas.Handle, 0, 0, Nil);
    SelectClipRgn(lCanvas.Handle, 0);
  finally
    lHelper.Free;
    lRVStyle.Free;
  end;
end;

Posted: Thu Feb 01, 2007 1:54 pm
by Sergey Tkachenko
Do you really mean TExtraDevices (www.waler.com)?
In my version of TExtraDevices, they do not use RichView drawing procedure when exporting to PDF. Instead, it saves RichView to RTF, then draw this RTF as it draws standard RichEdit.
So changes in ppRichView drawing do not affect PDF export with TExtraDevices.

Posted: Thu Feb 01, 2007 2:42 pm
by marcpleysier
OK, it works :-)
PDF and Image exports are OK now.

Yes I use TExtraDevices 2.8, and rich texts (TRichEdit or TRichView) can be exported as plain text or as image. Not as RTF (too bad).

Posted: Tue May 08, 2007 4:08 am
by Michael Pro
Greetings!
Sergey, I've got some troubles trying to print my RichView Document with TRVPrint on HP LaserJet 1100.
The main trouble is that TRVPrint doesn't print line spacings correctly - lines on a page looks overlapped :(
How should I solve this problem?
On Rich Preview everything looks just fine, but on paper it doesn't look like WISYWIG.
PS In my editor, I didn't change any linespacing parameters in paragraphs - so it's default - measured in percents and set to 100.
PPS In my situation it seems like printing doesn't implement linespacing feature at all :(
Well, I've tested source from demos - it looks ok, but I couldn't find, why it's wrong, then I'm trying to print my docs. The only thing, that I do - I loading document from database blob and trying to print it. Maybe I need to reformat it first - or something else - but on initalization I use FormatPages method - and everything looks fine. :(
PPPS I've found, that this doesn't work with files, created in my overrided RichViewEditor. Maybe, the problem is in creating new styles and paragraphs? I didn't make them standard - is where any additional parameters needed?
Actually, I didn't make any criminal actions in creating new styles (as I think :) )
It looks like that

Code: Select all

  FHyperlinkStyle := TFontInfo.Create(nil);
  FHyperlinkStyle.Style := FHyperlinkStyle.Style + [fsUnderline];
  FHyperlinkStyle.Color := clBlue;
  FHyperlinkStyle.Jump := True;
  FHyperlinkStyle.JumpCursor := crHandPoint;
  FHyperlinkStyle.HoverColor := clWhite;
  FHyperlinkStyle.HoverBackColor := clBlue;
  FHyperlinkStyle.Protection := [rvprModifyProtect, rvprStyleProtect, rvprDoNotAutoSwitch];
  Style.TextStyles.Add;
  NewStyleNo := Style.TextStyles.Count - 1;
  Style.TextStyles[NewStyleNo].Assign(FHyperlinkStyle);
  Style.TextStyles[NewStyleNo].Standard := False;
And for ParaInfo

Code: Select all

pi.Assign(Style.ParaStyles[GetItemPara(i)]);
      pi.LeftIndent := ListLevel.MarkerIndent;
      NewStyleNo := Style.ParaStyles.FindSuchStyle(0, pi, RVAllParaInfoProperties);
      if NewStyleNo = -1 then begin
        Style.ParaStyles.Add;
        NewStyleNo := Style.ParaStyles.Count-1;
        Style.ParaStyles[NewStyleNo].Assign(pi);
        Style.ParaStyles[NewStyleNo].Standard := False;
      end;
      GetItem(i).ParaNo := NewStyleNo;
      CurParaStyleNo := NewStyleNo;

Posted: Tue May 08, 2007 7:06 am
by Sergey Tkachenko
Does the problem persist if you save document created by your program and load it in demo?
If yes, please send this document to me.

Posted: Tue May 08, 2007 7:56 am
by Michael Pro
Sergey Tkachenko wrote:Does the problem persist if you save document created by your program and load it in demo?
If yes, please send this document to me.
Well, from your demo my documents are printed wonderfully well. But I couldn't find, what can make it work so bad from my inherited class :) - everything formatted and showed in the best way. :)
I'll try to make invisible standard component on my form to assign RVData and RVStyle for printing - if nothing helps, I'll post the load method here.
In my case it looks like it printing whole document, using standard style - Arial 10 pt - for page marking and defining border of items in page.
Hyperlinks are also printed - but with strange overlapping - like they aren't text items at all.

Posted: Tue May 08, 2007 9:47 am
by Michael Pro
Well, I didn't find this bug :(
First, I thought, that rvData is not assign properly.
I've traced program in AssignSource and found that all data is assigned properly.
For example

Code: Select all

PChar(TCustomRVItemInfo(rv.RVData.Items.Objects[5]).Tag)
It's string tag in text for hyperlink - and it's seems, that all works correctly in this stage.
Despite that I'm using inherited class in my editor, I didn't noticed any troubles in a stage of variables initialization.
Styles object and RVData created correctly - but something inside of TRVPrint makes correct work impossible :(
Sergey, do you have any ideas about this situation? Your demos works perfectly - but for some reasons it won't work in my situation.
PS I've traced all stages of printing - even OnSendingToPrinter - page by page - all RVData with all links, styles and other things exists, but it printed in described way - with marking of Arial 10 pt for whole text :(
Hyperlink doesn't look marked at all.

Posted: Tue May 08, 2007 1:42 pm
by Sergey Tkachenko
May be data was converted to wrong styles BEFORE calling AssignSource?
May be you loaded/saved document using trichview that is not "allow adding styles dynamically" mode?

Posted: Tue May 08, 2007 2:44 pm
by Michael Pro
Sergey Tkachenko wrote:May be data was converted to wrong styles BEFORE calling AssignSource?
May be you loaded/saved document using trichview that is not "allow adding styles dynamically" mode?
It's sadly - but "no" for a two times.
The first thing that I've traced, was AssignSource method - before and after - it takes correct pointer to RVData and correct pointer to RVStyle :(
All flags are set properly :( I've examined this part numerous times - and it loads saved rvfs from demos correctly.
Also, I've implemented Format for RichViewEdit and FormatPages methods directly before calling Print method. But big rvf file from demo (I've converted demo.rtf to rvf) still looks totally unformatted :(
On the 10th of May I'll test my preview dialog and print setup from base RichViewEdit, not from inherited class, and shall try to print rvf documents from richview demo package.

Posted: Thu May 10, 2007 3:04 am
by Michael Pro
Sergey, I've just sent you a letter with a test form.
Please, examine it and tell, what I doing wrong.
I've made some simplifications - it only makes preview in dialog and simply prints.