Объединить файлы PDF

Я сделал обыск, и ничто, похоже, не было напрямую связано с этим вопросом. Возможно ли, используя Python, объединить отдельные PDF-файлы?

Предположим, мне нужно расширить это немного дальше. Я надеюсь, что вы пройдете через папки в каталоге и повторите эту процедуру.

И я могу надавить свою удачу, но можно ли исключить страницу, содержащуюся в файлах PDF (мое поколение отчетов всегда создает дополнительную пустую страницу).

6 Solutions collect form web for “Объединить файлы PDF”

Использовать Pypdf :

Библиотека Pure-Python, созданная в виде инструментария PDF. Он способен:
* разбиение документов по страницам,
* объединение документов по страницам,

(и многое другое)

Пример двух pdf-файлов, объединенных в один файл с pyPdf:

# Loading the pyPdf Library from pyPdf import PdfFileWriter, PdfFileReader # Creating a routine that appends files to the output file def append_pdf(input,output): [output.addPage(input.getPage(page_num)) for page_num in range(input.numPages)] # Creating an object where pdf pages are appended to output = PdfFileWriter() # Appending two pdf-pages from two different files append_pdf(PdfFileReader(open("SamplePage1.pdf","rb")),output) append_pdf(PdfFileReader(open("SamplePage2.pdf","rb")),output) # Writing all the collected pages to a file output.write(open("CombinedPages.pdf","wb")) 

В новой библиотеке PyPdf2 есть класс PdfMerger , который можно использовать так.

пример:

 from PyPDF2 import PdfFileMerger pdfs = ['file1.pdf', 'file2.pdf', 'file3.pdf', 'file4.pdf'] merger = PdfFileMerger() for pdf in pdfs: merger.append(open(pdf, 'rb')) with open('result.pdf', 'wb') as fout: merger.write(fout) 

Кажется, что метод append требует ленивого файлового объекта. То есть, он не читает файл немедленно. Кажется, дождаться, пока не будет вызван метод write . Если вы используете открытую область (т.е. with ), она добавляет пустые страницы в результирующий файл, так как входной файл закрывается в этой точке.

Самый простой способ избежать этого, если время работы файлового дескриптора – проблема, – передать строки имени файла append и позволить ему обрабатывать время жизни файла.

т.е.

 from PyPDF2 import PdfFileMerger pdfs = ['file1.pdf', 'file2.pdf', 'file3.pdf', 'file4.pdf'] merger = PdfFileMerger() for pdf in pdfs: merger.append(pdf) merger.write("result.pdf") 

вам нужно использовать python? если вам просто нужно объединить ваши pdf-файлы, я бы посмотрел на pdftk

Возможно ли, используя Python, объединить отдельные PDF-файлы?

Да.

