Crie PDFs na hora usando TCPDF

Transforme suas páginas da Web em impressos perfeitos

TCPDF é uma popular biblioteca PHP de software livre que permite criar documentos PDF. Sua flexibilidade e versatilidade permitem criar até mesmo documentos coloridos complexos, com quaisquer fontes e gráficos necessários. TCPDF é escrito totalmente em PHP, e realiza toda essa mágica de PDF sem precisar de qualquer biblioteca externa. Este artigo apresenta o TCPDF, e em seguida acompanha a reprodução de uma simples fatura em HTML em um arquivo PDF transferível por download.

Chris Herborth, Freelance Writer, Author

Photo of Chris HerborthChris Herborth é um escritor técnico senior vencedor de prêmios, com mais de 10 anos de experiência na escrita de materiais sobre sistemas operacionais e programação. Quando ele não está brincando com seu filho Alex ou junto de sua esposa Lynette, ele passa seu tempo projetando, escrevendo e pesquisando (é isso mesmo, jogando) videogames.



27/Ago/2010

Introdução

TCPDF, um dos mais ativos projetos hospedados em Sourceforge.net, implementa um poderoso mecanismo de geração de PDF, inteiramente em PHP. Isso o torna fácil de instalar, mesmo em locais nos quais não se tem acesso aos diretórios do sistema ou onde não é possível compilar seu próprio código. Também facilita o desenvolvimento iterativo ao permitir ver imediatamente os resultados gerados pelo código PHP sem qualquer etapa intermediária.

TCPDF suporta uma gama de formatos de imagem úteis, incluindo formato de vetor SVG e de bitmap, tais como JPEG e PNG. Um simples utilitário independente permite processar fontes TrueType, OpenType, PostScript Tipo 1 e CID-0, de modo que possam ser incluídas em documentos criados pelo TCPDF. O TCPDF pode ser usado para gerar diversos formatos de códigos de barras 1-D e 2-D, e ele suporta todos os recursos de PDF usuais, como indicadores, links de documento, compactação, anotações, criptografia de documento e assinaturas digitais.

O TCPDF e as páginas que o usam são escritos em PHP, o que torna fácil criar e implementar páginas da Web que geram PDFs. Embora seja possível desenvolver e implementar TCPDF usando qualquer servidor da Web suportado e seu ambiente de desenvolvimento PHP favorito, eu usarei o seguinte:

  • Eclipse V3.5.2 — Um dos meus ambientes de desenvolvimento de software livre favoritos, com suporte para uma ampla gama de linguagens e ambientes de programação.
  • PHP Development Tools V2.2.0 — Um plug-in de PHP para Eclipse.
  • MAMP Pro V1.9 — Um pacote útil para Mac OS X, que fornece Apache, MySQL e PHP em um ambiente isolado com um front-end GUI útil. Embora o Mac OS X já venha com Apache e PHP instalados, eu optei por usar este pacote porque ele fornece um conjunto estável e facilmente segregado de servidor da Web/banco de dados/PHP.
  • TCPDF V5.0.006 — A atual versão estável do TCPDF.

Links para o download de todos esses podem ser encontrados na seção Recursos.

Vejamos como é possível usar o TCPDF em seus próprios Web sites, desde que o PHP esteja instalado. Iremos examinar o processo de instalação, depois iremos usar PHP para gerar uma página da Web mostrando um documento estilo fatura que poderia vir de qualquer site de e-commerce. Em seguida, iremos usar o TCPDF para criar uma versão PDF da fatura para impressão usando formatação similar.


Instalando o TCPDF

Ao fazer o download do TCPDF do Sourceforge.net, ele vem em um arquivo ZIP autocontido. Ou seja, é possível usar sua ferramenta de extração ZIP favorita para descompactar o archive, e o resultado é um diretório do TCPDF contendo tudo necessário para começar.

Se o diretório do TCPDF for incluído ao seu diretório de documentos da Web, é possível acessar a documentação do programa carregando doc/index.html e visualizar qualquer um dos exemplos, que também podem ser encontrados no site do TCPDF na Web (consulte Recursos), carregando o arquivo examples/index.php.

Entretanto, antes de poder visualizar os exemplos, é necessário configurar a instalação do TCPDF.


Configuração — Sistemas semelhantes a UNIX

