Различие между txt-файлом и pdf-файлом
У меня есть приложение django и метод upload. И текстовая область, в которой будет возвращаться содержимое файла. Так что если загружен текстовый файл. Тогда в текстовой области будет видно содержимое текстового файла.
Теперь я пробую это также с изображением в pdf-файле. И я пробую это с консольным приложением. И это работает. Текст в pdf-файле извлекается.
Но теперь я пытаюсь сделать это с помощью общего метода загрузки. И тогда я получаю эту ошибку:
TypeError at /
image must be a wand.image.Image instance, not <UploadFile: UploadFile object (45)>
Request Method: POST
Request URL: http://127.0.0.1:8000/
Django Version: 4.1.1
Exception Type: TypeError
Exception Value:
image must be a wand.image.Image instance, not <UploadFile: UploadFile object (45)>
Exception Location: C:\Python310\lib\site-packages\wand\image.py, line 9310, in __init__
Raised during: main.views.ReadingFile
Python Executable: C:\Python310\python.exe
Python Version: 3.10.6
Так вот полный метод:
from django.shortcuts import render
from django.views import View
from django.http import HttpResponseRedirect
from .forms import ProfileForm
from .models import UploadFile
from .textFromImages import TextFromImage
from wand.image import Image as wi
from PIL import Image
import pytesseract
from django.conf import settings
import io
import os
class ReadingFile(View):
def get(self, request):
form = ProfileForm()
return render(request, "main/create_profile.html", {
"form": form
})
def post(self, request):
submitted_form = ProfileForm(request.POST, request.FILES)
content = ''
if submitted_form.is_valid():
uploadfile = UploadFile(image=request.FILES["upload_file"])
name_of_file = str(request.FILES['upload_file'])
uploadfile.save()
with open(os.path.join(settings.MEDIA_ROOT,
f"{uploadfile.image}"), 'r') as f:
print("Now its type is ", type(name_of_file))
# readinf PDF file
if name_of_file.endswith('.pdf'):
pdfFile = wi(uploadfile, resolution=300)
text_factuur_verdi = []
image = pdfFile.convert('jpeg')
imageBlobs = []
for img in image.sequence:
imgPage = wi(image=img)
imageBlobs.append(imgPage.make_blob('jpeg'))
for imgBlob in imageBlobs:
image = Image.open(io.BytesIO(imgBlob))
text = pytesseract.image_to_string(image, lang='eng')
text_factuur_verdi.append(text)
return text_factuur_verdi
# ENDING Reading pdf file
else:
content = f.read()
print(content)
return render(request, "main/create_profile.html", {
'form': ProfileForm(),
"content": content
})
return render(request, "main/create_profile.html", {
"form": submitted_form,
})
Мой вопрос: Что я должен изменить?
Спасибо
Это работает:
content = text_factuur_verdi
print(text_factuur_verdi)