|
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.
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=0) or (h=0) then 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=0) or (h=0) then 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:
|