PDF generator

classic Classic list List threaded Threaded
8 messages Options
Reply | Threaded
Open this post in threaded view
|

PDF generator

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.
_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: PDF generator

codz
awesome , many thanks
_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: [Lazarus] PDF generator

Roberto Padovani
In reply to this post by Michael Van Canneyt
Great!
Are metadata included ?

Thanks,

 R.

2016-03-05 18:27 GMT+01:00 Michael Van Canneyt <[hidden email]>:
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
[hidden email]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus


_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: PDF generator

Graeme Geldenhuys-6
In reply to this post by Michael Van Canneyt
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.


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
_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: PDF generator

Michael Van Canneyt


On Fri, 18 Mar 2016, Graeme Geldenhuys wrote:

> 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.
_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: [Lazarus] PDF generator

Graeme Geldenhuys-6
In reply to this post by Roberto Padovani
On 2016-03-06 07:35, Roberto P. wrote:
> Are metadata included ?

If you mean information like Author, Creation Date, PDF Producer,
Application Name, Title etc then the answer is yes.

Regards,
  - Graeme -

_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: PDF generator

Peter
In reply to this post by Michael Van Canneyt
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?

Peter
_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: PDF generator

Michael Van Canneyt


On Fri, 18 Mar 2016, Peter wrote:

> 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.
_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal