FPDF x TCPDF

322 views
Skip to first unread message

Cauan Cabral

unread,
Oct 23, 2008, 9:29:33 AM10/23/08
to CakePHP Tuga
Olá pessoal,

Estou inciando o desenvolvimento de um recurso que gera um PDF como saída. Daí fiz uma busca no Bakery e encontrei um artigo[1] sobre o uso do TCPDF[2], dizendo que é melhor que o FPDF[3] por suportar Unicode, dentre outras coisas. Além de dizer que o desenvolvimento do FPDF está parado à algum tempo (o que não consegui verificar na página do FPDF, que não possui a data do último release).

O que queria discutir com vocês é qual a melhor solução de criação de PDF disponível para ser usado com o CakePHP: O helper FPDF[4] ou a biblioteca TCPDF?
Se possível, alguém que já tenha usado um ou outro citar prós e contra da solução usada.

Uma coisa que penso fazer é criar um helper para o TCPDF, já que aparentemente não existe um, e ter um ajudaria muito, pricipalmente os iniciantes. Se alguém quiser ajudar na tarefa. Só não poderei faze-lo agora de imediato.

É isso aí, alguém tem informações para compartilhar?

[1] - http://bakery.cakephp.org/articles/view/creating-pdf-files-with-cakephp-and-tcpdf
[2] - http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=tcpdf
[3] - http://www.fpdf.org/
[4] - http://bakery.cakephp.org/articles/view/pdf-helper-using-fpdf


Abraços,

---
Cauan Gama Cabral - http://cauancabral.net
Cel. (67)9237-6103
msn, gtalk: cau...@gmail.com

Vinicius Mendes

unread,
Oct 23, 2008, 9:35:56 AM10/23/08
to cakep...@googlegroups.com
Eu estou precisando desenvolver algo parecido, relatorios em PDF. Olhei o dompdf e achei interessante, até pq você programa o PDF como se fosse um HTML. O grande problema é que o desenvolvimento está parado, a ultima release foi em julho de 2006.

--------

Vinícius Mendes
Meio Código - A peça que faltava para o seu código!
URL
http://www.meiocodigo.com


2008/10/23 Cauan Cabral <cau...@gmail.com>

Marcelo Andrade

unread,
Oct 23, 2008, 11:19:19 AM10/23/08
to cakep...@googlegroups.com
2008/10/23 Cauan Cabral <cau...@gmail.com>:

>
> O que queria discutir com vocês é qual a melhor solução de criação de PDF
> disponível para ser usado com o CakePHP: O helper FPDF[4] ou a biblioteca
> TCPDF?

Nunca tive nenhum problema com o FPDF, mas faz muito tempo
mesmo (pelo menos uns 4 anos) desde a última vez que precisei
trabalhar com ele.

Agora lembro de ter mexido na época com uns projetos derivados[1],
que não lembro qual era mas tive a impressão de que tinha uns
melhores (no sentido de mais recursos).

Minha sugestão: tanto faz. Se você não tiver pressão de tempo,
colocar um helper para o TCPDF lá no bakery é uma boa ajuda
para a comunidade (até eu gostaria de colaborar). Mas acho que
o FPDF já deve lhe atender muito bem.

[1] http://www.fpdf.org/en/script/index.php

Atenciosamente.

--
MARCELO DE F. ANDRADE (aka "elektron")
Sun Certified Java Programmer, SCJP5
Linux Professional Institute Certified, LPIC-1

GUS-PA, http://pa.slackwarebrasil.org/

Juan Basso

unread,
Oct 23, 2008, 11:22:59 AM10/23/08
to CakePHP Tuga
Já fiz alguns estudos, mas nada de código com PDF, lembro que tinha
olhado o FPDF na época e que estava em beta aindo o TCPDF...

Olha o artigo no bakery sobre o tcpdf:
http://bakery.cakephp.org/articles/view/creating-pdf-files-with-cakephp-and-tcpdf


Juan Basso
http://blog.cakephp-brasil.org

Cauan Cabral

unread,
Oct 24, 2008, 8:16:33 AM10/24/08
to cakep...@googlegroups.com
Juan, este artigo que havia mencionado no primeiro email ;P

Marcelo, obrigado pelas considerações. Acho que qualquer um deve servir para mim agora, e no momento não estou com folga no prazo para fazer o Component, mas vou faze-lo sim =].
Aviso o grupo quando puder iniciar.

Obrigado pessoal pelos comentários.
Se alguém tiver mais algo para acrescentar, fique a vontade.


Abraços,

---
Cauan Gama Cabral - http://cauancabral.net
Cel. (67)9237-6103
msn, gtalk: cau...@gmail.com


2008/10/23 Juan Basso <jrb...@gmail.com>

Vinicius Mendes

unread,
Oct 24, 2008, 8:53:06 AM10/24/08
to cakep...@googlegroups.com
Acho que o ideal seria um helper, e não um component. Pois a geração do PDF é parte da camada da view.


--------

Vinícius Mendes
Meio Código - A peça que faltava para o seu código!
URL
http://www.meiocodigo.com


2008/10/24 Cauan Cabral <cau...@gmail.com>

Dérico Filho

unread,
Oct 24, 2008, 9:08:00 AM10/24/08
to CakePHP Tuga
cara, uso o FPDF numa aplicação não-cake... e cara, o FPDF é 100% pra
nossas necessidades aqui, não conheço o TCPDF...

[]s
Dérico Filho

On 23 Out, 11:29, "Cauan Cabral" <cau...@gmail.com> wrote:
> Olá pessoal,
>
> Estou inciando o desenvolvimento de um recurso que gera um PDF como saída.
> Daí fiz uma busca no Bakery e encontrei um artigo[1] sobre o uso do
> TCPDF[2], dizendo que é melhor que o FPDF[3] por suportar Unicode, dentre
> outras coisas. Além de dizer que o desenvolvimento do FPDF está parado à
> algum tempo (o que não consegui verificar na página do FPDF, que não possui
> a data do último release).
>
> O que queria discutir com vocês é qual a melhor solução de criação de PDF
> disponível para ser usado com o CakePHP: O helper FPDF[4] ou a biblioteca
> TCPDF?
> Se possível, alguém que já tenha usado um ou outro citar prós e contra da
> solução usada.
>
> Uma coisa que penso fazer é criar um helper para o TCPDF, já que
> aparentemente não existe um, e ter um ajudaria muito, pricipalmente os
> iniciantes. Se alguém quiser ajudar na tarefa. Só não poderei faze-lo agora
> de imediato.
>
> É isso aí, alguém tem informações para compartilhar?
>
> [1] -http://bakery.cakephp.org/articles/view/creating-pdf-files-with-cakep...
> [2] -http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=tcpdf
> [3] -http://www.fpdf.org/
> [4] -http://bakery.cakephp.org/articles/view/pdf-helper-using-fpdf
>
> Abraços,
>
> ---
> Cauan Gama Cabral -http://cauancabral.net

Juan Basso

unread,
Oct 24, 2008, 11:14:11 AM10/24/08
to CakePHP Tuga
Cauan, desculpa, não tinha visto que você já tinha falado do link...

Vinicius, concordo com você. A manipulação toda deve ocorrer na view.
Talvez isso não seja trabalho para um helper, mas sim para uma view
mesmo. Uma vez eu fiz um exemplo de como usar JSON com CakePHP e neste
exemplo criei uma view para fazer isso. Se quiserem dar uma olhada:
http://blog.cakephp-brasil.org/2008/09/11/trabalhando-com-json-no-cakephp-12/

Se for se basear naquele exemplo do bakery, é bem simples a view,
depois nos ctp's você pode usar $this->xxx, pois this seria a view e
você poderia colocar ela como decendente do FPDF/TCPDF ou como um
atributo.