Ao instalar o TCPDF em um sistema semelhante a UNIX®, é necessário alterar os modos de arquivo para que não sejam todos sinalizados como executáveis. Isso é um efeito colateral do fato de o archive do TCPDF ter sido criado em um sistema Microsoft® Windows®. Felizmente, é fácil ajustá-los de uma vez a partir do shell (consulte a Listagem 1). Também é necessário verificar se os diretórios de cache e de imagens permitem gravações, já que o TCPDF irá armazenar arquivos temporários neles.

Em seguida, é necessário designar os arquivos ao usuário e grupo do servidor da Web; geralmente trata-se do usuário www e grupo www, mas depende do seu sistema. Se você estiver executando o TCPDF em sua área pessoal no Web site (geralmente public_html em seu diretório inicial), é possível ignorar esta etapa.

Listagem 1. Ajustando modos de arquivo e propriedade
$ cd tcpdf
$ find . -type f | xargs chmod -x
$ chmod +w cache images
$ chown -R www:www .

Observe que o comando pode usar um . em vez de : para separar o usuário e grupo em alguns sistemas; se o comando reclamar, consulte a documentação para detalhes.


Configuração para todos

Usando seu editor de texto favorito, carregue o arquivo config/tcpdf_config.php. Estas são as configurações do TCPDF, que permitem controlar os valores padrão da biblioteca e informar a ela como encontrar os arquivos de suporte.

Configurações que pode ser útil mudar em tcpdf_config.php incluem:

  • PDF_PAGE_FORMAT— Configure como letter se não estiver usando formatos de página métricos. O TCPDF provavelmente suporta mais tamanhos de página que a sua impressora, a menos que você tenha algo muito exótico.
  • PDF_UNIT— Configure para pt se preferir usar pontos em vez de milímetros para o layout do seu documento PDF.
  • PDF_CREATOR, PDF_AUTHOR— Criador e autor padrões do documento, caso seu código gerador de PDFs se esqueça de configurá-los.

É possível ajustar qualquer uma dessas configurações também no código PHP, portanto não se preocupe se não tiver certeza (por exemplo, se layouts de documento forem configurados para modo de retrato aqui, ainda será possível criar documentos em paisagem).

Com as configurações padrão, o TCPDF não deve ter problema em renderizar qualquer um dos exemplos incluídos com ele, desde que os arquivos e diretórios não tenham sido movidos de seus locais originais.

Nesse momento, é possível carregar os arquivos de exemplo para ter certeza de que há uma instalação funcional do TCPDF. Vamos usá-la para criar uma versão para impressão de uma fatura.


Criando uma fatura

Depois que você criar seu Web site que é uma obra-prima do e-commerce, seus clientes irão pedir coisas, e você irá receber o dinheiro deles. Isso é ótimo, mas eles irão querer algum tipo de fatura, para o caso de o pedido dar errado ou de a empresa do cartão de crédito errar no pagamento.

Vamos criar uma página da Web razoavelmente agradável para fatura, para que eles possam ver o que pediram e o quanto lhes será cobrado.


Primeira versão — A página da Web

Usando meu ambiente de desenvolvimento PHP favorito, eu criei uma nova pasta Invoice contendo esses arquivos:

  • Invoice.php — PHP para gerar uma fatura
  • Invoice.css — Estilo CSS para a fatura
  • Azuresol_OnyxTree-S.png — "OnyxTree S" de Azuresol, que será usado como o logotipo da sua empresa (um ícone gratuito do Web site iconfinder.com (consulte Recursos))
  • gentleface_print.png — "Print" de gentleface, que será usado para acionar a geração do PDF (outro ícone gratuito de iconfinder.com)

Dentro de Invoice.php, verifique se a página foi chamada com o argumento PDF (consulte a Listagem 2). Se não foi, o usuário está procurando por uma página da Web normal, portanto a página deve ser exibida usando a função generateHTML (consulte a Listagem 3). Vamos examinar a função generatePDF mais tarde, mas podemos partir do princípio de que ela será usada para gerar um PDF dos dados da fatura.

Listagem 2. Código de controle da geração da página
if( array_key_exists( 'PDF', $_REQUEST ) ) {
    generatePDF( $invoiceData );
} else {
    generateHTML( $invoiceData );
}

