Configurant columnes a documents PDF generats al vol amb Python i Reportlab

Configurant columnes a documents PDF generats al vol amb Python i Reportlab

Fa temps vaig crear-me un programeta amb Python molt senzill que em lista tots els fitxers d'una determinada ruta i, mitjançant Reportlab, cree un fitxer PDF al vol molt senzillament i ràpida. El fitxer inicial era de moltes fulles perquè el contingut del text ocupaba 1 columna, tot l'ample del document.

Més endavant, en una segona versió del programeta, vaig maquetar el document PDF per a que mostre el llistat de fitxers amb dues columnes, i d'aquesta manera estalvie fulles:

El codi d'aquesta versió amb dues columnes és aquest:

doc.addPageTemplates(
[
PageTemplate(
frames=[
Frame(
doc.leftMargin,
doc.bottomMargin,
doc.width / 2,
doc.height,
id='left',
rightPadding=column_gap / 2,
showBoundary=0 # set to 1 for debugging
),
Frame(
doc.leftMargin + doc.width / 2,
doc.bottomMargin,
doc.width / 2,
doc.height,
id='right',
leftPadding=column_gap / 2,
showBoundary=0
),

Resultat del codi a la terminal de organitzador-2-columnes.py:

I bé, finalment, he fet una altra versió, ara amb 3 columnes, perquè vull estalviar fulls ja que el llistat és molt gran. I he estat configurant els frames a mostrar. El truc està en, per una part, afegir un nou element Frame i anar configurant els valors de:

  • doc.width : és l'ample de la columna.
  • doc.leftMargin: posició de la part esquerra de la columna.
  • leftPadding: espai de dins de les columnes.

Si activem el mode debug de la columna, podrem veure els bordes i anar posicionant-les més fàcilment:

Així queda la configuració de les tres columnes afegint un nou objecte Frame:

Resultat del codi a la terminal de organitzador-3-columnes.py:

El codi de les 3 columnes és:

PageTemplate(
frames=[
Frame(
doc.leftMargin - 60,
doc.bottomMargin,
doc.width / 3 + 40,
doc.height,
id='ThreeCol',
rightPadding=column_gap / 8,
showBoundary=1 # set to 1 for debugging
),
Frame(
doc.leftMargin + doc.width / 3 - 20,
doc.bottomMargin,
doc.width / 3 + 40,
doc.height,
id='ThreeCol',
leftPadding=column_gap / 8,
showBoundary=1
),
Frame(
doc.leftMargin + doc.width / 3 + 171,
doc.bottomMargin,
doc.width / 3 + 40,
doc.height,
id='ThreeCol',
leftPadding=column_gap / 8,
showBoundary=1
),

Aquest programa està publicat al meu repositori de Github, el pots descarregar des de https://github.com/joancatala/pelis

Doncs bé això és tot, espere que trobes útil aquest article i que et motive a compartir els teus trucs, els teus coneixements i els teus experiments amb el Programari Lliure. Pensa-ho, va, que la Comunitat del Programari Lliure va creixent gràcies a la documentació, el disseny, la formació o la programació, sigues part de la Comunitat :-)

La cultura i la lliure circulació de les idees és l'arma més efectiva contra les dictadures del pensament i contra la ignorància.