0

Я пытаюсь преобразовать несколько изображений TIFF в один файл PDF, используя следующий код, но он не работает. os.system('convert "G:\xyz\abc\TitleDocumentsDownload\Output\abc\2009033100558001\1.tiff" "G:\xyz\abc\TitleDocumentsDownload\Output\abc\2009033100558001\2.tiff" "G:\xyz\abc\TitleDocumentsDownload\Output\abc\2009033100558001\3.tiff" "G:\xyz\abc\TitleDocumentsDownload\Output\abc\PDFs\2009033100558001.pdf"') Пакетное преобразование изображений TIFF в PDF ImageMagick Python

Но я получаю следующее сообщение об ошибке от os.system вызова:
недопустимый параметр - "G: \ Reonomy \ Acris \ TitleDocumentsDownload \ Output \ QN_15_65 \ 2009033100558001 \ 2.tiff"

И когда я запускаю точно такую ​​же команду в командной строке в окнах, файл PDF успешно создается со следующим предупреждающим сообщением:
convert.exe: Неизвестно поле с тегом 33000 (0x80e8). `TIFFReadDirecto ry '@ warning/tiff.c/TIFFWarnings/824.

Я не знаю, почему это происходит в Python. Любое быстрое решение было бы оценено.

ответ

0

Это хорошо работает для меня:

import os 
os.system('convert G:\xyz\abc\TitleDocumentsDownload\Output\abc\2009033100558001\1.tiff G:\xyz\abc\TitleDocumentsDownload\Output\abc\2009033100558001\2.tiff G:\xyz\abc\TitleDocumentsDownload\Output\abc\2009033100558001\3.tiff G:\xyz\abc\TitleDocumentsDownload\Output\abc\PDFs\2009033100558001.pdf') 

Вы можете попробовать и посмотреть, если есть ошибка? Вы используете первую команду на машине linux?

Это может произойти, потому что convert - это утилита Windows для изменения файловых систем. Прочтите ссылку this. Вы запускаете командную строку из папки ImageMagick?

Простейшим решением было бы переименовать файл convert.exe (ImageMagick) в другое, скажем, convertMagick.exe, а затем использовать то же самое в параметре os.system.

+0

Нет, я запускаю его на Windows 7-64bit –

+0

Проверьте изменения. –

0

Вот чистая реализация python, которую я взбивал, не полагаясь на ImageMagick. Он полагается только на PIL и reportlab. Он может работать в ограниченных средах, таких как Google App Engine.

def TIFF2PDF(tiff_str, max_pages = 200): 
    ''' 
    Convert a TIFF Image into a PDF. 

    tiff_str: The binary representation of the TIFF. 
    max_pages: Break after a number of pages. Set to None to have no limit. 
    ''' 
    import PIL 
    import reportlab 
    import reportlab.lib.pagesizes as pdf_sizes 
    from cStringIO import StringIO 
    logging.info("TIFF2PDF") 

    # Open the Image in PIL 
    tiff_img = PIL.Image.open(StringIO(tiff_str)) 

    # Get tiff dimensions from exiff data. The values are swapped for some reason. 
    height, width = tiff_img.tag[0x101][0], tiff_img.tag[0x100][0] 

    # Create our output PDF 
    out_pdf_io = StringIO() 
    c = reportlab.pdfgen.canvas.Canvas(out_pdf_io, pagesize = pdf_sizes.letter) 

    # The PDF Size 
    pdf_width, pdf_height = pdf_sizes.letter 

    # Iterate through the pages 
    page = 0 
    while True: 
    try: 
     tiff_img.seek(page) 
    except EOFError: 
     break 
    logging.info("Converting tiff page: %s"%page) 
    # Stretch the TIFF image to the full page of the PDF 
    if pdf_width * height/width <= pdf_height: 
     # Stretch wide 
     c.drawInlineImage(tiff_img, 0, 0, pdf_width, pdf_width * height/width) 
    else: 
     # Stretch long 
     c.drawInlineImage(tiff_img, 0, 0, pdf_height * width/height, pdf_height) 
    c.showPage() 
    if max_pages and page > max_pages: 
     logging.error("Too many pages, breaking early") 
     break 
    page += 1 

    logging.info("Saving tiff image") 
    c.save() 
    return out_pdf_io.getvalue() 
Смежные вопросы