PDF::Writer / railspdf - building a layout?

I'm using railspdf plugin and the pdf-writer gem. It's working really well, but I wanted to see if it were possible to create a layout template, much like normal HTML.

I tried just creating a layout file in the layouts directory but I can't include embedded ruby (erb) code. I.e. I had:

/app/views/layouts/foo.rpdf:

  pdf.select_font "Times-Roman"   pdf.text "WELCOME", :font_size => 72, :justification => :center   <%= yield %>

But that didn't work. If I took out the <%= yield %> it showed the "WELCOME" but not the content from the rendered file.

Has anyone else gotten PDF generation to work with pdf-writer (and optionally railspdf) but using a template layout as well as an action- rendered view?

Thanks,

-Danimal

I believe there is a different plugin available that lets you use standard layouts/html views, but they are rendered as pdf's, checkout http://wiki.rubyonrails.org/rails/pages/HowtoGeneratePDFs

That can be done with PrinceXML and the procedure can be found at http://sublog.subimage.com/articles/2007/05/29/html-css-to-pdf-using-ruby-on-rails

Do know that PrinceXML is commercial software and has a very hefty price tag if you’re only looking into making a few simple PDFs. That said, the results are astonishing and their support is great.

Best regards

Peter De Berdt

Hi Peter!

Thanks for the reference to PrinceXML. I think the price-tag alone will rule it out, but I'll take a look.

The thing I like about railspdf and pdf-writer is that it is very simple to use and pdf-writer is fairly mature so there are lots of controls. It's just that it's not very dry, for me, because I can't figure out how to use partials or templates with it. So each PDF I generate has a rpdf view and that view contains all the code for that PDF... and so my PDF views have a lot of redunancy between them.

For example, in my app, I want to generate PDFs for job postings, either individually or for a list. Well, the DRY way to do that would be:

1) have a display template that creates header, footer, and styles 2) have a partial to show the content for a single job posting 3) for a list of job postings, iterate and call the partial.

For HTML, this is easy, normal rails, stuff. But for the PDFrails/pdf- writer, I'm not sure how to do this (or if I even can). I can't figure out how to call partials from within the .rpdf file. And it doesn't do eruby so I can't do loops/iterations. All I have are variables, apparently.

So maybe I need to look for something else, but I'm really hopeful that I'm just missing some simple stuff with pdfrails and/or pdf- writer. Anyone out there that can help with this?

-Danimal

Jon,

Yeah, I've seen that page. Problem is, it's just a list, effectively. I suppose I could wade through them and try them out, but I would love it if someone else who has already done that could post their comparison findings. I.e. "use this or this for these needs, use that or that for these others". For example, PrinceXML seems very powerful, but expensive, so it's probably not the right fit for a small, non- commercial project... or tight-budget project. Also, I've used early versions of the HTMLDOC wrapper in the past, but it was kinda complicated to set it up.

Anyway, Jon, what plugin were you specifying in your post? (that lets you use layouts/views as normal)?

Thanks!

-Danimal

I've used pdf-writer and railspdf only for some very limited cases, just making some invoices for customers, so I can't say very much about it and may be wrong. By now I didn't come about anything that would say, that either of them runs anything through erb.(which would be a nice feature for railspdf) But of course there is always the option to use erb manually, and feed the result into railspdf. I haven't done this myself and so i'm not sure how difficult that is. I remember that there where some issues with binding your projects local variables if you don't use the render command. Maybe even render :file => "foo.rpdf" would return something useful? After all erb doesn't care of anything outside <%...%>

As you see, I can only throw in some ideas and you may have to work out the details if you find that worth trying.

Ar,

Very interesting... turns out that before I read this, I ended up doing it this way. All the model-specific rendering is done on the model. I also created a pdf_helper file that does a header and footer and some other helper-ish things.

The nice thing is that if you add railspdf to the mix, you get the respond_to. That's effectively what railspdf does (it's not a lot of code so it's easy to figure out what it's doing). And it makes the controller REALLY clean.

The only thing that I would prefer would be if I could do render partials or yields in the .rpdf template, but it looks like that is limited by how railspdf is written. Ahh well.

At least it's working and it's reasonably clean, although layout is handled by models + helpers instead of: views + partials

-Danimal