2014-12-20 3 views
3

Я строю крошечный скрипт Python 2.7.9, который принимает список изображений JPEG в качестве ввода и выводит файл PDF. Я прибегая к помощи в течение нескольких часов, но не могу найти решение:Как использовать img2pdf как модуль

  • Я попытался pypdf, но это говорит, что я не PIL установлен, хотя у меня есть.
  • Я пробовал Reportlab, но размер страницы больше самого изображения, и я не смог найти способ его исправить. Я также считаю, что это трудно ...
  • Я попытался img2pdf, но не мог понять, как использовать его

Я действительно устал от всех этих библиотек, и я ищу для хорошей решение. Хорошее средство:

  • Как вещий как можно
  • подходит размер страницы размером изображения
  • Поддержка большого количества изображений (может быть, даже 500)
  • Easy достаточно

Если вы можете помогите с помощью модулей, которые я уже пробовал/примеры кода, было бы замечательно. Кроме того, если у вас есть опыт работы с модулем, я был бы рад, если бы вы могли поделиться им.

Edit:

Как указывается в комментариях, я решил дать еще один шанс img2pdf. Я использую следующий код из официального GitHub README:

import img2pdf 
pdf_bytes = img2pdf('test.jpg', dpi=150) 

Но он бросает исключение: `TypeError:«модуль»объект не вызываемая

ли кто-то знает, как использовать img2pdf как модуль к нескольким изображениям? `

+0

Вы говорите, что попробовали 'img2pdf'. Попробуйте еще немного и придумайте какой-нибудь скрипт. Если вы получите какую-либо ошибку, мы поможем вам. –

+1

Спасибо! Я попробую еще раз ... – ohad987

+0

@BhargavRao Я пытаюсь использовать этот код из описания GitHub: 'import img2pdf pdf_bytes = img2pdf ('test.jpg', dpi = 150)', но он выдает исключение: Объект '' module 'не является вызываемым'. Есть идеи? – ohad987

ответ

1

Ничто в коде GitHub не говорит мне, что этот модуль можно вызывать. Возможно, это ошибка в readme; они предназначены для примера использования функции convert. Попробуйте вместо этого:

import img2pdf 
pdf_bytes = img2pdf.convert(('test.jpg',), dpi=150, x=None, y=None) 

В the source code эта функция требует позиционных аргументов x и y:

def convert(images, dpi, x, y, title=None, author=None, creator=None, producer=None, 
      creationdate=None, moddate=None, subject=None, keywords=None, 
      colorspace=None, verbose=False): 

Но до тех пор, как вы предоставите dpi аргумент, он настроен с футляром по умолчанию, что делает его посмотрите (мне, по крайней мере), как и x, так и y были предназначены для факультативных аргументов:

if not x and not y: 
     pdf_x, pdf_y = 72.0*width/ndpi[0], 72.0*height/ndpi[1] 

Пакет, который вы получили на PIP, не обязательно идентичен коду GitHub. Вы можете попробовать его, не поставляя x и y в качестве аргументов convert, а также - или даже лучше найти исходный файл на своей собственной машине и проверить это самостоятельно.

+0

Прежде всего, большое спасибо за подробный ответ! Я пытался использовать 'convert', но это бросает мне действительно странное исключение:« Traceback (последний последний звонок): Файл «createpdf.py», строка 2, в pdf_bytes = img2pdf.convert ('example.jpg' , dpi = 150, x = Нет, y = Нет) Файл «C: \ Python279 \ lib \ site-packages \ img2pdf.py», строка 209, в конверте с открытым (imfilename, «rb») как im: IOError: [Errno 2] Нет такого файла или каталога: 'e'' Файл изображения существует, а сценарий + изображение находятся в одном каталоге. Есть ли у вас какие-либо сведения о том, что не так? Еще раз спасибо! – ohad987

+1

Глядя на источник снова, да: первый аргумент, как ожидается, будет итерабельным. Строки в Python являются итерабельными по их символам; вы должны передать его в списке или кортеже вместо этого (см. обновленный ответ). – Air

+0

Спасибо вам большое! Но опять же, есть еще одна проблема, которую я думаю, что вы не можете исправить - выходной файл PDF поврежден. Adobe Acrobat не может открыть его, но Foxit Reader может, и он показывает изображения [странно] (http://i.imgur.com/pW61opy.png). Я понятия не имею, что это происходит, и я попробовал несколько изображений JPG от Google, и он все еще не работает. Вероятно, это проблема с PIL, но я не знаю, как это исправить. В любом случае, спасибо за вашу помощь! @AirThomas – ohad987

Смежные вопросы