Juan Basso
http://blog.cakephp-brasil.org

Vinicius Mendes

unread,
Oct 24, 2008, 1:57:06 PM10/24/08
to cakep...@googlegroups.com
Muito boa idéia Juan, eu lembro desse seu código do JSON, inclusive postei a referência no meu blog e uso em meus projetos, muito bom.


--------

Vinícius Mendes
Meio Código - A peça que faltava para o seu código!
URL
http://www.meiocodigo.com


2008/10/24 Juan Basso <jrb...@gmail.com>

Cauan Cabral

unread,
Oct 24, 2008, 2:12:18 PM10/24/08
to cakep...@googlegroups.com
Interessante Juan, eu pensei no Helper pegando como ponto de partida um Formulário. Para criá-lo posso usar um helper que me auxilia na escrita dele, mas pelo exemplo que você passou, estou em dúvida se este é trabalho para uma nova View ou um novo Layout + Helper.

- O layout em branco é fundamental para a saída em PDF. O Helper pode facilitar algumas operações costumeiras (posso criar alguns alias e rotinas nele para acessar indiretamente o TCPDF).
- No caso de uma nova View, qual seria o grande diferencial? conteitualmente falando...

---
Cauan Gama Cabral - http://cauancabral.net

Cel. (67)9237-6103
msn, gtalk: cau...@gmail.com


2008/10/24 Vinicius Mendes <vbme...@gmail.com>

Vinicius Mendes

unread,
Oct 24, 2008, 2:55:59 PM10/24/08
to cakep...@googlegroups.com
A nova view faria toda a inicialização do PDF (setar o header content type pra application/pdf por exemplo).


--------

Vinícius Mendes
Meio Código - A peça que faltava para o seu código!
URL
http://www.meiocodigo.com


2008/10/24 Cauan Cabral <cau...@gmail.com>

Cauan Cabral

unread,
Oct 24, 2008, 4:53:56 PM10/24/08
to cakep...@googlegroups.com
Mas esta não é a função do layout? Setar header content type e estrutura "básica"

Juan Basso

unread,
Oct 24, 2008, 5:03:54 PM10/24/08
to CakePHP Tuga
Cauan, o helper é um "componente" da view, ou seja, tudo que um helper
faz, a view pode fazer e ainda pode fazer mais coisas, inclusive
limitar ou bloquear conteúdos, alterar o código gerado. Um exemplo é
você instanciar o FPDF dentro da view, nos ctps usar $this->fpdf-
>xxx();

Outro caso é você fazer algumas variáveis que nem tem no view
tradicional, como a 'scripts_for_layout', 'title_for_layout', etc.
Você personaliza a seu gosto. Pode inclusive criar novas.

No caso, você pode optar por não usar um layout de pdf, então coloque
no seu view para não importar o layout, apenas inclua o ctp direto. Se
você ver no exemplo do JSON, eu não uso nenhum layout ou ctp, apenas
uso o valor que foi passado na variável para gerar a saída, pois é um
padrão de saída e cada action não tem uma personalização da saída...

Acho que a criação de Views está sendo encarada como algo tenebroso,
eu já vejo ao contrário, é mais difícil você e o framework se
contorcerem pra fazer uma view que gera (X)HTML falar outras
linguagens. A mesma coisa para datasources (pra quê? XmlRPC, SOAP,
LDAP, XML, ...), behaviors, components (este até que não tanto), ...
Isso veio para ajudar e não para ficar guardado ali no canto de
bonito.
Acho que temos (não digo só o pessoal aqui da comunidade, mas
internacionalmente) que perder o medo de criar esses componentes. O
cake precisa deles, enquanto não tiver alguem que crie e distribua,
cada vez mais vão estar se contorcendo para mudar a view padrão e vai
acabar dando um nó no framework e vão dizer que ele é lento ou ruim...


