2015-12-17 2 views
0

Мне нужно написать скрипт, который будет конвертировать изображения в pdf-файлы и объединить tchem в один.PyPDF2 append file issue

Я попытался использовать img2pdf и PYPDF2, но я получаю ошибки. Может кто-нибудь взглянуть и рассказать мне, что я делаю неправильно.

import img2pdf 
import os 
from PyPDF2 import PdfFileReader, PdfFileMerger, PdfFileWriter 

merger = PdfFileMerger() 
path = input() 

for root,dir,files in os.walk(path): 
     for eachfile in files: 
      if "pdf" not in eachfile: 
       os.chdir(root) 
       PDFfile = img2pdf.convert((eachfile,), dpi=None, x=None, y=None) 
       merger.append(fileobj=PDFfile) 
merger.write(open("out.pdf", "wb")) 

ОШИБКА

Traceback (most recent call last): 
    File "C:/Users/ms/Desktop/Desktop/test.py", line 13, in <module> 
    merger.append(fileobj=PDFfile) 
    File "C:\Python34\lib\site-packages\PyPDF2\merger.py", line 203, in append 
    self.merge(len(self.pages), fileobj, bookmark, pages, import_bookmarks) 
    File "C:\Python34\lib\site-packages\PyPDF2\merger.py", line 133, in merge 
    pdfr = PdfFileReader(fileobj, strict=self.strict) 
    File "C:\Python34\lib\site-packages\PyPDF2\pdf.py", line 1065, in __init__ 
    self.read(stream) 
    File "C:\Python34\lib\site-packages\PyPDF2\pdf.py", line 1660, in read 
    stream.seek(-1, 2) 
AttributeError: 'bytes' object has no attribute 'seek' 
+1

Какая ошибка вы получаете? Имеет ли это отношение к файлам, которые не найдены для открытия? –

+0

Вы должны использовать полный путь к вашим файлам, в противном случае они не могут быть найдены в каталоге. – toti08

+1

Можете ли вы показать сообщение об ошибке. – Zety

ответ

1

img2pdf.convert возвращает байт соответствующего PDF-файл (в виде строки?), А не обработчик файлов. Если вы прочитали help(merger.append), вы увидите, что вам нужно передать либо обработчик файла, либо путь к файлу PDF. Вот возможное решение. Вероятно, также возможно не создавать все промежуточные файлы PDF.

import img2pdf 
import os 
from PyPDF2 import PdfFileReader, PdfFileMerger, PdfFileWriter 
merger = PdfFileMerger() 
path = "/tmp/images" 

for root,dir,files in os.walk(path): 
     for eachfile in files: 
      if "pdf" not in eachfile: 
       os.chdir(root) 
       pdfbytes = img2pdf.convert((eachfile,), dpi=None, x=None, y=None) 
       pdfname = eachfile.split('.')[0]+".pdf" 
       f = open(pdfname, 'wb+') 
       f.write(pdfbytes) 
       merger.append(fileobj=f) 
       f.close() 

f = open("out.pdf", "wb") 
merger.write(f) 
f.close() 

Кстати, также было бы гораздо проще использовать обычные инструменты, такие как convert, pdfjam, pdftk.

+0

Он работает с f.close() в удаленной петле. Я знаю, что могу использовать инструмент, но более интересно писать свои собственные :) Кстати, как удалить каждый PDF после слияния и оставить onle объединенным? – MaciejPL