Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-pascal / 2016-03

PDF generator

8 messages · 5 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Michael Van Canneyt

Hi,

I have committed a PDF generator to FPC Subversion: fcl-pdf.

Why a new pascal PDF generator ?
Mainly because the existing ones written in Object Pascal suffer from several disadvantages:
- Font support usually incomplete or downright buggy.
- Dependency on a GUI (LCL, VCL, Windows).
The latter is important because the PDFs must be generated on a headless (no display) webserver.

So, the fcl-pdf package contains a PDF generating unit fppdf that does not depend on any external libraries or GUI system.

The PDF generator has the following features:
- Support for basic shapes.
- Support for basic line styles.
- Dictionary support.
- Multi-page PDF.
- Image support.
- TTF Font support.
- Font embedding.
- Unicode font support.
- Stream Compression.
- Image embedding.
- Several paper types.
- Portrait/Landscape.
- Support for multiple measurement units.
- Rotation matrix system.
- PDF creator information.
- The generated PDF passes several PDF validators.

The library is based on a library that came with FPGUI, with a feature set which came closest to what I desired. It was completed for the company I work for by Graeme Geldenhuys, and is heavily unit tested.

It is not yet feature-complete, but the above should be ample for most applications.

In the near future, I expect to commit a reporting engine which, likewise, does not need a GUI (but can use one) and uses the PDF generator as one possible backend.

Todo:
- Implement TFPCustomCanvas descendent (TPDFCanvas) that draws on a PDF. (should allow easy integration in LCL)
- Partial embedding of (unicode) fonts (only used glyphs) for smaller PDFs.
- On windows (possibly mac), allow to use native font mechanisms for extracting info from TTF files.
- Reduce memory usage by streaming finished pages to file.

Optionally:
- PDF Forms ?
- Archive format ?
- Signatures ?

Enjoy,

I would welcome additional tests/demos, suggestions, bugreports, improvements or patches.

Michael.

Reply by email

Roberto P.
to Michael Van Canneyt: I have committed a PDF generator to FPC Subversion: fcl-pdf. Why a new pascal PDF…

Great!
Are metadata included ?

Thanks,

R.

2016-03-05 18:27 GMT+01:00 Michael Van Canneyt :

Show quoted text 72 lines
Hi, I have committed a PDF generator to FPC Subversion: fcl-pdf. Why a new pascal PDF generator ? Mainly because the existing ones written in Object Pascal suffer from several disadvantages: - Font support usually incomplete or downright buggy. - Dependency on a GUI (LCL, VCL, Windows). The latter is important because the PDFs must be generated on a headless (no display) webserver. So, the fcl-pdf package contains a PDF generating unit fppdf that does not depend on any external libraries or GUI system. The PDF generator has the following features: - Support for basic shapes. - Support for basic line styles. - Dictionary support. - Multi-page PDF. - Image support. - TTF Font support. - Font embedding. - Unicode font support. - Stream Compression. - Image embedding. - Several paper types. - Portrait/Landscape. - Support for multiple measurement units. - Rotation matrix system. - PDF creator information. - The generated PDF passes several PDF validators. The library is based on a library that came with FPGUI, with a feature set which came closest to what I desired. It was completed for the company I work for by Graeme Geldenhuys, and is heavily unit tested. It is not yet feature-complete, but the above should be ample for most applications. In the near future, I expect to commit a reporting engine which, likewise, does not need a GUI (but can use one) and uses the PDF generator as one possible backend. Todo: - Implement TFPCustomCanvas descendent (TPDFCanvas) that draws on a PDF. (should allow easy integration in LCL) - Partial embedding of (unicode) fonts (only used glyphs) for smaller PDFs. - On windows (possibly mac), allow to use native font mechanisms for extracting info from TTF files. - Reduce memory usage by streaming finished pages to file. Optionally: - PDF Forms ? - Archive format ? - Signatures ? Enjoy, I would welcome additional tests/demos, suggestions, bugreports, improvements or patches. Michael. -- _______________________________________________ Lazarus mailing list http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply by email

Graeme Geldenhuys
to Michael Van Canneyt: I have committed a PDF generator to FPC Subversion: fcl-pdf. Why a new pascal PDF…
Michael Van Canneyt wrote
I have committed a PDF generator to FPC Subversion: fcl-pdf.

Michael. Is the fcl-pdf/utils/* really needed? As far as I can see that code is obsolete now that fpPDF can embedding TTF files directly. The usage of .fnt files are not used any more.

If that directory gets removed, then the associated unit test for DejaVuSans.fnt should be removed too.

Regards,
- Graeme -

fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal http://fpgui.sourceforge.net/ My public PGP key: http://tinyurl.com/graeme-pgp

Reply by email

Michael Van Canneyt
to Graeme Geldenhuys
Graeme Geldenhuys wrote 10 lines
On 2016-03-05 17:27, Michael Van Canneyt wrote: > > I have committed a PDF generator to FPC Subversion: fcl-pdf. Michael. Is the fcl-pdf/utils/* really needed? As far as I can see that code is obsolete now that fpPDF can embedding TTF files directly. The usage of .fnt files are not used any more. If that directory gets removed, then the associated unit test for DejaVuSans.fnt should be removed too.

Good point. I will remove it.

Michael.

Reply by email

Michael Van Canneyt
to Peter
Peter wrote 9 lines
On 05/03/16 17:27, Michael Van Canneyt wrote: > Hi, > > I have committed a PDF generator to FPC Subversion: fcl-pdf. > Hi Michael, What's the input format? html?

Object Pascal Code.

Michael.

Reply by email