Juntar / converter vários ficheiros PDF num único PDF
Como poderia fundir / converter vários ficheiros PDF num ficheiro PDF grande?
tentei o seguinte, mas o conteúdo do ficheiro alvo não era o esperado:
convert file1.pdf file2.pdf merged.pdf
Preciso de uma solução simples / básica de linha de comando (CLI). O melhor seria se eu pudesse encaminhar a saída da junção / conversão para pdf2ps
(Como foi inicialmente tentado na minha pergunta anterior aqui: piping Linux (convert - > pdf2ps - > lp) ).
16 answers
Considerando que pdfunite
faz parte do poppler que tem uma maior chance de ser instalado, o uso também é mais simples do que pdftk
:
pdfunite in-1.pdf in-2.pdf in-n.pdf out.pdf
Tenta o bom ghostscript:
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=merged.pdf mine1.pdf mine2.pdf
Ou mesmo desta forma para uma versão melhorada para PDFs de baixa resolução (graças a Adriano para salientar isto):
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sOutputFile=merged.pdf mine1.pdf mine2.pdf
Em ambos os casos, a resolução ouput é muito mais elevada e melhor do que desta forma usando o convert:
convert -density 300x300 -quality 100 mine1.pdf mine2.pdf merged.pdf
Desta forma não precisaria de instalar mais nada, apenas trabalhar com o que já instalou no seu sistema (pelo menos ambos vêm por padrão no meu rhel).
Espero que isto ajuda,Atualização: Em Primeiro Lugar, obrigado por todos os seus comentários agradáveis!! apenas uma dica que pode funcionar para vocês, depois de pesquisar, eu encontrei um truque soberbo para encolher o tamanho de PDFs, eu reduzi com ele um PDF de 300 MB para apenas 15 MB com uma resolução aceitável! e tudo isto com o bom ghostscript, aqui está:
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -dDetectDuplicateImages -dCompressFonts=true -r150 -sOutputFile=output.pdf input.pdf
Saúde!!
Desculpa, Eu próprio consegui encontrar a resposta usando o google e um pouco de sorte:)
Para os interessados;
Instalei o pdftk (pdf toolkit) no nosso servidor debian, e usando o seguinte comando obtive a saída desejada:
pdftk file1.pdf file2.pdf cat output output.pdf
Ou
gs -q -sPAPERSIZE=letter -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=output.pdf file1.pdf file2.pdf file3.pdf ...
Isto por sua vez pode ser canalizado directamente para pdf2ps.
Also pdfjoin a.pdf b.pdf
will create a new b-joined.pdf
with the contents of a. pdf and B. pdf
Pode usar o comando convert directamente,
Por exemplo
convert sub1.pdf sub2.pdf sub3.pdf merged.pdf
Apache PDFBox http://pdfbox.apache.org/
Operação de concentração Este aplicativo irá pegar uma lista de documentos pdf e fundi-los, salvando o resultado em um novo documento.
Utilização: java-jar pdfbox-app-x.y.z.jar PDFMerger " Source PDF files (2 ..n)" "Target PDF file"
Usar as ferramentas PDF do python https://pypi.python.org/pypi/pdftools/1.0.6
Faz o Download do alcatrão.ficheiro gz e descomprimir e executar o comando abaixopython pdftools-1.1.0/pdfmerge.py -o output.pdf -d file1.pdf file2.pdf file3
Deve instalar o pyhton3 antes de executar o comando acima
Estas ferramentas suportam o seguinte
- adicionar
- inserir
- remover
- rodar
- Split
- juntar
- Zip
Você pode encontrar mais detalhes no link abaixo e é open source
Se quiser converter todas as imagens transferidas para um pdf então execute
convert img{0..19}.jpg slides.pdf
Você pode usar sejda-console , livre e de código aberto.
Abre-o e foge.sejda-console merge -f file1.pdf file2.pdf -o merged.pdf
Preserva marcadores, anotações de ligações, acroformas, etc.. na verdade, tem muitas opções com as quais você pode brincar, basta correr sejda-console merge -h
para vê-las todas.
Second the pdfunite
recommendation. Eu estava, no entanto, obtendo erros Argument list too long
Como eu estava tentando mesclar arquivos PDF > 2k.
Virei-me para o Python para isto e para dois pacotes externos: PyPDF2 (para lidar com todas as coisas relacionadas com o PDF) e natsort (para fazer um tipo "natural" dos nomes dos ficheiros do directório). Caso isto possa ajudar alguém.
from PyPDF2 import PdfFileMerger
import natsort
import os
DIR = "dir-with-pdfs/"
OUTPUT = "output.pdf"
file_list = filter(lambda f: f.endswith('.pdf'), os.listdir(DIR))
file_list = natsort.natsorted(file_list)
# 'strict' used because of
# https://github.com/mstamy2/PyPDF2/issues/244#issuecomment-206952235
merger = PdfFileMerger(strict=False)
for f_name in file_list:
f = open(os.path.join(DIR, f_name), "rb")
merger.append(f)
output = open(OUTPUT, "wb")
merger.write(output)
Aqui está um método que eu uso e que funciona e é fácil de implementar. Isto exigirá tanto as bibliotecas fpdf e fpdi que podem ser baixadas aqui:
require('fpdf.php');
require('fpdi.php');
$files = ['doc1.pdf', 'doc2.pdf', 'doc3.pdf'];
$pdf = new FPDI();
foreach ($files as $file) {
$pdf->setSourceFile($file);
$tpl = $pdf->importPage(1, '/MediaBox');
$pdf->addPage();
$pdf->useTemplate($tpl);
}
$pdf->Output('F','merged.pdf');
Eu sou tendencioso sendo um dos desenvolvedores do PyMuPDF (uma ligação em Python do MuPDF).
Você pode facilmente fazer o que quiser com ele (e muito mais). O código do esqueleto funciona assim:
#-------------------------------------------------
import fitz # the binding PyMuPDF
fout = fitz.open() # new PDF for joined output
flist = ["1.pdf", "2.pdf", ...] # list of filenames to be joined
for f in flist:
fin = fitz.open(f) # open an input file
fout.insertPDF(fin) # append f
fin.close()
fout.save("joined.pdf")
#-------------------------------------------------
É tudo. Várias opções estão disponíveis para selecionar apenas intervalos de páginas, manter uma tabela conjunta de conteúdo, reverter a sequência de páginas ou mudar a rotação de páginas, etc., etc.
Estamos em PyPi.
convert $(ls *.pdf) ../merged.pdf
Dar vários ficheiros de código a convert
leva a fundi-los num pdf comum. Este comando junta todos os ficheiros com a extensão .pdf
na pasta actual para merged.pdf
na pasta-mãe.
pdfunite
é bom juntar PDFs inteiros. Se você quiser, por exemplo, páginas 2-7 do file1.pdf and pages 1,3,4 from file2.pdf, você tem que usar pdfseparate
para dividir os arquivos em PDFs separados para cada página para dar a pdfunite
.
pdftk
é maior e mais lento e o Red Hat / Fedora não o embala por causa da sua dependência do gcj. Outros utilitários PDF têm Mono ou Python dependência. Descobri que qpdf
produziu um ficheiro de saída muito mais pequeno do que usar pdfseparate
e pdfunite
para montar páginas num formato PDF de 30 páginas, 970kB vs. 1,6450 kB. Dado que oferece muitas mais opções, a linha de comandos de qpdf
não é tão simples; o pedido original para juntar o ficheiro 1 e o ficheiro 2 pode ser realizado com
qpdf --empty --pages file1.pdf file2.pdf -- merged.pdf
As outras respostas são boas, mas se você não pode mesclar PDFs localmente, se você está em um ambiente de hospedagem compartilhado, ou por outras razões, eles não vão ajudá-lo.
Se está à procura de uma API para juntar PDFs remotamente, pode tentar api2pdf que tem um objectivo para juntar pdfs. A documentação é aqui .
Depois de pesquisar muitas das bibliotecas pdf disponíveis, a única coisa que funcionou perfeitamente para mim é
Https://libraries.io/npm/easy-pdf-merge
Requer que o Java 6 ou superior seja instalado, mas funciona perfeitamente. O Pdftk está cheio de insectos.
var merge = require('easy-pdf-merge');
merge(source_files,dest_file_path,function(err){
if(err)
return console.log(err);
console.log('Success');
});
Nota : isto não é cmd, mas você pode fazê-lo correr com comandos como aceitar nomes de ficheiros como argumentos da linha de comandos.