Stories
Slash Boxes
Comments
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

use Perl Log In

Log In

[ Create a new account ]

Matts (1087)

Matts
  (email not shown publicly)

I work for MessageLabs [messagelabs.com] in Toronto, ON, Canada. I write spam filters, MTA software, high performance network software, string matching algorithms, and other cool stuff mostly in Perl and C.

Journal of Matts (1087)

Tuesday February 05, 2002
05:31 AM

PDFLib

[ #2660 ]

I spent all yesterday evening adding graphics primitives support into PDFLib.pm, my OO layer over pdflib_pl.pm - the perl module that ships with pdflib. Despite the fact that pdflib isn't quite open source (It's the Aladdin public license), it's probably the best option for producing PDFs in Perl, being XS/C based it's very fast and lightweight.

Unfortunately PAUSE seems to be down, or not responding for me, so you'll have to wait to get your hands on it.

The reason I started hacking on PDFLib again was that I needed string_width (which is a core pdflib function), and once I'd added that I noticed a few other things I wanted to clean up, and then it just started snowballing. I'm at the point now where PDFLib almost covers all of the core pdflib functions, with the exception of some of the linking/embedding options, and the PDI (PDF Import) stuff, which would be nice to have for editing PDFs, but you have to pay for that. I may download the demo though and play with it a bit.

Anyway, I keep digressing...

I need string_width because I'm trying to do something that's proving very hard indeed - how to layout centred or right-aligned text that may or may not mix different fonts, styles and so on. And do it based on a stream (this is from XML, so I may see a bold title, but I get that as separate chunks). I think it can be done, by using a stack of what I have to layout, and lay things out a line at a time, based on working out the string_width of a word at a time. But it's probably one of the harder things I've ever tackled. But it's always good to learn new things, so in a way I'm quite looking forward to this.

The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
 Full
 Abbreviated
 Hidden
More | Login | Reply
Loading... please wait.
  • I've done some pretty extensive work w/ pdflib and really like it. I have also made extensive use of the string_width function but for different uses. In my case, I'm laying out business cards and the address has to fit into a finite space. So I check the width at the curent font size w/ string_width, and if it's too large I incrementally shink the font size until it fits. Automatic abbreviation of Avenue, Boulevard, etc helps too. :-)

    I'll have to check out PDFLib.pm and see how it works and if it would b

    --
    "Perl users are the Greatful Dead fans of computer science." --slashdot comment
    • It uses 4.x I'm afraid.

      I'm not sure about "slick", but I much prefer an OO view of the world, where instead of typing PDF_foo($pdf, options), you type $pdf->foo(options). Just makes more sense to me. Plus it takes care of things like ending pages for you so you don't have to - pdflib really doesn't like it if you do something in the wrong order, so PDFLib.pm *tries* to accommodate that.
      • Oh well. I'll definitely look into it more if/when I upgrade. Since I haven't bought a license yet, maybe soon is a good time to upgrade. :-)

        OO certainly makes sense for some things, and I think pdflib is definitely one of them. I'm interested in learning more about the auto page ending feature. Guess it's time to look at the docs, or have you released that code yet?

        --
        "Perl users are the Greatful Dead fans of computer science." --slashdot comment
  • I fell in love with it when I used the PHP interface. Once again matts++ for working on da sexy bomb shit. (gnat-- for failure to maintain hipness in the face of aging)

    I'll just note that the string_width() problem is the first running jump onto the waterslide of formatting that ends up with you reimplementing TeX in Perl without the shitty fonts.

    --Nat

    • Hey I *like* the TeX fonts!

      Seriously though, I got it working. It was much easier than I thought it would be. I suspect it would be nice to extend it so I could setup some sort of bounding box object, and allow the user to just print into that and have the wrapping sorted. But that's for another day.
    • Speaking of which, if anyone has a way of getting TeX to use OpenType fonts (with proper small caps, Old style figures for running text etc), I'd really, really like to know about it...
  • I was just playing with pdflib last week and was thinking that a OO interface would be neat. :-)
    --

    -- ask bjoern hansen [askbjoernhansen.com], !try; do();