【问题标题】:Convert pdf to text without creating a file在不创建文件的情况下将 pdf 转换为文本
【发布时间】:2018-04-25 13:12:15
【问题描述】:

我想从网站下载 pdf 文件并使用文本。但是,我不想创建一个 pdf 文件然后将其转换为文本。我使用python请求。有没有什么办法可以直接在下面的代码后面获取文字?

res = requests.get(url, timeout=None)

【问题讨论】:

标签: python pdf text


【解决方案1】:

AFAIK,您至少必须创建一个临时文件,以便您可以 执行您的流程。

您可以使用以下代码获取/读取 PDF 文件并将其转换为 TEXT 文件。 这利用了 PDFMINER 和 Python 3.7。

from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import HTMLConverter,TextConverter,XMLConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
import io

def convert(case,fname, pages=None):
    if not pages:
        pagenums = set()
    else:
        pagenums = set(pages)
    manager = PDFResourceManager()
    codec = 'utf-8'
    caching = True
    output = io.StringIO()
    converter = TextConverter(manager, output, codec=codec, laparams=LAParams())
    interpreter = PDFPageInterpreter(manager, converter)
    infile = open(fname, 'rb')
    for page in PDFPage.get_pages(infile, pagenums, caching=caching, check_extractable=True):
        interpreter.process_page(page)

    convertedPDF = output.getvalue()
    print(convertedPDF)

    infile.close()
    converter.close()
    output.close()
    return convertedPDF

调用上述程序的主函数:

import os
import converter
import sys, getopt

class ConvertMultiple:
    def convert_multiple(pdf_dir, txt_dir):
        if pdf_dir == "": pdf_dir = os.getcwd() + "\\"  # if no pdfDir passed in
        for pdf in os.listdir(pdf_dir):  # iterate through pdfs in pdf directory
            print("File name is %s", os.path.basename(pdf))
            file_extension = pdf.split(".")[-1]
            print("file extension is %s", file_extension)
            if file_extension == "pdf":
                pdf_file_name = pdf_dir + pdf
                path = 'E:/pdf/' + os.path.basename(pdf)
                print(path)
                text = converter.convert('text', path)  # get string of text content of pdf
                text_file_name = txt_dir + pdf + ".txt"
                text_file = open(text_file_name, "w")  # make text file
                text_file.write(text)  # write text to text file


pdf_dir = "E:/pdf"
txt_dir = "E:/text"
ConvertMultiple.convert_multiple(pdf_dir, txt_dir)

当然你可以再调整一些,可能还有更多的改进空间,但是这个东西确实有效。

只需确保不提供 pdf 文件夹而是提供临时 pdf 直接存档。

希望这对您有所帮助..祝您编程愉快!

【讨论】:

    【解决方案2】:

    PyPDF2 工作正常如果你想要的只是文本

    在anaconda终端(或)cmd提示符下安装PyPDF2包https://pypi.org/project/PyPDF2/

    pip install PyPDF2

    您可以使用以下代码获取/读取 PDF 文件并将其转换为 TEXT 文件

    import PyPDF2
    from PyPDF2 import PdfFileReader, PdfFileWriter
    def getTextPDF(pdfFileName,password=''):
        pdf_file=open(pdfFileName,'rb')
        read_pdf=PyPDF2.PdfFileReader(pdf_file)
        if password !='':
            read_pdf.decrypt(password)
        text=[]
        for i in range(0,read_pdf.getNumPages()):
            text.append(read_pdf.getPage(i).extractText())
        return ('\n'.join (text).replace("\n",''))
    
    
    getText2PDF('0001.pdf')
    

    非常适合我

    【讨论】:

      【解决方案3】:

      如果您的 pdf 文件在 AWS S3(简单存储服务)中,请传递未签名的 URL。

      import boto3 
      from PyPDF2 import PdfFileReader 
      from io import BytesIO
      
      
      def extract_PDF(url): #URL where the pdf is stored online
      
          CF="https://<Bucket_name>.<Website>.com/"
          object_name = url.replace(CF,'')
          bucket_name="<Bucket_name>.<Website>.com"
      
          s3 = boto3.resource('s3')
          obj = s3.Object(bucket_name, object_name)
          fs = obj.get()['Body'].read()
          pdfFile = PdfFileReader(BytesIO(fs))
      
          text=""
          for page_no in range(len(pdfFile.pages)):
              page = pdfFile.getPage(page_no)
              text += page.extractText()
          text = text.replace('\n','')
          text = text.replace('  ','')
          return text
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-26
      相关资源
      最近更新 更多