Следующий пример объединяет все файлы в одной папке в один новый файл PDF:

 #!/usr/bin/env python # -*- coding: utf-8 -*- from argparse import ArgumentParser from glob import glob from pyPdf import PdfFileReader, PdfFileWriter import os def merge(path, output_filename): output = PdfFileWriter() for pdffile in glob(path + os.sep + '*.pdf'): if pdffile == output_filename: continue print("Parse '%s'" % pdffile) document = PdfFileReader(open(pdffile, 'rb')) for i in range(document.getNumPages()): output.addPage(document.getPage(i)) print("Start writing '%s'" % output_filename) with open(output_filename, "wb") as f: output.write(f) if __name__ == "__main__": parser = ArgumentParser() # Add more options if you like parser.add_argument("-o", "--output", dest="output_filename", default="merged.pdf", help="write merged PDF to FILE", metavar="FILE") parser.add_argument("-p", "--path", dest="path", default=".", help="path of source PDF files") args = parser.parse_args() merge(args.path, args.output_filename) по #!/usr/bin/env python # -*- coding: utf-8 -*- from argparse import ArgumentParser from glob import glob from pyPdf import PdfFileReader, PdfFileWriter import os def merge(path, output_filename): output = PdfFileWriter() for pdffile in glob(path + os.sep + '*.pdf'): if pdffile == output_filename: continue print("Parse '%s'" % pdffile) document = PdfFileReader(open(pdffile, 'rb')) for i in range(document.getNumPages()): output.addPage(document.getPage(i)) print("Start writing '%s'" % output_filename) with open(output_filename, "wb") as f: output.write(f) if __name__ == "__main__": parser = ArgumentParser() # Add more options if you like parser.add_argument("-o", "--output", dest="output_filename", default="merged.pdf", help="write merged PDF to FILE", metavar="FILE") parser.add_argument("-p", "--path", dest="path", default=".", help="path of source PDF files") args = parser.parse_args() merge(args.path, args.output_filename) по #!/usr/bin/env python # -*- coding: utf-8 -*- from argparse import ArgumentParser from glob import glob from pyPdf import PdfFileReader, PdfFileWriter import os def merge(path, output_filename): output = PdfFileWriter() for pdffile in glob(path + os.sep + '*.pdf'): if pdffile == output_filename: continue print("Parse '%s'" % pdffile) document = PdfFileReader(open(pdffile, 'rb')) for i in range(document.getNumPages()): output.addPage(document.getPage(i)) print("Start writing '%s'" % output_filename) with open(output_filename, "wb") as f: output.write(f) if __name__ == "__main__": parser = ArgumentParser() # Add more options if you like parser.add_argument("-o", "--output", dest="output_filename", default="merged.pdf", help="write merged PDF to FILE", metavar="FILE") parser.add_argument("-p", "--path", dest="path", default=".", help="path of source PDF files") args = parser.parse_args() merge(args.path, args.output_filename) 

здесь, http://pieceofpy.com/2009/03/05/concatenating-pdf-with-python/ , дает решение.

по аналогии:

 from pyPdf import PdfFileWriter, PdfFileReader def append_pdf(input,output): [output.addPage(input.getPage(page_num)) for page_num in range(input.numPages)] output = PdfFileWriter() append_pdf(PdfFileReader(file("C:\\sample.pdf","rb")),output) append_pdf(PdfFileReader(file("c:\\sample1.pdf","rb")),output) append_pdf(PdfFileReader(file("c:\\sample2.pdf","rb")),output) append_pdf(PdfFileReader(file("c:\\sample3.pdf","rb")),output) output.write(file("c:\\combined.pdf","wb")) 

Библиотека pdfrw может сделать это довольно легко, предполагая, что вам не нужно сохранять закладки и аннотации, а ваши PDF-файлы не зашифрованы. cat.py – пример сценария конкатенации, а subset.py – примерный сценарий подмножества страниц.

Соответствующая часть скрипта конкатенации предполагает, что inputs представляют собой список входных имен файлов, а outfn – это имя выходного файла:

 from pdfrw import PdfReader, PdfWriter writer = PdfWriter() for inpfn in inputs: writer.addpages(PdfReader(inpfn).pages) writer.write(outfn) 

Как вы можете видеть из этого, было бы довольно легко оставить последнюю страницу, например, что-то вроде:

  writer.addpages(PdfReader(inpfn).pages[:-1]) 

Отказ от ответственности: я являюсь основным автором pdfrw .

  • Разделы аннотации из pdf
  • Относительное связывание файлов в PDF (Reportlab)
  • Как загрузить pdf-файл через https с помощью python
  • как внедрять шрифты в PDF-файлы, созданные matplotlib?
  • Невозможно отредактировать текст в диаграмме, экспортируемой Matplotlib, и открыть в Illustrator
  • python ghostscript не закрывает выходной файл
  • Python Wand конвертирует из PDF в JPG фон неправильно
  • Как найти все PDF-файлы на основе изображений?
  • Python - лучший язык программирования в мире.