Hi, I would like to serve a custom dynamically generated PDF file, what is the best option ? Use a DocumentHandler ? If yes how ?
Annick
Hi Annick,
you basically need to respond with a file:
WACurrentRequestContext value respond: [:response | response document: aDocument. ]
aDocument would be something that responds to #seasideMimeDocument (like ByteArray, String, or WAMimeDocument). In #document: you’ll also find all the methods you could/should sent to the response to configure the response.
I’d suggest you create your own WARequestHandler subclass, register it and handle your requests there.
Kind Regards Karsten
—
Georg Heeg eK
Wallstraße 22 06366 Köthen
Tel.: 03496/214328 FAX: 03496/214712 Amtsgericht Dortmund HRA 12812
Am 2. Juni 2020 um 11:20:47, Annick Fron (list@afceurope.commailto:list@afceurope.com) schrieb:
Hi, I would like to serve a custom dynamically generated PDF file, what is the best option ? Use a DocumentHandler ? If yes how ?
Annick _______________________________________________ seaside mailing list seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
If instead of setting a callback on an anchor, you set a document, it will be treated slightly different.
E.g.
You can do something like:
html anchor document: documentContents mimeType: ( Seaside.WAMimeType main: 'application' sub: 'pdf' ) fileName: 'YourFile.pdf'; with: 'Download PDF'
This will be handled differently to a regular action continuation of a callback and will trigger the download immediately, also the document will be returned as a response to never expire.
In some cases you want to use `document:` and in others it could be more flexible to use a regular `respond:` from the WACurrentRequestContext (e.g. if the decision on the file format or other things are deep down in the logic, away from the anchor).
E.g.
WACurrentRequestContext value respond: [:response | response attachmentWithFileName: self exportedFilename , '.pdf'; doNotCache; contentType: ( Seaside.WAMimeType main: 'application' sub: 'pdf' ); binary; nextPutAll: pdfContents; respond ]
Or directly pass an instance of WAMimeDocument to the response.
WACurrentRequestContext value respond: [:response | response document: aWAMimeDocument ]
Best regards,
Esteban A. Maringolo
On Tue, Jun 2, 2020 at 6:20 AM Annick Fron list@afceurope.com wrote:
Hi, I would like to serve a custom dynamically generated PDF file, what is the best option ? Use a DocumentHandler ? If yes how ?
Annick _______________________________________________ seaside mailing list seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Hi Esteban,
This is the solution that I will use, thank you all for your answers !
For your records, I just use the cairo library to draw the PDF.
By the way, is anybody using the Bootstrap library with seaside ?
Annick
Le 2 juin 2020 à 13:47, Esteban Maringolo emaringolo@gmail.com a écrit :
If instead of setting a callback on an anchor, you set a document, it will be treated slightly different.
E.g.
You can do something like:
html anchor document: documentContents mimeType: ( Seaside.WAMimeType main: 'application' sub: 'pdf' ) fileName: 'YourFile.pdf'; with: 'Download PDF'
This will be handled differently to a regular action continuation of a callback and will trigger the download immediately, also the document will be returned as a response to never expire.
In some cases you want to use `document:` and in others it could be more flexible to use a regular `respond:` from the WACurrentRequestContext (e.g. if the decision on the file format or other things are deep down in the logic, away from the anchor).
E.g.
WACurrentRequestContext value respond: [:response | response attachmentWithFileName: self exportedFilename , '.pdf'; doNotCache; contentType: ( Seaside.WAMimeType main: 'application' sub: 'pdf' ); binary; nextPutAll: pdfContents; respond ]
Or directly pass an instance of WAMimeDocument to the response.
WACurrentRequestContext value respond: [:response | response document: aWAMimeDocument ]
Best regards,
Esteban A. Maringolo
On Tue, Jun 2, 2020 at 6:20 AM Annick Fron list@afceurope.com wrote:
Hi, I would like to serve a custom dynamically generated PDF file, what is the best option ? Use a DocumentHandler ? If yes how ?
Annick _______________________________________________ seaside mailing list seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
seaside mailing list seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
I am using both BS3 and BS4 (in a newer application). In both cases using Torsten's wrapper:
BS3: https://github.com/astares/Seaside-Bootstrap BS4: https://github.com/astares/Seaside-Bootstrap4
Regards!
Esteban A. Maringolo
On Tue, Jun 2, 2020 at 9:47 AM Annick Fron list@afceurope.com wrote:
Hi Esteban,
This is the solution that I will use, thank you all for your answers ! For your records, I just use the cairo library to draw the PDF. By the way, is anybody using the Bootstrap library with seaside ? Annick
Le 2 juin 2020 à 13:47, Esteban Maringolo emaringolo@gmail.com a écrit :
If instead of setting a callback on an anchor, you set a document, it will be treated slightly different.
E.g.
You can do something like:
html anchor document: documentContents mimeType: ( Seaside.WAMimeType main: 'application' sub: 'pdf' ) fileName: 'YourFile.pdf'; with: 'Download PDF'
This will be handled differently to a regular action continuation of a callback and will trigger the download immediately, also the document will be returned as a response to never expire.
In some cases you want to use `document:` and in others it could be more flexible to use a regular `respond:` from the WACurrentRequestContext (e.g. if the decision on the file format or other things are deep down in the logic, away from the anchor).
E.g.
WACurrentRequestContext value respond: [:response | response attachmentWithFileName: self exportedFilename , '.pdf'; doNotCache; contentType: ( Seaside.WAMimeType main: 'application' sub: 'pdf' ); binary; nextPutAll: pdfContents; respond ]
Or directly pass an instance of WAMimeDocument to the response.
WACurrentRequestContext value respond: [:response | response document: aWAMimeDocument ]
Best regards,
Esteban A. Maringolo
On Tue, Jun 2, 2020 at 6:20 AM Annick Fron list@afceurope.com wrote:
Hi, I would like to serve a custom dynamically generated PDF file, what is the best option ? Use a DocumentHandler ? If yes how ?
Annick _______________________________________________ seaside mailing list seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
seaside mailing list seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
seaside mailing list seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Hi Esteban,
I have tried your code
html anchor document: documentContents mimeType: ( Seaside.WAMimeType main: 'application' sub: 'pdf' ) fileName: 'YourFile.pdf'; with: 'Download PDF’
but the issue is that it generates the file when the page is created, and not when the user clicks.
So I have derived a new class DelayedDocumentHandler that takes a GRDelayedSend instead of a string or binary, and generates the document only if needed by evaluating the Delayed send. I have added also delayedDocument:mimeType:fileName: on HtmlAnchorTag.
Annick
Le 2 juin 2020 à 15:04, Esteban Maringolo emaringolo@gmail.com a écrit :
I am using both BS3 and BS4 (in a newer application). In both cases using Torsten's wrapper:
BS3: https://github.com/astares/Seaside-Bootstrap BS4: https://github.com/astares/Seaside-Bootstrap4
Regards!
Esteban A. Maringolo
On Tue, Jun 2, 2020 at 9:47 AM Annick Fron list@afceurope.com wrote:
Hi Esteban,
This is the solution that I will use, thank you all for your answers ! For your records, I just use the cairo library to draw the PDF. By the way, is anybody using the Bootstrap library with seaside ? Annick
Le 2 juin 2020 à 13:47, Esteban Maringolo emaringolo@gmail.com a écrit :
If instead of setting a callback on an anchor, you set a document, it will be treated slightly different.
E.g.
You can do something like:
html anchor document: documentContents mimeType: ( Seaside.WAMimeType main: 'application' sub: 'pdf' ) fileName: 'YourFile.pdf'; with: 'Download PDF'
This will be handled differently to a regular action continuation of a callback and will trigger the download immediately, also the document will be returned as a response to never expire.
In some cases you want to use `document:` and in others it could be more flexible to use a regular `respond:` from the WACurrentRequestContext (e.g. if the decision on the file format or other things are deep down in the logic, away from the anchor).
E.g.
WACurrentRequestContext value respond: [:response | response attachmentWithFileName: self exportedFilename , '.pdf'; doNotCache; contentType: ( Seaside.WAMimeType main: 'application' sub: 'pdf' ); binary; nextPutAll: pdfContents; respond ]
Or directly pass an instance of WAMimeDocument to the response.
WACurrentRequestContext value respond: [:response | response document: aWAMimeDocument ]
Best regards,
Esteban A. Maringolo
On Tue, Jun 2, 2020 at 6:20 AM Annick Fron list@afceurope.com wrote:
Hi, I would like to serve a custom dynamically generated PDF file, what is the best option ? Use a DocumentHandler ? If yes how ?
Annick _______________________________________________ seaside mailing list seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
seaside mailing list seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
seaside mailing list seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
seaside mailing list seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Hi Annick,
Yes, the #document: registers a callback with that content "ahead of time" (it is, before it is clicked), it is meant to be used when you already know the contents, and ideally don't instantiate it several times.
That's why for dynamically created docs you just use the other approach, an anchor with a callback that does something like:
html anchor callback: [WACurrentRequestContext value respond: [:response | response document: self buildWAMimeDocument ]]; with: 'Generate and and download'
Regards,
Esteban A. Maringolo
On Thu, Jun 4, 2020 at 1:00 PM Annick Fron list@afceurope.com wrote:
Hi Esteban,
I have tried your code
html anchor document: documentContents mimeType: ( Seaside.WAMimeType main: 'application' sub: 'pdf' ) fileName: 'YourFile.pdf'; with: 'Download PDF’
but the issue is that it generates the file when the page is created, and not when the user clicks.
So I have derived a new class DelayedDocumentHandler that takes a GRDelayedSend instead of a string or binary, and generates the document only if needed by evaluating the Delayed send. I have added also delayedDocument:mimeType:fileName: on HtmlAnchorTag.
Annick
Le 2 juin 2020 à 15:04, Esteban Maringolo emaringolo@gmail.com a écrit :
I am using both BS3 and BS4 (in a newer application). In both cases using Torsten's wrapper:
BS3: https://github.com/astares/Seaside-Bootstrap BS4: https://github.com/astares/Seaside-Bootstrap4
Regards!
Esteban A. Maringolo
On Tue, Jun 2, 2020 at 9:47 AM Annick Fron list@afceurope.com wrote:
Hi Esteban,
This is the solution that I will use, thank you all for your answers ! For your records, I just use the cairo library to draw the PDF. By the way, is anybody using the Bootstrap library with seaside ? Annick
Le 2 juin 2020 à 13:47, Esteban Maringolo emaringolo@gmail.com a écrit :
If instead of setting a callback on an anchor, you set a document, it will be treated slightly different.
E.g.
You can do something like:
html anchor document: documentContents mimeType: ( Seaside.WAMimeType main: 'application' sub: 'pdf' ) fileName: 'YourFile.pdf'; with: 'Download PDF'
This will be handled differently to a regular action continuation of a callback and will trigger the download immediately, also the document will be returned as a response to never expire.
In some cases you want to use `document:` and in others it could be more flexible to use a regular `respond:` from the WACurrentRequestContext (e.g. if the decision on the file format or other things are deep down in the logic, away from the anchor).
E.g.
WACurrentRequestContext value respond: [:response | response attachmentWithFileName: self exportedFilename , '.pdf'; doNotCache; contentType: ( Seaside.WAMimeType main: 'application' sub: 'pdf' ); binary; nextPutAll: pdfContents; respond ]
Or directly pass an instance of WAMimeDocument to the response.
WACurrentRequestContext value respond: [:response | response document: aWAMimeDocument ]
Best regards,
Esteban A. Maringolo
On Tue, Jun 2, 2020 at 6:20 AM Annick Fron list@afceurope.com wrote:
Hi, I would like to serve a custom dynamically generated PDF file, what is the best option ? Use a DocumentHandler ? If yes how ?
Annick _______________________________________________ seaside mailing list seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
seaside mailing list seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
seaside mailing list seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
seaside mailing list seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
seaside mailing list seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Thank you Esteban
Le 4 juin 2020 à 18:26, Esteban Maringolo emaringolo@gmail.com a écrit :
Hi Annick,
Yes, the #document: registers a callback with that content "ahead of time" (it is, before it is clicked), it is meant to be used when you already know the contents, and ideally don't instantiate it several times.
That's why for dynamically created docs you just use the other approach, an anchor with a callback that does something like:
html anchor callback: [WACurrentRequestContext value respond: [:response | response document: self buildWAMimeDocument ]]; with: 'Generate and and download'
Regards,
Esteban A. Maringolo
On Thu, Jun 4, 2020 at 1:00 PM Annick Fron list@afceurope.com wrote:
Hi Esteban,
I have tried your code
html anchor document: documentContents mimeType: ( Seaside.WAMimeType main: 'application' sub: 'pdf' ) fileName: 'YourFile.pdf'; with: 'Download PDF’
but the issue is that it generates the file when the page is created, and not when the user clicks.
So I have derived a new class DelayedDocumentHandler that takes a GRDelayedSend instead of a string or binary, and generates the document only if needed by evaluating the Delayed send. I have added also delayedDocument:mimeType:fileName: on HtmlAnchorTag.
Annick
Le 2 juin 2020 à 15:04, Esteban Maringolo emaringolo@gmail.com a écrit :
I am using both BS3 and BS4 (in a newer application). In both cases using Torsten's wrapper:
BS3: https://github.com/astares/Seaside-Bootstrap BS4: https://github.com/astares/Seaside-Bootstrap4
Regards!
Esteban A. Maringolo
On Tue, Jun 2, 2020 at 9:47 AM Annick Fron list@afceurope.com wrote:
Hi Esteban,
This is the solution that I will use, thank you all for your answers ! For your records, I just use the cairo library to draw the PDF. By the way, is anybody using the Bootstrap library with seaside ? Annick
Le 2 juin 2020 à 13:47, Esteban Maringolo emaringolo@gmail.com a écrit :
If instead of setting a callback on an anchor, you set a document, it will be treated slightly different.
E.g.
You can do something like:
html anchor document: documentContents mimeType: ( Seaside.WAMimeType main: 'application' sub: 'pdf' ) fileName: 'YourFile.pdf'; with: 'Download PDF'
This will be handled differently to a regular action continuation of a callback and will trigger the download immediately, also the document will be returned as a response to never expire.
In some cases you want to use `document:` and in others it could be more flexible to use a regular `respond:` from the WACurrentRequestContext (e.g. if the decision on the file format or other things are deep down in the logic, away from the anchor).
E.g.
WACurrentRequestContext value respond: [:response | response attachmentWithFileName: self exportedFilename , '.pdf'; doNotCache; contentType: ( Seaside.WAMimeType main: 'application' sub: 'pdf' ); binary; nextPutAll: pdfContents; respond ]
Or directly pass an instance of WAMimeDocument to the response.
WACurrentRequestContext value respond: [:response | response document: aWAMimeDocument ]
Best regards,
Esteban A. Maringolo
On Tue, Jun 2, 2020 at 6:20 AM Annick Fron list@afceurope.com wrote:
Hi, I would like to serve a custom dynamically generated PDF file, what is the best option ? Use a DocumentHandler ? If yes how ?
Annick _______________________________________________ seaside mailing list seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
seaside mailing list seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
seaside mailing list seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
seaside mailing list seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
seaside mailing list seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
seaside mailing list seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
seaside@lists.squeakfoundation.org