WPTools Version 5, 6 or 7

Top  Previous  Next

You can use wPDF also with the new WPTools Version 7 (and also V5 or V6)  which introduces a complete rewritten RTF engine with superior RTF and HTML capabilities.

 

Outlines will created from paragraphs which use the WPAT_WPAT_ParIsOutline property. The value (>0) will be used as outline level.

 

clip0012

 

To add PDF export fast use the form TWPCreatePDF which has been implemented in unit WPToPDFDlg. This will create the form above.

 

procedure TWPTBXForm.CreatePDFClick(Sender: TObject);

var pdfcreate: TWPCreatePDF;

begin

 pdfcreate := TWPCreatePDF.Create(Self);

 pdfcreate.EditBox := WPRichText1;

try

   pdfcreate.ShowModal;

finally

   pdfcreate.Free;

end;

end;

 

 

Alternatives:

 

a) use TWPPDFExport in code.

 

uses ..., WPPDFWP, WPRTEDefs, WPCTRMemo, WPCTRRich;

 

procedure TForm1.ExportFromWPTools(Sender: TObject);

var pdf : TWPPDFExport;

begin

 pdf := TWPPDFExport.Create(nil);

 pdf.Source := WPRichText1;

try

   pdf.FileName := 'c:\wp5out.pdf';

   pdf.Print;

finally

   pdf.Free;

end;

end;

 

b) Basically the code in WPPDFWP.PAS code is based on the following example which uses the TWPPDFPrinter directly.

 

// uses WPRTEPaint, WPPDFR1, WPPDFR2;

 

procedure TForm1.ExportToPDF(Sender: TObject);

var WPPDFPrinter1: TWPPDFPrinter;

    i,w,h : Integer;

begin

   WPPDFPrinter1 := TWPPDFPrinter.Create(nil);

   WPPDFPrinter1.FileName :='c:\wptools5demo.pdf';

   WPPDFPrinter1.CompressStreamMethod := wpCompressFastFlate;

   WPPDFPrinter1.AutoLaunch := TRUE;

   WPPDFPrinter1.BeginDoc;

   try

    i := 0;

    while i<WPRichText1.CountPages do

    begin

       w := MulDiv(WPRichText1.Memo._PaintPages[i].WidthTw,WPScreenPixelsPerInch,1440);

       h := MulDiv(WPRichText1.Memo._PaintPages[i].HeightTw,WPScreenPixelsPerInch,1440);

       if (w=0or (h=0then

       begin

           w := Round( WPRichText1.Memo.PaintPageWidth[i] / WPRichText1.Memo.CurrentZooming );

           h := Round( WPRichText1.Memo.PaintPageHeight[i] / WPRichText1.Memo.CurrentZooming );

       end;

       WPPDFPrinter1.StartPage( w, h, Screen.PixelsPerInch, Screen.PixelsPerInch, 0);

       try

         // Use 0 as w and h to let the function calculate the width and height

         WPRichText1.Memo.PaintRTFPage(i,0,0,0,0,WPPDFPrinter1.Canvas, [wppWhiteIsTransparent,wppInPaintForwPDF] );

       finally

         WPPDFPrinter1.EndPage;

       end;

       inc(i);

    end;

   finally

    WPPDFPrinter1.EndDoc;

    WPPDFPrinter1.Free;

   end;

end;

 

To create watermarks simply add additional code which prints on the  WPPDFPrinter1.Canvas.

 

Or you can easily print 2 pages on the same PDF page, just make changes in 4 lines:

 

var WPPDFPrinter1: TWPPDFPrinter;

   i, w, h : Integer;

begin

  WPPDFPrinter1 := TWPPDFPrinter.Create(nil);

  WPPDFPrinter1.FileName :='c:\wptools5demo.pdf';

  WPPDFPrinter1.CompressStreamMethod := wpCompressFastFlate;

  WPPDFPrinter1.AutoLaunch := TRUE;

  WPPDFPrinter1.BeginDoc;

  try

   i := 0;

  while i<WPRichText1.CountPages do

  begin

         w := MulDiv(WPRichText1.Memo._PaintPages[i].WidthTw,WPScreenPixelsPerInch,1440);

         h := MulDiv(WPRichText1.Memo._PaintPages[i].HeightTw,WPScreenPixelsPerInch,1440);

         if (w=0or (h=0then

         begin

           w := Round( WPRichText1.Memo.PaintPageWidth[i] / WPRichText1.Memo.CurrentZooming );

           h := Round( WPRichText1.Memo.PaintPageHeight[i] / WPRichText1.Memo.CurrentZooming );

         end;

        WPPDFPrinter1.StartPage(w, h div 2,

        Screen.PixelsPerInch, Screen.PixelsPerInch, 0);

      try

        // Use 0 as w and h to let the function calculate the width and height

        WPRichText1.Memo.PaintRTFPage(i,0,0,w div 2,h div 2,WPPDFPrinter1.Canvas, [] );

        WPRichText1.Memo.PaintRTFPage(i+1,w div 2,0,w div 2,h div 2,

                   WPPDFPrinter1.Canvas, [wppInPaintForwPDF] );

      finally

        WPPDFPrinter1.EndPage;

      end;

      inc(i,2);

  end;

  finally

   WPPDFPrinter1.EndDoc;

   WPPDFPrinter1.Free;

  end;

end;

 

This is a screenshot of a PDF file created with the above code:

 

clip0006clip0007clip0011clip0008clip0009