Eu tenho vários arquivos PDF que contêm duas páginas "reais" em uma única página PDF; Eu gostaria de cortá-las ao meio e colocar cada metade em uma página separada. Essencialmente, preciso de algo que faça exatamente o oposto de pdfnup
(ou psnup
). Como esse feito pode ser alcançado?
A plataforma é Linux, preferencialmente de código aberto; como eu tenho uma grande pilha deles para fazer algo que possa ser script (ao contrário de uma GUI) seria bom, então eu posso apenas dar uma lista deles e fazer com que eles sejam eliminados.
Um script pré-existente também não é a única opção; se houver um código de exemplo para manipular PDFs de maneira semelhante a uma biblioteca de terceiros, provavelmente eu posso invadir o arquivo para fazer o que eu quero.
fonte
Respostas:
Você pode resolver isso com a ajuda do Ghostscript.
pdftk
sozinho não pode fazer isso (tanto quanto sei). Darei a você as etapas da linha de comando para fazer isso manualmente. Será fácil escrever isso como um procedimento, também com parâmetros diferentes para tamanhos e números de páginas. Mas você disse que pode fazer isso sozinho ;-)Como resolver isso com a ajuda do Ghostscript ...
... e, por diversão, recentemente fiz isso não com um arquivo de entrada com páginas "dobradas", mas com um "triplo". Você pode ler a resposta para este caso aqui .
Seu caso é ainda mais simples. Você parece ter algo parecido com isto:
Você deseja criar 1 PDF com 4 páginas, cada uma com o tamanho de 421 pt x 595 pt.
Primeiro passo
Vamos primeiro extrair as seções esquerdas de cada uma das páginas de entrada:
O que esses parâmetros fizeram?
Primeiro, saiba que no PDF 1 polegada == 72 pontos . Então o resto é:
-o ...............:
Nomeia o arquivo de saída. Implicitamente também usa-dBATCH -dNOPAUSE -dSAFER
.-sDEVICE=pdfwrite :
queremos PDF como formato de saída.-g................:
define o tamanho da mídia de saída em pixels. A resolução padrão do pdfwrite é 720 dpi. Portanto, multiplique por 10 para obter uma correspondência para o PageOffset.-c "..............:
solicita ao Ghostscript que processe o snippet de código PostScript fornecido antes do arquivo de entrada principal (que precisa ser seguido-f
).<</PageOffset ....:
define o deslocamento da imagem da página no meio. (É claro que, para as páginas da esquerda, a troca por[0 0]
não tem efeito real.)-f ...............:
processe esse arquivo de entrada.Qual resultado o último comando alcançou?
Este:
Segundo passo
A seguir, as seções corretas:
Observe o deslocamento negativo, pois estamos deslocando a página para a esquerda enquanto mantemos a área de visualização estacionária.
Resultado:
Último passo
Agora combinamos as páginas em um arquivo. Poderíamos fazer isso com o ghostscript também, mas usaremos em
pdftk
vez disso, porque é mais rápido para este trabalho:Feito. Aqui está o resultado desejado. 4 páginas diferentes, tamanho 421x595 pt.
Resultado:
fonte
421
->-421
). ;-)Existe uma ferramenta pdfposter que pode ser usada para criar PDFs com várias páginas para uma página de entrada (lado a lado ou cortando as páginas). É semelhante à ferramenta
poster
, que faz o mesmo para arquivos PostScript.fonte
Então, depois de muito mais pesquisa (parece que "páginas cortadas em PDF" é uma pesquisa muito melhor), encontrei um pequeno script chamado
unpnup
que usaposter
, conversão de PDF / PS epdftk
para fazer exatamente o que preciso. É um pouco longo, mas é muito superior aos outros métodos que encontrei (como usar o imagemagick) porque não rasteriza as páginas antes de cuspi-las.Caso o mobileread desapareça por algum motivo, o núcleo do script (licenciado sob a GPLv2 ou mais recente por Harald Hackenberg
<hackenberggmx.at>
) é o seguinte:fonte
PDF => EPS => PDF
rota arriscada e segue oPDF => PDF => PDF
caminho mais seguro .Achei a resposta de Kurt Pfeifle muito útil para minha situação semelhante. Pensei em compartilhar minha modificação da solução com outras pessoas ...
Eu também tinha um PDF digitalizado com 2 páginas em cada folha. Foi uma digitalização de 11 x 8,5 (polegadas) de um livreto costurado na sela que foi grampeado quando digitalizado originalmente; portanto: página 1 do PDF = contracapa e capa; Página 2 do PDF = páginas 2 e 3, etc. Isso lê bem na tela, mas você não pode imprimi-lo e grampá-lo para fazer mais cópias do livreto.
Eu precisava imprimir isso em uma copiadora duplex; ou seja, transformá-lo em um PDF "imposto", pronto para impressão. Então, usando a solução de Kurt, criei esse (ahem) "one-liner" para convertê-lo novamente em meia página, na ordem correta da página novamente. Ele funcionará para qualquer altura e largura e também para qualquer número de páginas. No meu caso, eu tinha um livreto de 40 páginas (20 páginas digitalizadas no PDF).
Você só precisa alterar os primeiros parâmetros neste comando para especificar HEIGHT, WIDTH e ORIG_FILE_PATH. O restante do comando calcula os vários tamanhos e chama gs duas vezes, depois pdftk. Contará até as páginas em sua digitalização e produzirá a especificação de classificação correta (para o cenário que eu dei).
Ele produz algum progresso sobre o que está fazendo, que será assim:
Em seguida, para obter a imposição de página necessária para um livreto impresso, basta "imprimir" pedidos.pdf em um tamanho de página personalizado exatamente do tamanho que você precisa (no meu exemplo, 5,5 x 8,5), enviando-o para uma "criação de livreto" "(no meu caso, usei o Create Booklet for Mac de Christoph Vogelbusch em http://download.cnet.com/Create-Booklet/3000-2088_4-86349.html ).
O PDF resultante agora estará de volta ao tamanho da página original de 11 x 8,5 com 2 páginas por folha, mas a ordem será tal que você poderá imprimi-lo em frente e verso, encadernação pela borda curta e pronto! você terá uma impressão que poderá fotocopiar, dobrar e encadernar, reproduzindo o livreto original sem nunca desmontar (ou mesmo necessariamente ver) o original.
Espero que isso ajude alguém!
-c
fonte
Com base na resposta dos piptas acima:
No Windows, para dividir PDFs em tamanho de carta com uma única imagem de capa no início, o seguinte funcionou muito bem para mim (observe o uso de [-612 0] na segunda etapa, um valor positivo criou páginas em branco porque era errado. .)
gswin32c -o left-sections.pdf -sDEVICE=pdfwrite -dFirstPage=2 -g6120x7920 -c "<</PageOffset [0 0]>> setpagedevice" -f input.pdf
Observe o uso do
-dFirstPage=2
qual instrui o gs a iniciar o processamento na página 2.gswin32c -o right-sections.pdf -sDEVICE=pdfwrite -dFirstPage=2 -g6120x7920 -c "<</PageOffset [-612 0]>> setpagedevice" -f input.pdf
Isso cria seções-direita.pdf da mesma maneira. E agora a imagem da capa:
gswin32c -o cover.pdf -sDEVICE=pdfwrite -dLastPage=1 -g6120x7920 -c "<</PageOffset [0 0]>> setpagedevice" -f input.pdf
Em seguida, como não queria mesclar com o pdftk usando a entrada manual de páginas, divida as seções esquerda e direita em PDFs separados em um novo diretório.
Então, ingresso nos PDFs nesse diretório, em ordem alfabética (e felizmente isso significa que eles estão classificados na ordem certa!) E também executo o resultado no ghostscript novamente para corrigir "Aviso: Número da geração fora do intervalo de 0..65535, assumindo 0. " erros produzidos pelo pdftk, que o ghostscript chamou "itext-paulo-155 (itextpdf.sf.net-lawagie.com)" - também passou a reduzir pela metade o tamanho do arquivo em meu uso. Com um original de 4,5 MB, o resultado do pdftk foi de 6,7 MB e o reprocessamento do gswin32c reduziu para 3,2 MB.
E nós terminamos! Sinta-se à vontade para excluir a pasta input_file, cover.pdf, input_temp.pdf, right_sections.pdf e left_sections.pdf. ;-)
fonte
se você só precisa imprimir os PDFs do lado esquerdo em um documento e os PDFs do lado direito em um documento, o script a seguir, com base na resposta de Kurt Pfeifle, fará o truque (funciona para qualquer altura e largura):
em seguida, execute-o assim:
fonte