Conas comhaid PDF a chruthúLink to this heading

Míníonn an doiciméad seo conas comhaid PDF a aschur go dinimiciúil ag úsáid radhairc Django Is féidir é seo a dhéanamh leis an leabharlann PDF ReportLab Python foinse oscailte den scoth.

Is é an buntáiste a bhaineann le comhaid PDF a ghiniúint go dinimiciúil ná gur féidir leat PDFanna saincheaptha a chruthú chun críocha éagsúla -- abair, d'úsáideoirí éagsúla nó do phíosaí éagsúla ábhair.

Mar shampla, úsáideadh Django ag kusports.com chun lúibíní comórtais NCAA saincheaptha, atá cairdiúil don phriontáil a ghiniúint, mar chomhaid PDF, do dhaoine a ghlac páirt i gcomórtas March Madness.

Suiteáil ReportLabLink to this heading

<reportlab>Is é leabharlann ReportLab: pypi: ar fáil ar PyPI `. Tá `treoir úsáideora `_ (ní comhtharlach, comhad PDF) ar fáil le híoslódáil freisin. Is féidir leat ReportLab a shuiteáil le ``pip`:

Linux / macOS

Shell
$ python -m pip install reportlab

Windows

Windows
...\> py -m pip install reportlab

Tástáil do shuiteáil trína iompórtáil san ateangaire idirghníomhach Python:

Python console
>>> import reportlab

Mura n-ardaíonn an t-ordú sin aon earráidí, d'oibrigh an tsuiteáil.

Scríobh do thuairimLink to this heading

Is é an eochair chun PDFanna a ghiniúint go dinimiciúil le Django ná go ngníomhaíonn an API ReportLab ar rudaí cosúil le comhad, agus glacann rudaí djangos:class: ~django.http.FileResponse le rudaí cosúil le comhad.

Seo sampla “Hello World”:

Code
import io
from django.http import FileResponse
from reportlab.pdfgen import canvas


def some_view(request):
    # Create a file-like buffer to receive PDF data.
    buffer = io.BytesIO()

    # Create the PDF object, using the buffer as its "file."
    p = canvas.Canvas(buffer)

    # Draw things on the PDF. Here's where the PDF generation happens.
    # See the ReportLab documentation for the full list of functionality.
    p.drawString(100, 100, "Hello world.")

    # Close the PDF object cleanly, and we're done.
    p.showPage()
    p.save()

    # FileResponse sets the Content-Disposition header so that browsers
    # present the option to save the file.
    buffer.seek(0)
    return FileResponse(buffer, as_attachment=True, filename="hello.pdf")

Ba chóir go mbeadh an cód agus na tuairimí féinmhínithe, ach tá cúpla rud tuillte ag lua:

  • Socróidh an freagra an cineál MIME go huathoibríoch: mimetype: application/pdf bunaithe ar an síneadh ainm comhaid. Insíonn sé seo do bhrabhsálaithe gur comhad PDF é an doiciméad, seachas comhad HTML nó ábhar dénártha ginearic:mimetype: application/octet-stream.

  • Nuair a chuirtear as_attachment=True chuig FileResponse`, socraíonn sé an ceannteideal Content-Disposition cuí agus insíonn sé do bhrabhsálaithe gréasáin bosca dialóige a chur in iúl agus ag dearbhú conas an doiciméad a láimhseáil fiú má shocraítear réamhshocrú ar an meaisín. Má fhágann an paraiméadar as_attachment, láimhseálfaidh brabhsálaithe an PDF ag baint úsáide as cibé clár/breiseán atá cumraithe acu le húsáid le haghaidh PDFanna.

  • Is féidir leat paraiméadar treallach file a sholáthar. Úsáidfidh brabhsálaithe é sa dialóg “Sábháil mar...”.

  • Is féidir leat dul isteach sa API ReportLab: Is féidir an maolán céanna a rith mar an chéad argóint chuig Canvas.canvas` a chothú chuig an aic:class: ~django.http.fileResponse.

  • Tabhair faoi deara go ndéantar gach modh giniúna PDF ina dhiaidh sin ar an réad PDF (sa chás seo, p`) -- ní ar maolán `.

  • Mar fhocal scoir, tá sé tábhachtach glaoch ar Showpage () ``agus ``save () ar an gcomhad PDF.

Formáidí eileLink to this heading

Tabhair faoi deara nach bhfuil go leor sna samplaí seo atá sainiúil le PDF - díreach na giotáin ag baint úsáide as reportlab. Is féidir leat teicníc den chineál céanna a úsáid chun aon fhormáid treallach a ghiniúint ar féidir leat leabharlann Python a fháil dó. Féach freisin: doc: /howto/outputting-csv le haghaidh sampla eile agus roinnt teicnící is féidir leat a úsáid nuair a ghintear formáidí téacs-bhunaithe.