Como Unir dois ou vários PDFs com PHP e PDFTK e Mudar Fundo EM MASSA

Olá caros, ultimamente os dias andam deveras corridos, a ponto de não sobrar tempo pra estar alimentando o blog. Contudo, hoje sobrou um tempinho aqui e por isso vou postar aqui uma dica bacana. Nesse artigo vou mostrar algo que aprendi um tempo atrás, veja o que você vai aprender aqui:

  • Como Unir dois ou Vários PDfs em apenas um arquivo EM MASSA
  • Como mudar o Fundo (background) de um PDF EM MASSA

como unir pdfs com php e pdftk

Para iniciar a brincadeira, você precisará baixar o programinha PDFTK (https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/). Pode ser a versão Free. Baixe ele e instale-o na pasta raiz do drive C, pois é o que vou considerar nesse exemplo. Esse programinha PDFtk é bem interessante, possui uma interface visual e permite você fazer várias coisas com PDFs, veja o que consta no site: “split, merge, rotate, watermark, stamp and secure PDF pages and documents”. Contudo, nesse tutorial não vamos usar a interface gráfica do programa, mas vamos invocá-lo via PHP.

Além disso, note que vou rodar PHP localmente, então se você não tem um servidor web instalado em seu PC, você pode baixar o pacote Wamp (http://www.wampserver.com/en/). O Wamp é um pacote que já instala o servidor web Apache + Mysql + PHP para você, apenas clicando no botão “Next”, sem precisar configurar uma linha de código sequer. 🙂

Bom, agora que você já tem o PDFtk instalado e também o Wamp, vamos ao tutorial para unir PDFs em Massa.

Unindo PDFs em Massa

Para seguir, vou subentender que você tenha um PDF principal que deverá ser adicionado a vários outros PDFs. Vamos chamar esse PDF de base.pdf. E para deixar o cenário mais definido, vamos supor que você tenha 500 pdfs com os nomes artigo1.pdf, artigo2.pdf, artigo3.pdf, e assim sucessivamente. Acesse a pasta de instalação do seu Wamp server (geralmente é c:\wamp), navegue para dentro da pasta www e crie uma nova pasta chamada PDF. Transfira então todos os pdfs, tanto a base como os artigos, para dentro dessa pasta PDF.

Muito bem, Agora crie um arquivo chamado pdf-em-massa.php e dentro dele coloque os códigos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ini_set('max_execution_time', 1800);
set_time_limit(1800);
 
$total_de_artigos = 500;
$total_de_artigos++;
 
for($i=1;$i<$total_de_artigos;$i++){
 
    $file1 = ' c:\\wamp\\www\\PDF\\base.pdf';  
    $file2 = ' c:\\wamp\\www\\PDF\\artigo'.$i.'.pdf'; 
    
    $file3 = ' c:\\wamp\\www\\PDF\\novo\\artigo'.$i.'.pdf';  
    
    $command = "cmd /c C:\\PDFtk\\bin\\pdftk.exe {$file1} {$file2} cat output {$file3}";
        
    $result = exec($command);
        
}
ini_set('max_execution_time', 1800);
set_time_limit(1800);

$total_de_artigos = 500;
$total_de_artigos++;

for($i=1;$i<$total_de_artigos;$i++){

	$file1 = ' c:\\wamp\\www\\PDF\\base.pdf';  
	$file2 = ' c:\\wamp\\www\\PDF\\artigo'.$i.'.pdf'; 
	
	$file3 = ' c:\\wamp\\www\\PDF\\novo\\artigo'.$i.'.pdf';  
	
	$command = "cmd /c C:\\PDFtk\\bin\\pdftk.exe {$file1} {$file2} cat output {$file3}";
		
	$result = exec($command);
		
}

No código acima você, se seguiu o modelo que diretórios que eu propus no exemplo, só precisa mudar o valor 500 da variável $total_de_artigos para corresponder ao exato número de PDFS que você esteja trabalhando no momento.

Agora, para de fato executar os comandos, você deve acessar essa página através do seu navegador web. Para isso basta acessar: http://localhost/pdf-em-massa.php

Mas o que esse código está fazendo Anderson? Então, ele usa o comando exec do PHP e executa o programa PDFtk via linha de comando (cmd.exe) do windows. Então, na prática quem está unindo os PDFs é o PDFtk, mas você está chamando ele diretamente pelo PHP. Usando o PHP você consegue fazer o trabalho em Massa, que é o nosso objetivo aqui.

Lembrando que os novos PDFs serão salvos na pasta “novo” que será criada dentro da pasta PDF

E se eu quiser unir vários arquivos pdf, posso? Claro, veja o exemplo:

1
2
3
4
5
6
7
$file1 = ' c:\\wamp\\www\\PDF\\arq1.pdf';  
$file2 = ' c:\\wamp\\www\\PDF\\arq2.pdf'; 
$file3 = ' c:\\wamp\\www\\PDF\\arq3.pdf'; 
 
$novo = ' c:\\wamp\\www\\PDF\\novo\\novo.pdf';  
    
$command = "cmd /c C:\\PDFtk\\bin\\pdftk.exe {$file1} {$file2} {$file3} cat output {$novo}";
$file1 = ' c:\\wamp\\www\\PDF\\arq1.pdf';  
$file2 = ' c:\\wamp\\www\\PDF\\arq2.pdf'; 
$file3 = ' c:\\wamp\\www\\PDF\\arq3.pdf'; 

$novo = ' c:\\wamp\\www\\PDF\\novo\\novo.pdf';  
	
$command = "cmd /c C:\\PDFtk\\bin\\pdftk.exe {$file1} {$file2} {$file3} cat output {$novo}";

Nesse exemplo estou unindo 3 arquivos num único “novo.pdf”. Do mesmo modo você pode unir a quantidade de PDFs que você quiser, apenas usando essa mesma ideia.

Mudando o Fundo Background de PDFs em MASSA

Para isso, vc precisa ter um PDF já com o fundo desejado, e a ideia vai ser pegar esse PDF e usar como fundo do novo pdf destino. Veja o código:

1
2
3
4
5
6
7
8
9
10
11
12
$back = ' c:\\wamp\\www\\PDF\\back.pdf'; 
 
for($i=1;$i<$total_de_artigos;$i++){
 
    $file1 = ' c:\\wamp\\www\\PDF\\artigo'.$i.'.pdf';  
    $novo = ' c:\\wamp\\www\\PDF\\novo\\artigo'.$i.'.pdf';  
    
    $command = "cmd /c C:\\PDFtk\\bin\\pdftk.exe {$file1} background {$back} output {$novo}";
        
    $result = exec($command);
        
}
$back = ' c:\\wamp\\www\\PDF\\back.pdf'; 

for($i=1;$i<$total_de_artigos;$i++){

	$file1 = ' c:\\wamp\\www\\PDF\\artigo'.$i.'.pdf';  
	$novo = ' c:\\wamp\\www\\PDF\\novo\\artigo'.$i.'.pdf';  
	
	$command = "cmd /c C:\\PDFtk\\bin\\pdftk.exe {$file1} background {$back} output {$novo}";
		
	$result = exec($command);
		
}

Nesse exemplo, back.pdf é o PDF que quero pegar o Fundo

Por fim, note que se você for trabalhar com muitos PDFs, é interessante você colocar as linhas de código abaixo no topo da pagina php, para aumentar o tempo de execução. Note que o tempo é informado em segundos. No caso, 1800 seriam 30 minutos.

1
2
ini_set('max_execution_time', 1800);
set_time_limit(1800);
ini_set('max_execution_time', 1800);
set_time_limit(1800);

Bom, fica ai a dica, e até um próximo artigo.

Fique com Deus!

Como Unir dois ou vários PDFs com PHP e PDFTK e Mudar Fundo EM MASSA
4.8 (95.05%) 105 vote[s]

One Response

  1. pablo mezzomo fevereiro 7, 2019

Leave a Reply