A array $invoiceData contém todos os seus dados de fatura; ela é criada diretamente em Invoice.php, mas pode-se imaginar os dados vindos de um banco de dados, serviço da Web ou uma espécie de sistema de carrinho on-line.

Listagem 3. Gerando o HTML
function generateHTML( $data ) {
?>
... havia código HTML aqui ...
<?php
    foreach( $data['items'] as $item ) {
        echo '<tr class="invoiceRow">' . "\n";
        echo '    <td class="itemCol">' . $item[0] . "</td>\n";
        echo '    <td class="quantityCol">' . $item[1] . "</td>\n";
        echo '    <td class="priceCol">' . $item[2] . "</td>\n";
        echo '    <td class="costCol">' . $item[3]. "</td>\n";
        echo "</tr>\n";
    }
?>
... HTML code was here ...
<?php
    echo '<td class="totalCol">' . $data['total'] . "</td>\n";
?>
... HTML code was here ...
<?php
    echo 'Invoice prepared for ' . $data['user'] . ' on ' . $data['date'] . "\n";
?>
... HTML code was here ...
<?php

}

Eu eliminei o código de marcação HTML por motivos de espaço; é possível vê-lo no Invoice.php no archive CreatingPDFs-Invoice.zip, que pode ser encontrado na seção Downloads.

Usando as informações de fatura passadas para a função como $data, crie uma tabela contendo uma linha por item, com a quantidade, preço unitário e preço total. No final da tabela, inclua uma linha contendo o custo total do pedido. O rodapé da página contém o ID do usuário e a data/horário em que a fatura foi preparada.

Coisa fácil, sem dúvida, e o desafio maior ao implementar isso em seu site será interagir com as fontes de dados e ajustar o estilo CSS.

Figura 1. A fatura da página da Web em toda a sua glória
Screenshot shows an example of an attractive printable invoice; Sumatra Special has a large quantity of 24, while the others are between 1 and 5

Minha empresa South Seas Pacifica, totalmente fictícia, fornece café e chá finos, e aparentemente eu tenho um sério vício na variedade Sumatraa. Ao menos os preços são bons!

O ícone de impressora na parte inferior é convidativo, e se esperaria poder clicar nele e obter uma impressão da fatura. É aqui que entra o TCPDF. Em vez de imprimir a página da Web, você dará aos seus valiosos clientes uma elegante versão em PDF que eles podem imprimir quando quiserem.


Segunda versão — O PDF

Agora que a fatura da página da Web está com uma boa aparência, é necessário criar uma versão em PDF que possa ser impressa.

