Creating PDFs
Anvil Forms can be converted to PDFs with a single function call. You might do this in order to attach a PDF to an email, print a PDF, or allow your users to download a PDF.
Converting a Form to a PDF
You can convert Forms to PDFs by calling anvil.pdf.render_form()
in server code. Pass in the name of the Form you wish to print as a string.
If the Form takes any arguments to its __init__
method, you can pass these in as extra arguments to render_form()
(this is exactly like calling open_form()
):
# In server code
import anvil.pdf
@anvil.server.callable
def create_zaphod_pdf():
media_object = anvil.pdf.render_form('Form1', 42, name='Zaphod')
return media_object
The return value of render_form()
is a Media object. This means you can download it in client code:
# In client code
import anvil.media
def download_zaphod_pdf(self):
media_object = anvil.server.call('create_zaphod_pdf')
anvil.media.download(media_object)
You can attach it to an email:
@anvil.server.callable
def send_pdf_email():
anvil.email.send(
from_name="The Zaphod Generator",
to="shaun@anvil.works",
subject="An auto-generated Zaphod",
text="Your auto-generated Zaphod is attached to this email as a PDF.",
attachments=anvil.pdf.render_form('Form1', 42, name='Zaphod')
)
You can also store it in a Data Table:
app_tables.my_pdfs.add_row(
added=datetime.now(),
owner=anvil.users.get_user(),
pdf=anvil.pdf.render_form('Form1', 42, name='Zaphod'),
)
You could store it in Google Drive too. Anything you can do with a Media Object, you can do with your PDF file!
Customising settings
You can adjust the image quality, page settings, margins or generated filename for your PDF by instantiating a PDFRenderer()
, and calling its render_form()
method:
from anvil.pdf import PDFRenderer
pdf = PDFRenderer(page_size='A4').render_form('Form1')
You may specify the following arguments to the PDFRenderer()
constructor:
-
filename
(string): The name of the generated PDF file. (Default:"print.pdf"
). -
landscape
(True
orFalse
): Generate a PDF in landscape orientation. (Default:False
). -
page_size
(string or tuple): Can be the name of a standard page size ("letter"
or"A0"
-"A10"
), or a tuple of(width, height)
in centimetres. (Default:"letter"
). -
margins
(dict or number): Page margins (in centimetres), as a dictionary specifying margins on each side (eg{'top': 1.0, 'bottom': 1.0, 'left': 1.0, 'right': 1.0}
) or as a number specifying a global margin. (Default1.0
). -
scale
(number): The scale (zoom level) at which you are printing. (Default1.0
). -
quality
(string): The quality of the generated PDF, which has a large impact on file size (Default"default"
). Available values are:"original"
: All images will be embedded at original resolution. Output file can be very large."screen"
: Low-resolution output similar to the Acrobat Distiller “Screen Optimized” setting."printer"
: Output similar to the Acrobat Distiller “Print Optimized” setting."prepress"
: Output similar to Acrobat Distiller “Prepress Optimized” setting."default"
: Output intended to be useful across a wide variety of uses, possibly at the expense of a larger output file.
Do you still have questions?
Our Community Forum is full of helpful information and Anvil experts.