ARSPDF - Programa para manipular arquivos PDF
Publicado por Alexandre Rodrigues dos Santos (última atualização em 11/11/2023)
[ Hits: 2.953 ]
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
Informações sobre o computador
Script para listar tentativas de acessos
dep-info - verificar se o programa está instalado no sistema
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (16)
Arch Linux - Guia para Iniciantes (2)
Problemas ao instalar o PHP (11)
Tenho dois Link's ( IP VÁLIDOS ), estou tentando fazer o failover... (0)