Printing - via rendering to static HTML file and prince CSS?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Printing - via rendering to static HTML file and prince CSS?

Sophie424
How would I go about doing a #renderContentOn: run re-directed to a
disk-based html file? I am looking for an easy way to print to nice PDF, and
apparently
  xhtml->Prince CSS
is a good option.

Any other suggestions welcome as well.

Thanks - Sophie



_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

RE: Printing - via rendering to static HTML file and princeCSS?

Boris Popov, DeepCove Labs (SNN)
Here's a rough sketch of how we do it in-memory before feeding the XHTML
to PDFReactor for conversion (apologies for formatting),

Component>>asPDF
| handler response |
handler := WARenderContinuation root: (PDFRoot for: self).
response := WAResponse new.
handler context: (WARenderingContext new session: self session;
actionUrl: WAUrl new; yourself).
handler processRendering: response.
^(PDFClient default convertXHTML: response contents contents) pDF.

This returns PDF bytes that you can send back to the client with
something like,

savePDF
self
        downloadBytes: (self report asPDF: self contact)
        mime: 'application/pdf'
        filename: ('Accounts <1s>.pdf' expandMacrosWith: (Core.Date
today printUsing: 'yyyy-mm-dd')).

And here's all the other supporting stuff to make it work, its somewhat
specific to what we do, but you should get an idea anyway,

Component>>asPDF: contact
^self application rootComponent pdfSessionFor: contact do: [self asPDF]

RootComponent class>>pdfSessionFor: contact do: block
^self
        sessionFor: contact
        do: block
        isPDF: true.

RootComponent class>>sessionFor: contact do: block isPDF: boolean
^WACurrentSession value
        ifNil:
                [| session |
                session := (self sessionClass new)
                                                isPDF: boolean;
                                                setParent: self
application;
                                                attachContact: contact;
                                                branding:
BrandingPacNet;
                                                yourself.
                [WACurrentSession
                        use: session
                        during: block] ensure: [session expire]]
        ifNotNil:
                [:session |
                | old |
                old := session isPDF.
                session isPDF: boolean.
                block ensure: [session isPDF: old]].


PDFRoot class>>for: aComponent
^(self new)
        component: aComponent;
        yourself

PDFRoot>>children
^Array with: component.

PDFRoot>>component: anObject
component := anObject.

renderContentOn: html
 html render: self component.

updateRoot: root
root initialize.
root beXhtml10Strict.
root style add: (Styles default documentForFile: 'print.css').
root style add: self session branding default print.
root style add: 'svg {-ro-replacedelement:
''com.realobjects.xml.formatters.SVGFormatter'';}'.

Component>>downloadBytes: bytes mime: mime filename: filename
| handler |
handler := WADocumentHandler document: bytes mimeType: mime fileName:
filename.
^self session returnResponse: handler response

Hope this helps,

-Boris

--
+1.604.689.0322
DeepCove Labs Ltd.
4th floor 595 Howe Street
Vancouver, Canada V6C 2T5
http://tinyurl.com/r7uw4

[hidden email]

CONFIDENTIALITY NOTICE

This email is intended only for the persons named in the message
header. Unless otherwise indicated, it contains information that is
private and confidential. If you have received it in error, please
notify the sender and delete the entire message including any
attachments.

Thank you.

> -----Original Message-----
> From: [hidden email] [mailto:seaside-
> [hidden email]] On Behalf Of itsme213
> Sent: Friday, March 14, 2008 7:28 AM
> To: [hidden email]
> Subject: [Seaside] Printing - via rendering to static HTML file and
> princeCSS?
>
> How would I go about doing a #renderContentOn: run re-directed to a
> disk-based html file? I am looking for an easy way to print to nice
PDF,

> and
> apparently
>   xhtml->Prince CSS
> is a good option.
>
> Any other suggestions welcome as well.
>
> Thanks - Sophie
>
>
>
> _______________________________________________
> seaside mailing list
> [hidden email]
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside

_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: Printing - via rendering to static HTML file andprinceCSS?

Sophie424
"Boris Popov" <[hidden email]> wrote in message

> ...
> Hope this helps

I am quite sure it will, once I understand the code. Thanks very much!

Sophie



_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside