Ferramentas Pessoais
Você está aqui: Página Inicial Artigos Imprimindo páginas Plone (HTML) em PDF

Imprimindo páginas Plone (HTML) em PDF

Neste artigo iremos aprender a converter qualquer página em HTML para PDF dentro do Plone.

O que vamos fazer? O que iremos fazer?

Iremos instalar todos os plugins e eggs necessários para ter o método que realmente imprimi uma página em PDF.

applications-engineering.png Mãos a obra!

Na instalação da instância entre em Python 2.4/bin

Instale os módulos a seguir:

sudo ./easy_install pisa

Searching for pisa
Reading http://pypi.python.org/simple/pisa/
Reading http://www.xhtml2pdf.com
Reading http://www.htmltopdf.org/
Reading http://www.htmltopdf.org/download.html
Reading http://pisa.spirito.de/
Reading http://pisa.spirito.de/download.html
Best match: pisa 3.0.33
Downloading http://pypi.python.org/packages/source/p/pisa/pisa-3.0.33.zip#md5=2a6e9ddba828caf9d97d4d1c0bb889e1


sudo ./easy_install reportlab

Searching for reportlab
Reading http://pypi.python.org/simple/reportlab/
Reading http://www.reportlab.com/
Best match: reportlab 2.5
Downloading http://pypi.python.org/packages/source/r/reportlab/reportlab-2.5.tar.gz#md5=cdf8b87a6cf1501de1b0a8d341a217d3


sudo ./easy_install html5lib

Searching for html5lib
Reading http://pypi.python.org/simple/html5lib/
Reading http://code.google.com/p/html5lib/
Best match: html5lib 0.90
Downloading http://html5lib.googlecode.com/files/html5lib-0.90.zip


sudo ./easy_install pyPdf

Searching for pyPdf
Reading http://pypi.python.org/simple/pyPdf/
Reading http://pybrary.net/pyPdf/
Reading http://stompstompstomp.com/pyPdf/
Download error: (-2, 'Name or service not known') -- Some packages may not be found!
Best match: pyPdf 1.13
Downloading http://pybrary.net/pyPdf/pyPdf-1.13.zip


sudo ./easy_install pil

Searching for pil
Reading http://pypi.python.org/simple/pil/
Reading http://www.pythonware.com/products/pil
Reading http://effbot.org/zone/pil-changes-115.htm
Reading http://effbot.org/downloads/#Imaging
Best match: PIL 1.1.7
Downloading http://effbot.org/media/downloads/PIL-1.1.7.tar.gz

Geralmente o módulo pisa dá problemas na instalação caso isso ocorra faça o seguinte:

Baixe o módulo do pisa em uma pasta dentro do bin do Python

mkdir dirpisa
cd dirpisa
sudo wget http://pypi.python.org/packages/source/p/pisa/pisa-3.0.33.tar.gz#md5=e2040b12211303d065bc4ae2470d2700

Descompacte o módulo pisa e entre na pasta:

tar -zxvf pisa-3.0.33.tar.gz
cd pisa-3.0.33/

Agora instale o módulo no python (?):

sudo ../../python setup.py install

 

Agora precisamos criar os métodos para a geração do PDF

 para mais informações sobre a lib pisa veja isso.

 

 Este método exige do sistema operacional e por segurança não pode ser implementado em um Script Python, utilize uma view (inglês) ou uma tool (inglês).

    def html_to_pdf(self, html, pdfname=None):
        """Usa PISA para gera um pdf"""
        import random

        if not pdfname:
            pdfname = str(random.random()).split('.')[1]

        filename = '/tmp/'+pdfname+'.pdf' 
        
        try:
     	    pdf = self.pdf_file(html, filename)

     	    if pdf:
                self.REQUEST.RESPONSE.setHeader('Content-Type', 'application/pdf')
                self.REQUEST.RESPONSE.setHeader('Content-Disposition','attachment; filename=%s.pdf'%(pdfname))
                self.REQUEST.RESPONSE.write(file(filename,"r").read())       
        except Exception, erro:
            return 'erro|Não possível gerar o arquivo, Detalhes %s'%(erro)
        return 'ok|Arquivo gerado com sucesso.'


    def pdf_file(self, html, filename):
        """Cria um arquivo temporario no filesystem"""
        import ho.pisa as pisa    
        from StringIO import StringIO  
        fopen = file(filename,"wb")
        pdf = pisa.CreatePDF(StringIO(html), fopen, encoding='utf-8')
        fopen.close()
        if not pdf.err:                             
            #pisa.startViewer(filename)
            return True
        else:
            return False 

 Para testarmos pode criar um Script Python:

 

html = """

<style>
    .red{
        color:red;
    }
    .blue{
        color:blue;
    }  
</style>

<div>Este é um <h1>arquivo</h1> em <span class='blue'>HTML</span> convertido em <span class='red'>PDF</span> Gerado <div>

"""
context.portal_mreutils.html_to_pdf(html)

 

 

Se tudo deu certo você verá uma caixa de download para baixar, até a próxima.

 

Ações do documento

Plone - HTML -> PDF

Enviado por Usuário Anônimo em 09/01/2015 10:50

Fala Herson, estou com uma duvida, instalei plone aqui na empresa e preciso o botao download em PDF porem nao sei onde colocar os codigos

"Este método exige do sistema operacional e por segurança não pode ser implementado em um Script Python, utilize uma view (inglês) ou uma tool (inglês)." (links quebrados)

e o outro tbm! poderia detalhar melhor?

Obrigado

Outubro 2022 »
Outubro
SeTeQuQuSeSaDo
12
3456789
10111213141516
17181920212223
24252627282930
31

Python Logo

       Zope Logo

 

      Novo Logo do Plone