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) ).

Author: Community, 2010-03-24

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
 1052
Author: Hubert Kario, 2012-07-01 07:11:53

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!!
 421
Author: Gery, 2016-06-04 13:50:04

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.

 404
Author: alcohol, 2018-05-16 07:51:20

Also pdfjoin a.pdf b.pdf will create a new b-joined.pdf with the contents of a. pdf and B. pdf

 39
Author: rodrigob, 2013-04-18 17:24:32

Pode usar o comando convert directamente,

Por exemplo

convert sub1.pdf sub2.pdf sub3.pdf merged.pdf
 33
Author: Noor, 2014-05-17 11:33:39

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"

 11
Author: lumpchen, 2015-11-20 05:52:33

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 abaixo
python 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

Https://github.com/MrLeeh/pdftools

 9
Author: Ravikiran Reddy Kotapati, 2017-07-06 10:34:56

Se quiser converter todas as imagens transferidas para um pdf então execute

convert img{0..19}.jpg slides.pdf

 8
Author: Trupti Kini, 2014-01-13 12:00:19

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.

 7
Author: Andrea Vacondio, 2017-02-02 18:44:13

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)
 5
Author: Greg Sadetsky, 2017-06-13 18:03:00

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');
 4
Author: billynoah, 2017-11-27 16:03:48

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.
 4
Author: Jorj McKie, 2018-01-15 21:22:54
Gosto da ideia de Chasma, mas prefiro usar as vantagens de coisas como ...
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 .pdfna pasta actual para merged.pdf na pasta-mãe.

 3
Author: user3709983, 2015-05-16 08:34:05

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.

Nesse momento você provavelmente quer um programa com mais opções. É a melhor utilidade que encontrei para manipular PDFs. 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
 2
Author: skierpage, 2018-06-28 10:46:14

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 .

 0
Author: apexdodge, 2018-07-22 13:55:57

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.

 0
Author: Krishnadas PC, 2018-09-20 13:15:33