Juan Basso

On 24 out, 16:55, "Vinicius Mendes" <vbmen...@gmail.com> wrote:
> A nova view faria toda a inicialização do PDF (setar o header content type
> pra application/pdf por exemplo).
>
> --------
>
> Vinícius Mendes
> Meio Código - A peça que faltava para o seu código!
> URLhttp://www.meiocodigo.com
>
> 2008/10/24 Cauan Cabral <cau...@gmail.com>
>
>
>
> > Interessante Juan, eu pensei no Helper pegando como ponto de partida um
> > Formulário. Para criá-lo posso usar um helper que me auxilia na escrita
> > dele, mas pelo exemplo que você passou, estou em dúvida se este é trabalho
> > para uma nova View ou um novo Layout + Helper.
>
> > - O layout em branco é fundamental para a saída em PDF. O Helper pode
> > facilitar algumas operações costumeiras (posso criar alguns alias e rotinas
> > nele para acessar indiretamente o TCPDF).
> > - No caso de uma nova View, qual seria o grande diferencial?
> > conteitualmente falando...
>
> > ---
> > Cauan Gama Cabral -http://cauancabral.net
> > Cel. (67)9237-6103
> > msn, gtalk: cau...@gmail.com
>
> > 2008/10/24 Vinicius Mendes <vbmen...@gmail.com>
>
> > Muito boa idéia Juan, eu lembro desse seu código do JSON, inclusive postei
> >> a referência no meu blog e uso em meus projetos, muito bom.
>
> >> --------
>
> >> Vinícius Mendes
> >> Meio Código - A peça que faltava para o seu código!
> >> URLhttp://www.meiocodigo.com
>
> >> 2008/10/24 Juan Basso <jrba...@gmail.com>
>
> >>> Cauan, desculpa, não tinha visto que você já tinha falado do link...
>
> >>> Vinicius, concordo com você. A manipulação toda deve ocorrer na view.
> >>> Talvez isso não seja trabalho para um helper, mas sim para uma view
> >>> mesmo. Uma vez eu fiz um exemplo de como usar JSON com CakePHP e neste
> >>> exemplo criei uma view para fazer isso. Se quiserem dar uma olhada:
>
> >>>http://blog.cakephp-brasil.org/2008/09/11/trabalhando-com-json-no-cak...
> >>> > > msn, gtalk: cau...@gmail.com- Ocultar texto entre aspas -
>
> - Mostrar texto entre aspas -

Cauan Cabral

unread,
Oct 24, 2008, 5:10:21 PM10/24/08
to cakep...@googlegroups.com
Boa explicação Juan, obrigado.
Eu estava enxergando a View como um .ctp, não como uma classe.

Só uma coisa me deixou curioso, como faço para criar outras variáveis para o layout? da mesma forma que temos o 'title_for_layout' e outros? É feito com o $Controller::set ? Ou há outra forma?

---
Cauan Gama Cabral - http://cauancabral.net

Cel. (67)9237-6103
msn, gtalk: cau...@gmail.com


2008/10/24 Juan Basso <jrb...@gmail.com>

Juan Basso

unread,
Oct 24, 2008, 5:16:36 PM10/24/08
to CakePHP Tuga
Pela estruturação do Cake, ele tende a ser feito pelo Controller,
tanto que o controller tem o método header (que nada mais é que a
chamada da função header do PHP).
Há quem discorde, mas tem a vantagem de você fazer redirects, erros e
outros itens sem chegar numa view. Por exemplo, você pode ter uma
action que entrou em desuso, mas muitos dos clientes ou a busca do
google tem ela no bookmark, então você pode colocar um header 301 e
dizer que foi movida... assim, eles vão atualizando o link.

Ou quando você quer causar mensagens de erro, manda um erro de 404,
por exemplo.

