복붙노트

[PYTHON] PDF를 이미지로 자동 변환

PYTHON

PDF를 이미지로 자동 변환

따라서 필자는 PDF 형식의 많은 데이터를 공개했지만 상태를 악화시키기 위해 대부분의 PDF 파일은 Office, 인쇄 / 팩스, 그리고 스캔 한 형식의 문자로 나타납니다 (우리 정부는 가장 좋은 eh?). 처음에 나는 미쳤다고 생각했지만 누군가가 스캐너에 제대로 올려 놓지 않은 것처럼 '기울어 진'수많은 PDF 파일을보기 시작했습니다. 그래서, 나는 그들에게서 실제 텍스트를 얻는 데있어서 가장 차선책을 찾았습니다. 각 페이지를 이미지로 바꾸는 것이 었습니다.

분명히 이것은 자동화 될 필요가 있으며 가능한 경우 Python을 사용하는 것을 선호합니다. Ruby 나 Perl이 어떤 형태의 구현을 가지고있어 너무 지나치다면, 나는 그 길을 갈 수있다. 나는 텍스트 추출을 위해 pyPDF를 시도했는데, 분명히 나에게 많은 도움이되지 못했다. 나는 swftools를 시도했지만, 그 이미지는 완전히 사용할 수 없다는 것을 부끄러워하고있다. 글꼴이 변환 과정에서 엉망이 된 것처럼 보입니다. 비교적 가벼우면서도 읽을 수있는 한 이미지 포맷을 신경 쓰지 않습니다.

해결법

  1. ==============================

    1.PDF가 정말로 스캔 된 이미지라면 PDF를 이미지로 변환하면 안되므로 PDF에서 이미지를 추출해야합니다. 대부분 PDF의 모든 데이터는 본질적으로 하나의 거대한 이미지이며 Acrobat에서 읽을 수 있도록 PDF로 상세하게 표시됩니다.

    PDF가 정말로 스캔 된 이미지라면 PDF를 이미지로 변환하면 안되므로 PDF에서 이미지를 추출해야합니다. 대부분 PDF의 모든 데이터는 본질적으로 하나의 거대한 이미지이며 Acrobat에서 읽을 수 있도록 PDF로 상세하게 표시됩니다.

    단순히 PDF에서 이미지를 찾고 바이트를 복사하는 간단한 방법을 시도해야합니다. PDF에서 JPG 추출. 거기에 코드가 죽은 간단하고 아마 PDF 파일에서 작동하지 않을 수십 가지 이유가 있습니다. 그러나 그렇게한다면 PDF 파일에서 이미지 데이터를 빠르고 쉽게 얻을 수 있습니다.

  2. ==============================

    2.예를 들어 전화를 걸 수 있습니다. pdftoppm을 명령 행에서 (또는 Python의 서브 프로세스 모듈을 사용하여) 생성 한 다음 결과 PPM 파일을 예를 들어를 사용하여 원하는 형식으로 변환하십시오. ImageMagick (다시, 하위 프로세스 또는 존재하는 경우 일부 바인딩 사용).

    예를 들어 전화를 걸 수 있습니다. pdftoppm을 명령 행에서 (또는 Python의 서브 프로세스 모듈을 사용하여) 생성 한 다음 결과 PPM 파일을 예를 들어를 사용하여 원하는 형식으로 변환하십시오. ImageMagick (다시, 하위 프로세스 또는 존재하는 경우 일부 바인딩 사용).

  3. ==============================

    3.Ghostscript는 PDF 파일을 이미지로 변환하는 데 이상적입니다. 그것은 신뢰할 수 있고 많은 구성 가능한 옵션이 있습니다. GPL 라이센스 또는 상업 라이센스 하에서도 사용 가능합니다. 명령 행에서 호출하거나 원시 API를 사용할 수 있습니다. 자세한 내용은:

    Ghostscript는 PDF 파일을 이미지로 변환하는 데 이상적입니다. 그것은 신뢰할 수 있고 많은 구성 가능한 옵션이 있습니다. GPL 라이센스 또는 상업 라이센스 하에서도 사용 가능합니다. 명령 행에서 호출하거나 원시 API를 사용할 수 있습니다. 자세한 내용은:

  4. ==============================

    4.다음은 .pdf 파일을 이미지로 변환하는 또 다른 방법입니다. 이미지 프린터를 사용하십시오. 나는 성공적으로 ImagePrinter Pro로 jpeg 이미지에 pdf를 "인쇄"하는 기능을 사용했습니다. 그러나 거기에는 많은 이미지 프린터가 있습니다. 당신이 좋아하는 것을 골라라. 일부 코드는 선택한 이미지 프린터와 이미지 프린터가 사용하는 표준 파일 저장 형식에 따라 약간 변경해야 할 수 있습니다.

    다음은 .pdf 파일을 이미지로 변환하는 또 다른 방법입니다. 이미지 프린터를 사용하십시오. 나는 성공적으로 ImagePrinter Pro로 jpeg 이미지에 pdf를 "인쇄"하는 기능을 사용했습니다. 그러나 거기에는 많은 이미지 프린터가 있습니다. 당신이 좋아하는 것을 골라라. 일부 코드는 선택한 이미지 프린터와 이미지 프린터가 사용하는 표준 파일 저장 형식에 따라 약간 변경해야 할 수 있습니다.

    import win32api
    import os
    
    def pdf_to_jpg(pdfPath, pages):
        # print pdf using jpg printer
        # 'pages' is the number of pages in the pdf
        filepath = pdfPath.rsplit('/', 1)[0]
        filename = pdfPath.rsplit('/', 1)[1]
    
        #print pdf to jpg using jpg printer
        tempprinter = "ImagePrinter Pro"
        printer = '"%s"' % tempprinter
        win32api.ShellExecute(0, "printto", filename, printer,  ".",  0)
    
        # Add time delay to ensure pdf finishes printing to file first
        fileFound = False
        if pages > 1:
            jpgName = filename.split('.')[0] + '_' + str(pages - 1) + '.jpg'
        else:
            jpgName = filename.split('.')[0] + '.jpg'
        jpgPath = filepath + '/' + jpgName
        waitTime = 30
        for i in range(waitTime):
            if os.path.isfile(jpgPath):
                fileFound = True
                break
            else:
                time.sleep(1)
    
        # print Error if the file was never found
        if not fileFound:
            print "ERROR: " + jpgName + " wasn't found after " + str(waitTime)\
                  + " seconds"
    
        return jpgPath
    

    결과 jpgPath 변수는 인쇄 된 PDF의 마지막 jpeg 페이지의 경로 위치를 알려줍니다. 다른 페이지를 가져와야하는 경우 경로를 수정하여 이전 페이지를 가져 오는 논리를 쉽게 추가 할 수 있습니다

  5. ==============================

    5.잉꼬 pdf_과 _jpg (pdf 파 th)

    잉꼬 pdf_과 _jpg (pdf 파 th)

          6     # 'pages' is the number of pages in the pdf
          7     filepath = pdfPath.rsplit('/', 1)[0]
    ----> 8     filename = pdfPath.rsplit('/', 1)[1]
          9 
         10     #print pdf to jpg using jpg printer
    

    IndexError : 목록 인덱스가 범위를 벗어났습니다.

  6. from https://stackoverflow.com/questions/2002055/converting-pdf-to-images-automatically by cc-by-sa and MIT license