Blog
All Blog Posts | Next Post | Previous PostGenerating PDF files cross-platform with ease
Thursday, December 22, 2016
With the new 1.7 release of the TMS FNC UI Pack we've added a completely new PDF library built from the ground up, that is capable of generating PDF files on all supported frameworks (FMX, VCL, LCL). Via all supported frameworks, you can easily target minimum 5 different operating systems: Windows, macOS, iOS, Android, Linux (&Raspbian),.. To introduce this new PDF library I've written a small tutorial to start generating your own PDF files. Getting Started To get started with the PDF library, add the FMX.TMSFNCPDFLib, VCL.TMSFNCPDFLib or LCLTMSFNCPDFLib depending on the chosen framework. The PDF library class is called TTMSFNCPDFLib, and the code is shareable between the three supported frameworks. Starting a new document Starting a new document can be file-based, or TMemoryStream-based. To start a new document, call the BeginDocument function. The BeginDocument always needs to be paired with EndDocument, which is responsible for writing the contents to a file or TMemoryStream. When the AFileName parameter in the BeginDocument call is empty, the contents will be written to a TMemoryStream, returned by the EndDocument call. The EndDocument call also has an additional parameter to allow opening the generated PDF file in the default PDF reader application.procedure TForm1.GeneratePDF(AFileName: string); var p: TTMSFNCPDFLib; begin p := TTMSFNCPDFLib.Create; try p.BeginDocument(AFileName); p.EndDocument; finally p.Free; end; end;
procedure TForm1.GeneratePDF(AFileName: string); var p: TTMSFNCPDFLib; begin p := TTMSFNCPDFLib.Create; try p.BeginDocument(AFileName); p.NewPage; p.EndDocument; finally p.Free; end; end;
procedure TForm1.GeneratePDF(AFileName: string); var p: TTMSFNCPDFLib; begin p := TTMSFNCPDFLib.Create; try p.BeginDocument(AFileName); p.NewPage; p.Graphics.Stroke.Color := gcRed; p.Graphics.Stroke.Width := 3; p.Graphics.Stroke.Kind := gskDashDotDot; p.Graphics.Fill.Kind := gfkGradient; p.Graphics.Fill.Color := gcBlue; p.Graphics.Fill.ColorTo := gcOrange; p.Graphics.DrawRectangle(RectF(10, 50, 100, 150)); p.EndDocument(True); finally p.Free; end; end;
procedure TForm1.GeneratePDF(AFileName: string); var p: TTMSFNCPDFLib; begin p := TTMSFNCPDFLib.Create; try p.BeginDocument(AFileName); p.NewPage; p.Graphics.Font.Name := 'Segoe UI'; p.Graphics.Font.Size := 16; p.Graphics.Font.Color := gcRed; p.Graphics.Font.Style := [TFontStyle.fsBold]; p.Graphics.DrawText('Hello World !', PointF(10, 50)); p.EndDocument(True); finally p.Free; end; end;
procedure TForm1.GeneratePDF(AFileName: string); var p: TTMSFNCPDFLib; s: string; r: TRectF; begin p := TTMSFNCPDFLib.Create; try s := 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry''s standard dummy'+ 'text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. '+ 'It has survived not only five centuries, but also the leap into electronic typeset'+ 'ting,
remaining essentiallyunchanged. It'+ ' was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with des'+ 'ktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.'; p.BitmapContainer := TMSFNCBitmapContainer1; p.BeginDocument(AFileName); p.NewPage; p.Graphics.Font.Name := 'Arial'; p.Graphics.Font.Size := 10; p.Graphics.Fill.Color := gcNull; r := RectF(10, 50, 300, 400); p.Graphics.DrawHTMLText(s, r); p.EndDocument(True); finally p.Free; end; end;
Pieter Scheldeman
This blog post has received 6 comments.
2. Monday, January 20, 2020 at 7:52:33 PM
What *exact* problem do you experience?
Bruno Fierens
3. Tuesday, March 30, 2021 at 4:12:57 PM
Hello,
Does someone know with an ttmsFNCGrid, how to export his content into a pdf and give it information as pagenumber (for example 1/20) on each page and alsofixed colums on each page.
I tried to use TTMSFNCGridPDFIO and give it my grid, but the options pdf.Options.RepeatFixedColumns doesn''t work
Thanks
Does someone know with an ttmsFNCGrid, how to export his content into a pdf and give it information as pagenumber (for example 1/20) on each page and alsofixed colums on each page.
I tried to use TTMSFNCGridPDFIO and give it my grid, but the options pdf.Options.RepeatFixedColumns doesn''t work
Thanks
lagire
4. Tuesday, March 30, 2021 at 6:17:59 PM
You can set the page number with TTMSFNCGridPDFIO.Options.PageNumber and the format with TTMSFNCGridPDFIO.Options.PageNumberFormat.
It is at this moment not possible to display the total page count in the page number as this is not precalculated for performance reasons.
It is at this moment not possible to display the total page count in the page number as this is not precalculated for performance reasons.
Bruno Fierens
5. Saturday, December 25, 2021 at 12:16:03 PM
Can TTMSFNCPDFLib export pdf page as bitmap ?
Bilal Al-Hamad
6. Sunday, June 12, 2022 at 6:42:47 AM
Hi,
Can this be used to convert a WORD containing fill forms (doc/docx) to PDF?
Can this be used to convert a WORD containing fill forms (doc/docx) to PDF?
Stef Merlijn
All Blog Posts | Next Post | Previous Post
Mark Richards