Eu acho que a view deve ser a responsável pelo header em caso de
sucesso (200), pois é nela que estará o que será exibido. Porém o cake
não tem nenhuma função que permita isso. O seu layout (já pelo nome)
diz como vai ser o genéricozão do conteúdo para tudo que for exibido.
Funciona colocar ali? Sim. Mas é o correto pela estruturação da
programação?!


Juan Basso

On 24 out, 18:53, "Cauan Cabral" <cau...@gmail.com> wrote:
> Mas esta não é a função do layout? Setar header content type e estrutura
> "básica"
>
> ---
> Cauan Gama Cabral -http://cauancabral.net
> Cel. (67)9237-6103
> msn, gtalk: cau...@gmail.com
>
> 2008/10/24 Vinicius Mendes <vbmen...@gmail.com>
>
>
>
> > A nova view faria toda a inicialização do PDF (setar o header content type
> > pra application/pdf por exemplo).
>
> > --------
>
> > Vinícius Mendes
> > Meio Código - A peça que faltava para o seu código!
> > URLhttp://www.meiocodigo.com
>
> > 2008/10/24 Cauan Cabral <cau...@gmail.com>
>
> >> Interessante Juan, eu pensei no Helper pegando como ponto de partida um
> >> Formulário. Para criá-lo posso usar um helper que me auxilia na escrita
> >> dele, mas pelo exemplo que você passou, estou em dúvida se este é trabalho
> >> para uma nova View ou um novo Layout + Helper.
>
> >> - O layout em branco é fundamental para a saída em PDF. O Helper pode
> >> facilitar algumas operações costumeiras (posso criar alguns alias e rotinas
> >> nele para acessar indiretamente o TCPDF).
> >> - No caso de uma nova View, qual seria o grande diferencial?
> >> conteitualmente falando...
>
> >> ---
> >> Cauan Gama Cabral -http://cauancabral.net
> >> Cel. (67)9237-6103
> >> msn, gtalk: cau...@gmail.com
>
> >> 2008/10/24 Vinicius Mendes <vbmen...@gmail.com>
>
> >> Muito boa idéia Juan, eu lembro desse seu código do JSON, inclusive postei
> >>> a referência no meu blog e uso em meus projetos, muito bom.
>
> >>> --------
>
> >>> Vinícius Mendes
> >>> Meio Código - A peça que faltava para o seu código!
> >>> URLhttp://www.meiocodigo.com
>
> >>> 2008/10/24 Juan Basso <jrba...@gmail.com>
>
> >>>> Cauan, desculpa, não tinha visto que você já tinha falado do link...
>
> >>>> Vinicius, concordo com você. A manipulação toda deve ocorrer na view.
> >>>> Talvez isso não seja trabalho para um helper, mas sim para uma view
> >>>> mesmo. Uma vez eu fiz um exemplo de como usar JSON com CakePHP e neste
> >>>> exemplo criei uma view para fazer isso. Se quiserem dar uma olhada:
>
> >>>>http://blog.cakephp-brasil.org/2008/09/11/trabalhando-com-json-no-cak...

Juan Basso

unread,
Oct 24, 2008, 5:23:52 PM10/24/08
to CakePHP Tuga
Dê uma olhada na linha 424 para ver como ele cria as tradicionais:
https://trac.cakephp.org/browser/trunk/cake/1.2.x.x/cake/libs/view/view.php

Como sugestão, para não reimplementar todo esse método, sugiro
"atacar" no View::_render(), reimplementando, colocando as variáveis
que você deseja no data_for_layout e depois chamar o pai para
continuar (parent::_render(...)).


Juan Basso