Como vimos na Listagem 2, ao carregar a página Invoice.php com o argumento PDF (http://.../Invoice.php?PDF), a função generatePDF é chamada com os mesmos dados (veja a Listagem 4).

Listagem 4. Gerando a fatura em PDF
function generatePDF( $data ) {
    # Create a new PDF document.
    $pdf = new InvoicePdf( $data, 'P', 'pt', 'LETTER' );

    # Generate the invoice.
    $pdf->CreateInvoice();

    # Output the PDF document.
    $pdf->Output( 'Your_Invoice.pdf', 'D' );
}

A função generatePDF cria um objeto InvoicePdf, chama o método CreateInvoice e em seguida envia o documento PDF como um download chamado Your_Invoice.pdf para o navegador do usuário. Isso parece extremamente fácil, mas esconde o fato de que eu tive que criar a classe InvoicePdf eu mesmo, duplicando o estilo original de Invoice. Vejamos como.

A classe InvoicePdf estende a classe TCPDF do TCPDF, que é o principal mecanismo gerador de PDF. No construtor (veja a Listagem 5), inicialize a classe-pai usando o $orientation (orientação da página), $unit (unidade de medida) e $format (tamanho da página) que foram passados. Os últimos três argumentos do construtor TCPDF indicam que a entrada é Unicode (o padrão, verdadeiro), a codificação de caractere de nosso PDF gerado será UTF-8 e armazenamento em cache de disco não deve ser usado (falso). O armazenamento em cache de disco reduz a área de cobertura na memória ao criar o PDF, mas é mais lento. Como nosso documento não é grande ou complexo, não há a necessidade de fazer essa concessão.

Após inicializar a classe-pai, armazene uma referência aos dados da fatura para mais tarde. Em seguida, configure as margens direita e esquerda para 72 pontos e a margem superior para 36 pontos usando o método SetMargins. O argumento final de SetMargins indica que as margens padrão estão sendo substituídas por nossos próprios valores. Usando o método SetAutoPageBreaks, indique ao TCPDF para criar uma nova página quando estiver a 36 pontos do fundo da página.

Listagem 5. O construtor da classe InvoicePdf
function __construct( $data, $orientation, $unit, $format ) {
    parent::__construct( $orientation, $unit, $format, true, 'UTF-8', false );

    $this->invoiceData = $data;

    # Set the page margins: 72pt on each side, 36pt on top/bottom.
    $this->SetMargins( 72, 36, 72, true );
    $this->SetAutoPageBreak( true, 36 );

    # Set document meta-information
    $this->SetCreator( PDF_CREATOR );
    $this->SetAuthor( 'Chris Herborth (chrish@pobox.com)' );
    $this->SetTitle( 'Invoice for ' . $this->invoiceData['user'] );
    $this->SetSubject( "A simple invoice example for 'Creating PDFs on
the fly with TCPDF' on IBM's developerWorks" );
    $this->SetKeywords( 'PHP, sample, invoice, PDF, TCPDF' );

    //set image scale factor
    $this->setImageScale(PDF_IMAGE_SCALE_RATIO);

    //set some language-dependent strings
    global $l;
    $this->setLanguageArray($l);
}

Após configurar as margens, configure as meta informações do documento PDF. Elas serão exibidas na janela das propriedades de documento dentro do seu visualizador PDF favorito. São apenas cadeias, portanto podem ser configuradas da maneira que fizer sentido para seu aplicativo.

Usando o método setImageScale, use a proporção de escala de imagem padrão configurada no arquivo de configuração do TCPDF. Isso é usado para ajustar tamanhos de imagens de bitmap de seu tamanho de pixel para algo adequado para a página.

Finalmente, use setLanguageArray para configurar algumas cadeias dependentes do idioma para o arquivo PDF; elas são definidas no arquivo de configuração específico do idioma, carregado pela configuração principal do TCPDF.

Na Listagem 6, é sobrescrito o método Header, que é chamado para gerar o conteúdo do cabeçalho de cada página. Primeiro, defina algumas variáveis. Começando com um tamanho bigFont de 14 pontos, deve-se descobrir o tamanho relativo da imagem do logotipo e do texto normal em relação ao tamanho bigFont. Em seguida, nos aprofundamos nas chamadas do TCPDF.

O método ImagePngAlpha insere a imagem do logotipo colocando seu canto superior esquerdo 72 pontos para dentro e 36 pontos para baixo, o que corresponde às configurações de margem anteriores. Como se trata de uma imagem quadrada, é possível especificar a mesma largura e altura (o $imageScale calculado). Deve-se indicar que se trata de uma imagem PNG, porque esta chamada pode inserir imagens PNG e JPEG (se a biblioteca GD estiver instalada na configuração do PHP, a chamada também pode carregar qualquer imagem suportada pelo GD). Em seguida, especifique um valor nulo, porque você não está adicionando um destino de link PDF (criado com o método AddLink) para essa imagem. Em seguida, use T para indicar que o próximo objeto PDF deve ser desenhado no canto superior direito da área da imagem. Por fim, diga ao TCPDF para não redimensionar a imagem; que ela tinha originalmente 72 dpi (uma resolução de tela comum); e que ela deve ser alinhada à esquerda na página.

Obviamente, o método ImagePngAlpha permite um enorme controle sobre como as imagens são incluídas em uma página em um documento PDF (veja a Listagem 6).

Listagem 6. Geração de cabeçalho de página
public function Header() {
    global $webcolor;

    # The image is this much larger than the company name text.
    $bigFont = 14;
    $imageScale = ( 128.0 / 26.0 ) * $bigFont;
    $smallFont = ( 16.0 / 26.0 ) * $bigFont;

    $this->ImagePngAlpha('Azuresol_OnyxTree-S.png', 72, 36, $imageScale,
$imageScale, 'PNG', null, 'T', false, 72, 'L' );
    $this->SetFont('times', 'b', $bigFont );
    $this->Cell( 0, 0, 'South Seas Pacifica', 0, 1 );
    $this->SetFont('times', 'i', $smallFont );
    $this->Cell( $imageScale );
    $this->Cell( 0, 0, '', 0, 1 );
    $this->Cell( $imageScale );
    $this->Cell( 0, 0, '31337 Docks Avenue,', 0, 1 );
    $this->Cell( $imageScale );
    $this->Cell( 0, 0, 'Toronto, Ontario', 0, 1 );

    $this->SetY( 1.5 * 72, true );
    $this->SetLineStyle( array( 'width' => 2, 'color' =>
array( $webcolor['black'] ) ) );
    $this->Line( 72, 36 + $imageScale, $this->getPageWidth() - 72, 36
+ $imageScale );
}

Depois que a imagem do logotipo tiver sido colocada no cabeçalho, configure a fonte (Times negrito, com o seu tamanho bigFont) e, em seguida, crie algumas células para guardar o nome e endereço da empresa. Essas células contêm texto, e funcionam um pouco como células de tabela em HTML. O método Cell aceita estes argumentos (e vários outros, na verdade); consulte a documentação do TCPDF para uma lista completa):

  • Width— Largura da célula; se configurado como 0, a célula se estende até a margem direita (ou margem esquerda ao usar uma língua escrita da direita para a esquerda).
  • Height— Altura da célula; se configurado como 0, a altura expande para que o conteúdo caiba na célula.
  • Text— O texto a ser desenhado dentro da célula, usando as atuais configurações de fonte e cor.
  • Border— Indica se uma borda deve ser desenhada em torno da célula. Nesse caso, você não quer nenhuma borda, por isso usa 0. Também é possível passar 1 para desenhar uma borda completa em torno da célula, ou uma cadeia para indicar tamanhos específicos de bordas.
  • Position— Indica onde criar a próxima célula; 1 indica que ela deve aparecer no começo da próxima linha, mas é possível usar 0 para incluir a nova célula ao lado desta, ou 2 para permanecer na posição X atual e mover-se para a próxima linha.

Por fim, nosso método Header desenha uma linha preta de dois pontos ao longo da área de conteúdo, na parte inferior do cabeçalho. A Figura 2 mostra como isso fica na página, conforme renderizado pelo aplicativo Preview do Mac OS X.

Figura 2. O cabeçalho de impressão, igual ao cabeçalho da página da web
Screenshot shows the header with a graphic logo to the left of the address, the name in a large, bold font, and the address in italics below

Depois de criar uma cópia razoável do cabeçalho original, é necessário também sobrescrever o método Footer para gerar o rodapé. Isso é bem mais simples, e contém apenas o ID do usuário e dados da fatura, separados do restante da página por outra linha preta de dois pontos.

A única parte desse método que ainda não vimos é a chamada ao método SetY com um valor negativo. Ao fazer isso, o Y atual é configurado em relação à parte inferior da página. Aqui um espaço generoso está sendo deixado para o rodapé da página, para assegurar que não estamos desenhando próximos demais da margem inferior (ver a Listagem 7).

Listagem 7. Geração do rodapé de página
public function Footer() {
    global $webcolor;

    $this->SetLineStyle( array( 'width' => 2, 'color' => 
array( $webcolor['black'] ) ) );
    $this->Line( 72, $this->getPageHeight() - 1.5 * 72 - 2, 
$this->getPageWidth() - 72, $this->getPageHeight() - 1.5 * 72 - 2 );
    $this->SetFont( 'times', '', 8 );
    $this->SetY( -1.5 * 72, true );
    $this->Cell( 72, 0, 'Invoice prepared for ' . 
$this->invoiceData['user'] . ' on ' . $this->invoiceData['date'] );
}

Ao criar a página, ela se assemelha à versão da fatura na Web, sem o ícone de impressão. Ele está sendo deixado de fora porque se trata da versão para impressão (é redundante). A Figura 3 tem os resultados.

Figura 3. O rodapé impresso
Screenshot shows the footer, which is a bold horizontal line with details about the recipient, the time and the data

Nesse momento, temos uma página em branco com um bom cabeçalho e rodapé. É necessário incluir o conteúdo da fatura para que isso se torne útil.

Após usar o método AddPage para iniciar uma página nova (a única página, nesse caso), configure a fonte para Helvética 11 pontos e mova o local de inserção para 144 pontos a partir da parte superior da página. Isso nos dá um pequeno espaço abaixo do cabeçalho, antes de a tabela começar.

Em seguida, calcule a indentação necessária para centrar a tabela, baseado na largura de página, duas margens de 72 pontos, uma coluna ampla e três colunas regulares.

Depois disso, crie uma série de células para renderizar os cabeçalhos de coluna usando os valores calculados previamente, e desenhando bordas completas para cada célula. Também alinhe os cabeçalhos à direita, de modo que fiquem alinhados com os valores. Ao fim das células de cabeçalho, chame o método Ln para ir para o início da próxima linha.

Faça o mesmo tipo de layout para cada linha de conteúdo através de um loop foreach que itera os itens da fatura (veja a Listagem 8).

Listagem 8. Geração de conteúdo de página
public function CreateInvoice() {
    $this->AddPage();
    $this->SetFont( 'helvetica', '', 11 );
    $this->SetY( 144, true );

    # Table parameters
    #
    # Column size, wide (description) column, table indent, row height.
    $col = 72;
    $wideCol = 3 * $col;
    $indent = ( $this->getPageWidth() - 2 * 72 - $wideCol - 3 * $col ) / 2;
    $line = 18;

    # Table header
    $this->SetFont( '', 'b' );
    $this->Cell( $indent );
    $this->Cell( $wideCol, $line, 'Item', 1, 0, 'L' );
    $this->Cell( $col, $line, 'Quantity', 1, 0, 'R' );
    $this->Cell( $col, $line, 'Price', 1, 0, 'R' );
    $this->Cell( $col, $line, 'Cost', 1, 0, 'R' );
    $this->Ln();

    # Table content rows
    $this->SetFont( '', '' );
    foreach( $this->invoiceData['items'] as $item ) {
        $this->Cell( $indent );
        $this->Cell( $wideCol, $line, $item[0], 1, 0, 'L' );
        $this->Cell( $col, $line, $item[1], 1, 0, 'R' );
        $this->Cell( $col, $line, $item[2], 1, 0, 'R' );
        $this->Cell( $col, $line, $item[3], 1, 0, 'R' );
        $this->Ln();
    }

    # Table Total row
    $this->SetFont( '', 'b' );
    $this->Cell( $indent );
    $this->Cell( $wideCol + $col * 2, $line, 'Total:', 1, 0, 'R' );
    $this->SetFont( '', '' );
    $this->Cell( $col, $line, $this->invoiceData['total'], 1, 0, 'R' );
}

A última parte do código renderiza a linha total. Isso mostra como é possível alterar estilos de fonte facilmente entre células (chamando o método SetFont para ativar ou desativar o negrito). A largura da primeira célula é configurada para ocupar as três primeiras colunas da tabela, já que o total da fatura deve aparecer ao final da última coluna.

Uma vez concluída, a tabela de itens da fatura tem boa aparência (veja a Figura 4).

Figura 4. Os itens na fatura
Screenshot of the formatted list of items with quantities, prices and totals

Ao organizar células de texto logicamente, você recriou a fatura da Web em um formato adequado para a impressão. O TCPDF permite adicionar suporte para a criação de PDFs a páginas da Web em PHP, sem necessitar de mudanças na página em si ou nos dados subjacentes.


Resumo

Neste artigo, apresentamos o TCPDF, uma popular biblioteca PHP para gerar documentos PDF. Ele faz isso sem exigir bibliotecas adicionais, o que o torna fácil de instalar como parte de um Web site existente em PHP. Apresentamos uma visão geral da instalação e configuração do TCPDF em sistemas semelhantes a UNIX. Em seguida, criamos uma simples fatura baseada na Web, semelhante ao tipo de coisa que poderia ser vista em um site de e-commerce especializado em bebidas quentes exóticas.

Com uma página da Web que se parecia com uma fatura profissional, estendemos a classe TCPDF para produzir uma versão em PDF da fatura, que o cliente poderia então transferir por download ou imprimir, como quisesse. Sobrescrever os métodos Header e Footer permite configurar a página de maneira familiar. Em seguida, escrevemos um método adicional para organizar os itens da fatura em uma tabela.


Download

DescriçãoNomeTamanho
Article source codeos-tcpdf-CreatingPDFs-Invoice.zip21KB

Recursos

Aprender

Obter produtos e tecnologias

Discutir

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Software livre
ArticleID=513812
ArticleTitle=Crie PDFs na hora usando TCPDF
publish-date=08272010