ARSPDF - Programa para manipular arquivos PDF
Publicado por Alexandre Rodrigues dos Santos (última atualização em 11/11/2023)
[ Hits: 2.987 ]
Manipulação de arquivos PDF, utilizando o utilitário pdftk.
É possível dividir, juntar, extrair e rotacionar páginas em um arquivo PDF.
#!/bin/bash #declaração de funções #função para desenho do cabeçalho function des_cabecalho(){ echo '+==================================================================================================+' echo '| |||||||| |||||||| ||||||||| |||||||| |||||||||| |||||||| |' echo '| || || || || || || || || || || || |' echo '| || || || || || || || || || || |' echo '| || || || || || || || || || || || |' echo '| |||||||||| ||||||||| |||||||||| ||||||||| || || |||||||| |' echo '| || || || || || || || || || || |' echo '| || || || || || || || || || |' echo '| || || || || || || || || || |' echo '| || || || || ||||||||| || |||||||||| || |' echo '+==================================================================================================+' echo '| alexandre.arscm@gmail.com |' } #função para mostrar o menu principal function menu_principal(){ echo '+==================================================================================================+' echo '| INFOSERVICE COMPUTAÇÃO |' echo '| MANIPULAÇÃO DE ARQUIVOS PDF - Versão: 1.2 - 21/09/23 |' echo '| Requer: pdftk |' echo '+==================================================================================================+' echo '| MENU PRINCIPAL |' echo '+==================================================================================================+' echo '' echo ' 1 - Fracionar um arquivo PDF em partes menores' echo '' echo ' 2 - Extrair páginas de um arquivo PDF' echo '' echo ' 3 - Juntar vários arquivos PDF em arquivo único' echo '' echo ' 4 - Rotacionar páginas de arquivo PDF' echo '' echo ' 5 - Sair' echo '' read -n 1 -p ' Digite a opção: ' opcao } #cria um efeito de abertura for ((efeito=1; efeito<=100; efeito++)) do clear des_cabecalho barra=$barra'#' echo '+==================================================================================================+' echo "Carregando o programa: $efeito %" echo $barra echo '+==================================================================================================+' sleep 0.1 done #espera um tempo sleep 2 #inicia o looping do menu principal while : do #limpa a tela clear #desenha o cabeçalho des_cabecalho #desenha o menu principal menu_principal #OPÇÃPO 1, seleciona o fracionamento de PDF if [ $opcao = 1 ] then #cria as variáveis que serão utilizadas no script #variável com o nome do arquivo a ser fracionado nomepdf='' #variável informando a quantidade de páginas do arquivo a ser fracionado qtdpaginaspdf=0 #prefixo de saída das frações prefixosaida='' #variável que define o tamanho das frações em megabytes tamanhosaida=0 #variável que serve para controlar o número do arquivo das frações geradas contafracoes=0 #variável que armazena a lista de arquivos que fará parte de cada fração lista='' #variável que coloca zeros a frente do numero do arquivo corrente zeros_esquerda='' #variável que pega o tamanho do arquivo corrente dos que foram divididos do arquivo principal tamanhoarquivo=0 #variável que soma a lista de arquivos até atingir o tamanho máximo da fração somaarquivos=0 #variável que converte a soma dos arquivos em kilobates somaarquivoskb=0 echo '' echo '+==================================================================================================+' echo '| DADOS DO ARQUIVO PDF A SER FRACIONADO |' echo '| |' echo '| Obs. Campos com (*) são de preenchimento obrigatório. |' echo '+==================================================================================================+' echo '' #solicita a digitação do nome do arquivo de origem read -p 'Nome do arquivo (*): ' nomepdf #verifica se o nome do arquivo é válido if [ ! -e $nomepdf ] then echo '' echo 'Nome de arquivo inválido ou inexistente!' sleep 3 elif [ -z $nomepdf ] then echo '' echo 'Nome de arquivo inválido ou inexistente!' sleep 3 else echo '' echo '+==================================================================================================+' echo '| INFORMAÇÕES SOBRE O ARQUIVO SELECIONADO |' echo '+==================================================================================================+' pdfinfo $nomepdf echo '+==================================================================================================+' echo '' read -p 'Fracionar até a página nº (*): ' qtdpaginaspdf echo '' read -p 'Prefixo do arquivo de saída: ' prefixosaida echo '' read -p 'Tamanho dos arquivos de saída em megabytes: ' tamanhosaida echo '' #caso o usuário não digitar o prefíxo define como Parte prefixosaida=${prefixosaida:='Parte'} #caso o usuário não digitar nenhum valor coloca o padrão de 7MB tamanhosaida=${tamanhosaida:=7} #converte de megabytes para kilobates ((tamanhosaida=$tamanhosaida*1024)) echo '+==================================================================================================+' echo '' echo 'Processando o arquivo PDF de origem, isso pode demorar um pouco...' #separa o arquivo de origem em várias páginas pdftk $nomepdf burst echo '' echo 'Fracionando o arquivo PDF de origem, isso pode demorar um pouco...' #junta os grupos de páginas até o tamanho definido na variável de limite de saída for ((contapaginas=1; contapaginas<=$qtdpaginaspdf; contapaginas++)) do zeros_esquerda=$(printf "%04d" $contapaginas) lista=$lista'pg_'$zeros_esquerda'.pdf ' #calcula o tamanho do arquivo corrente em bytes tamanhoarquivo=$(stat -c %s 'pg_'$zeros_esquerda'.pdf') #soma o tamanho do arquivo corrente ao tamanho parcial ((somaarquivos=$somaarquivos+$tamanhoarquivo)) #converte a soma em kilobates ((somaarquivoskb=$somaarquivos/1024)) #se o grupo de arquivos juntados for maior que o limite de saída, grava uma fração if [ $somaarquivoskb -gt $tamanhosaida ] then #incrementa o número do arquivo de fração ((contafracoes+=1)) echo '' echo 'Gravando a fração nº: '$contafracoes pdftk $lista output $prefixosaida'_'$contafracoes'.pdf' #reinicia a lista de arquivos lidos lista=''; #reinicia a soma dos tamanhos dos arquivos somaarquivos=0; fi done #caso reste algum arquivo que sobrou do cálculo grava o mesmo em uma última fração menor if [ $somaarquivos -gt 0 ] then #incrementa o número do arquivo de fração ((contafracoes+=1)) echo '' echo 'Gravando a fração nº: '$contafracoes pdftk $lista output $prefixosaida'_'$contafracoes'.pdf' fi echo '' echo 'Limpando os arquivos temporários, isso pode demorar um pouco...' #exclui os arquivos temporários criados rm pg_*.pdf rm doc_data.txt echo '' echo 'Fracionamento concluído com sucesso!' #espera 5 segundos para retornar ao menu principal sleep 3 fi #fim do fracionamento fi #OPÇÃO 2, executa a extração de páginas do PDF if [ $opcao = 2 ] then #variável que armazena o nome do arquivo pdf a ser fracionado nomepdf='' paginasextrair='' nomesaida='' echo '' echo '+==================================================================================================+' echo '| DADOS DO ARQUIVO PDF DE ORIGEM |' echo '| |' echo '| Obs. Campos com (*) são de preenchimento obrigatório. |' echo '+==================================================================================================+' echo '' read -p 'Nome do arquivo (*): ' nomepdf if [ ! -e $nomepdf ] then echo '' echo 'Nome de arquivo inválido ou inexistente!' sleep 3 elif [ -z $nomepdf ] then echo '' echo 'Nome de arquivo inválido ou inexistente!' sleep 3 else echo '' read -p 'Página(s) a extrair Ex: 1 2 3 4-20 (*): ' paginasextrair echo '' read -p 'Nome do arquivo de saída (*): ' nomesaida echo '' echo '+==================================================================================================+' echo '' echo 'Extraindo as páginas selecionadas, aguarde o processamento ...' pdftk $nomepdf cat $paginasextrair output $nomesaida'.pdf' echo '' echo 'Páginas '$paginasextrair' extraídas com sucesso!' sleep 3 fi #fim da extração de páginas fi #OPÇÃO 3 - junta arquivos pdf em arquivo único if [ $opcao = 3 ] then nomespdfs='' nomesaida='' echo '' echo '+==================================================================================================+' echo '| DADOS DOS ARQUIVOS PDF A SEREM JUNTADOS |' echo '| |' echo '| Obs. Campos com (*) são de preenchimento obrigatório. |' echo '+==================================================================================================+' echo '' read -p 'Nomes dos arquivos separados por espaço (*): ' nomespdfs if [ "$nomespdfs" = "" ] then echo '' echo 'Necessário informar a lista de arquivos!' sleep 3 else echo '' read -p 'Nome do arquivo de saída (*): ' nomesaida echo '' #junta os arquivos pdfs em um único arquivo echo '' echo 'Juntando os arquivos, aguarde o processamento ...' pdftk $nomespdfs output $nomesaida'.pdf' echo '' echo 'Arquivos juntados com sucesso!' sleep 3 fi #fim da junção fi #OPÇÃO 4 - rotacionar páginas de arquivo pdf gerando um arquivo de resultado if [ $opcao = 4 ] then nomepdf='' nomesaida='' intervalo_pr='' intervalo_gi='' intervalo_po='' giro='' cmdgiro='' echo '' echo '+==================================================================================================+' echo '| DADOS DO ARQUIVO PDF QUE TERÁ PÁGINAS ROTACIONADAS |' echo '| |' echo '| Obs. Campos com (*) são de preenchimento obrigatório. |' echo '+==================================================================================================+' echo '' read -p 'Nome do arquivo (*): ' nomepdf if [ ! -e $nomepdf ] then echo '' echo 'Nome de arquivo inválido ou inexistente!' sleep 3 elif [ -z $nomepdf ] then echo '' echo 'Nome de arquivo inválido ou inexistente!' sleep 3 else echo '' echo '+==================================================================================================+' echo '| INFORMAÇÕES SOBRE O ARQUIVO SELECIONADO |' echo '+==================================================================================================+' pdfinfo $nomepdf echo '+==================================================================================================+' echo '' read -p 'Nome do arquivo de saída (*): ' nomesaida echo '' read -p 'Página(s) anterior(es) à(s) página(s) a ser(em) girada(s): ' intervalo_pr echo '' read -p 'Página(s) a ser(em) girada(s): ' intervalo_gi echo '' read -p 'Página(s) posterior(es) à(s) página(s) a ser(em) girada(s): ' intervalo_po echo '' read -p 'Rotacionar para posição 0, 90, 180 ou 270 graus: ' giro echo '' if [ $giro = 0 ] then cmdgiro='north' fi if [ $giro = 90 ] then cmdgiro='east' fi if [ $giro = 180 ] then cmdgiro='south' fi if [ $giro = 270 ] then cmdgiro='west' fi #rotaciona as páginas selecionadas echo '' echo 'Rotacionando a(s) página(s) indicada(s), aguarde o processamento ...' #comando de girar páginas pdftk $nomepdf cat $intervalo_pr $intervalo_gi$cmdgiro $intervalo_po output $nomesaida'.pdf' echo '' echo 'Páginas rotacionadas com sucesso!' sleep 3 fi #fim da rotação fi #se escolher a última opção, sai do programa if [ $opcao = 5 ] then echo '' echo '' echo ' --------------------------------' read -p ' Deseja sair do programa (Sim/Não)? ' -n 1 sair if [ $sair = 's' -o $sair = 'S' ] then clear exit fi fi done #Fim do script
Converte cada imagem (JPG, JPEG, PNG) em PDFs com o tamanho de papel definido (A4...)
[Nokia-3g] Configuração do Nokia Internet Stick CS 10
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Encontre seus arquivos facilmente com o Drill
Mouse Logitech MX Ergo Advanced Wireless Trackball no Linux
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Remoção de propaganda com o programa Comskip[AJUDA] (1)
Linux Lite Demorando Muito Para Ligar (0)
PC não liga no filtro de linha (3)