@hackage diagrams-pdf0.3.1

PDF backend for diagrams drawing EDSL

diagrams-pdf is a an HPDF backend for diagrams. Diagrams is a powerful, flexible, declarative domain-specific language for creating vector graphics, using the Haskell programming language.

diagrams-pdf is a work in progress, and some features are not implemented yet. However, it is functional enough.

Installation

cabal update && cabal install diagrams-pdf

Usage

A simple example that uses diagrams-pdf to draw a square.

import Diagrams.Prelude
import Diagrams.Backend.Pdf.CmdLine

b1 = square 20 # lw 0.002

main = defaultMain (pad 1.1 b1)

Save this to file named Square.hs and compile this program:

ghc --make Square.hs

This will generate an executable which, when run produces a Pdf file. Run the executable with the --help option to find out more about how to call it.

$ ./Square --help
Command-line diagram generation.

Square [OPTIONS]

Common flags:
  -w --width=INT    Desired width of the output image (default 400)
  -h --height=INT   Desired height of the output image (default 400)
  -o --output=FILE  Output file
  -c --compressed   Compressed PDF file
  -? --help         Display help message
  -V --version      Print version information

You must pass an output file name with a .pdf extension to generate the PDF file.

$ ./Square -o square.pdf

Limitations

Two goals of the HPDF library were : powerful typesetting and no dependence on the OS libraries (for better portability). But, HPDF was also my first big library mainly done to learn. So I had to limit myself.

As a consequence, HPDF is only using the standard fonts defined in the PDF specification. It is not (yet) possible to include and use any other fonts.

So, for diagrams it is causing a problem : the face setting has nearly no meaning. Face is currently selected from the Italic and Oblique settings. Times is the default but when oblique is chosen, Helvetica is used.

I hope to improve this in future releases.

Here is a list of the fonts in HPDF:

  • Helvetica
  • Helvetica_Bold
  • Helvetica_Oblique
  • Helvetica_BoldOblique
  • Times_Roman
  • Times_Bold
  • Times_Italic
  • Times_BoldItalic
  • Courier
  • Courier_Bold
  • Courier_Oblique
  • Courier_BoldOblique
  • Symbol
  • ZapfDingbats