On 24 out, 19:10, "Cauan Cabral" <cau...@gmail.com> wrote:
> Boa explicação Juan, obrigado.
> Eu estava enxergando a View como um .ctp, não como uma classe.
>
> Só uma coisa me deixou curioso, como faço para criar outras variáveis para o
> layout? da mesma forma que temos o 'title_for_layout' e outros? É feito com
> o $Controller::set ? Ou há outra forma?
>
> ---
> Cauan Gama Cabral -http://cauancabral.net
> Cel. (67)9237-6103
> msn, gtalk: cau...@gmail.com
>
> 2008/10/24 Juan Basso <jrba...@gmail.com>
> > > - Mostrar texto entre aspas -- Ocultar texto entre aspas -

Vinicius Mendes

unread,
Oct 24, 2008, 10:23:31 PM10/24/08
to cakep...@googlegroups.com
Muito bom Juan, estou neste momento pensando em soluções para gerar os relatórios de um sistema que estou desenvolvendo. Eu estava criando um helper, mas tô começando a achar que não é a melhor opção mesmo. Mas mesmo assim, ainda acho que terei que incluir esse helper de qualquer forma, pois eu quero ter algumas facilidades como métodos para gerar tabelas facilmente...

--------

Vinícius Mendes
Meio Código - A peça que faltava para o seu código!


2008/10/24 Juan Basso <jrb...@gmail.com>

Josenivaldo Benito Junior

unread,
Oct 28, 2008, 2:46:19 AM10/28/08
to cakep...@googlegroups.com
Um pouco atrasado mas la vai:

FPDF funciona e atende 100% (as minhas necessidades atuais)

Uso uma versão modificada para aceitar transparência em imagens GIF (pois tenho uma assinatura no final do PDF que sobrepõe o nome). Fica 100%.

Não conheço o TCPDF mas garanto que FDPF funciona de primeira com cake.

73

2008/10/25 Juan Basso <jrb...@gmail.com>

Josenivaldo Benito Junior

unread,
Oct 28, 2008, 2:47:15 AM10/28/08
to cakep...@googlegroups.com
Ah,

Um detalhe: nunca brinquei com as fontes da FPDF e não sei o quanto dificil é.

Ponto negativo: não aceita UTF-8, somente ISO-8859-1

73

2008/10/28 Josenivaldo Benito Junior <jrbe...@benito.qsl.br>

Josenivaldo Benito Junior

unread,
Oct 28, 2008, 2:52:07 AM10/28/08
to cakep...@googlegroups.com
Nossa, desculpem responder em rajadas...

Estou lendo sobre a TCPDF e vou reservar um tempo para testá-la em projetos futuros. O fato de aceitar Unicode e TrueType é muito bom!! Não vi nada sobre imagens transparentes e objetos transparentes (Acrobat >=5). Isso é importante.

Abraço

Vinicius Mendes

unread,
Oct 28, 2008, 8:43:59 AM10/28/08
to cakep...@googlegroups.com
Josenivaldo,

Estou estudando o TCPDF para aplicar em meus projetos, e li em algum lugar que ele era uma evolução do FPDF. Outra coisa, não sei se eu fiz errado, mas ele não suportou o UTF-8 mto bem, eu tive que usar utf8_decode nos textos, mas acredito que deve ter sido falha minha, pois todos os lugares enaltecem essa vantagem do TCPDF. Quanto à transparência, ele suporta sim, inclusive tem um dos exemplos dele que demonstra isso.


--------

Vinícius Mendes
Meio Código - A peça que faltava para o seu código!
URL
http://www.meiocodigo.com


Josenivaldo Benito Junior

unread,
Oct 28, 2008, 10:25:08 AM10/28/08
to cakep...@googlegroups.com
Olá Vinicius,

Meu principal interesse é no UTF8 pois é evitaria um monte de utf8_decode no controller ou na view ou no model ... (nesse caso coloquei na view pois a necessidade de conversão é deficiencia da FDPF que está sendo usada na view, portanto centralizei cause e consequência no mesmo lugar - mesmo não sendo MVC like).

Obrigado,

Benito

2008/10/28 Vinicius Mendes <vbme...@gmail.com>
Reply all
Reply to author
Forward
0 new messages