You are here: Home Documentazione Ricette POD (Python Open Document) integrato in Zope/Plone
Document Actions

POD (Python Open Document) integrato in Zope/Plone
medio

Con il prodotto POD è possibile generare dinamicamente da Plone, Zope dei documenti ODT, PDF, DOC o in formato RTF appoggiandosi alla suite OpenOffice.

Premessa

Una tra le funzionalità più richieste attualmente nel panorama delle applicazioni web riguarda la generazione di report pdf per schede prodotto, listini, ecc. Per soddisfare questa esigenza in Plone è possibile adottare diversi approcci:

  • Utilizzare dei prodotti che convertono l'html in pdf utilizzando dei portal_transforms (come per esempio Plone2Pdf); tuttavia spesso il risultato finale non è per niente fedele all'originale, con effetti alcune volte imprevedibili.
  • Utilizzare un framework Python specifico per la generazione dei pdf, come ad esempio reportlab. In questo caso è possibile garantire l'effetto finale del proprio report pdf con un estremo livello di precisione, ma si hanno diversi svantaggi:
    • reportlab non elabora direttamente codice html, è necessario quindi tradurre i dati in input nel dialetto XML utilizzato internamente da reportlab;
    • il linguaggio XML di reportlab utilizzato per il rendering dei pdf è molto meno esteso rispetto all'html.

Una via alternativa, invece, arriva dal prodotto pod, che sfrutta l'ottima suite di OpenOffice.org per salvare i propri documenti in formato ODT e gestire le conversioni in altri formati come ad esempio .PDF, .RTF, .TXT o .DOC. La generazione dei documenti è dinamica ed avviene a partire da un modello di file ODT che l'utente può creare secondo i propri gusti o esigenze.

Il file ODT utilizzato come modello viene normalmente editato in maniera grafica utilizzando OpenOffice: è possibile inserire tabelle, immagini, loghi e complesse formattazioni: come vedremo, i risultati ottenuti saranno estremamente fedeli e la resa ottima; elementi di dinamicità quali espressioni o statement Python possono essere introdotti inserendo delle semplici note secondo le convenzioni illustrate nella seguente guida.

Requisiti

  • Suite OpenOffice
  • POD
  • Python-uno (per l'interfacciamento tra Python e OpenOffice.org)

Le versioni utilizzate nei test effettuati sono le seguenti:

  • Zope 2.9.7
  • Plone 2.5.3
  • Python 2.4.4
  • Pod 0.0.1
  • Python-uno 2.2.0

Installazione

Innanzitutto è necessario scaricare i sorgenti dalla pagina di download di pod e scompattarli nella cartella /lib/python all'interno dell'istanza di Zope e riavviare il server.

Utilizzo

In questa sezione vedremo come utilizzare pod, dalla costruzione del modello fino alla generazione dei nostri file.

Costruzione modello

Dopo aver installato correttamente il software, dobbiamo creare un template da utilizzare come modello. Le convenzioni utilizzate per dinamicizzare il documento base sono mostrate in dettaglio nella guida segnalata nella sezione Premesse di questo articolo, in ogni caso possiamo anticipare che :

  • per inserire valori, aggiungere l'elemento in modalità Record
  • per inserire statement Python (come ad esempio if o for), inserire delle note

Nel nostro caso creeremo un documento molto semplice, contenente solo il testo "Hello nome!!!" e personalizzato in base al nome dell'utente. Per ottenere questo risultato non serve altro che:

  • aprire OpenOffice;
  • digitare "Hello ";
  • entrare in modalità Record (nel menu di Edit, scegli Modifications->Record);
  • digitare nome;
  • uscire dalla modalità Record;
  • digitare il resto della frase ("!!!" in questo caso).

In questo modo abbiamo creato il nostro primo semplice modello per pod.

Predisposizione OpenOffice

Inoltre è necessario predisporre OpenOffice ad operare in modalità server, lanciando il seguente comando:

soffice "-accept=socket,host=localhost,port=2002;urp;"

Creazione del codice per il rendering in Plone

Nel nostro esempio possiamo semplicemente creare un ExternalMethod contenente il codice che segue nella cartella Extensions, all'interno dell'istanza di Zope, chiamato test.py:

def test(nome):
    from appy.pod.renderer import Renderer
    renderer = Renderer('template.odt', {'nome':nome}, 'result.pdf')
    renderer.run()

Il nostro ExternalMethod accetta come input il nome da inserire nel documento risultato, mentre la linea più interessante sicuramente è quella in cui si definisce l'oggetto render. Come documento base utilizza il file da noi creato, chiamato in questo caso template.odt (primo parametro), mentre result.pdf (terzo parametro) sarà il risultato delle nostre elaborazioni; il secondo parametro invece è un dizionario Python su cui possiamo specificare i valori degli statement utilizzati nel modello ed inseriti in modalità Record.

Testing

Per testare il nostro ExternalMethod basta cliccare sul tab Test dalla ZMI ed inserire gli input richiesti da un apposito form. Per esempio, dando come valore di nome un valore "World", otterremo il file result.pdf contenente proprio la frase "Hello World!!!".

Fatto questo possiamo facilmente generare dei PloneExFile nel nostro portale, contenenti il nostro file appena creato, con supporto all'indicizzazione e pronti per essere scaricati dagli utenti.

Approfondimenti

Il framework POD è una delle dipendenze del prodotto PloneOOoTransforms , che offre una serie di facilitazioni e template predefiniti per ottenere, a partire da documenti Plone, dei report professionali in formato ODT, PDF, RTF o DOC con un gradevole e preciso aspetto grafico.

Attached files
by Davide Moro last modified 2008-12-03 11:02
 

Supporto

Qualcosa non è chiaro?
Chiedi!

Ottieni velocemente un
aiuto mirato, gratis!

help

 

Segui le icone

 

Livelli di difficoltà

livello avanzato Solo configuratori e sviluppatori
livello medio Per chi ha già familiarità
livello base Per tutti!

 

I video

video

Il documento è supportato da un video!