下面的代码为PDF转成PNG图片的代码,upload_house_image()函数
def upload_house_image(request):
from datetime import datetime
import fitz
url_list = [] # 因为PDF是多页图片,所以要用list类型将这些图片信息全部传入到前端显示
file = request.FILES.get('file') # 从前端获取file文件
name = file.name
time_name = datetime.now().strftime('%Y%m%d_%H%M%S%f')[:-4] # 这里是通过当前时间给文件命名
new_name = name.split('.') # 分割文件名名称
if new_name[-1] == 'pdf': # 如果文件类型为PDF
print("传入的文件为PDF")
new_name = time_name + "." + new_name[-1] # 这个输出的为含有时间字符串的名字,文件类型为new_name[-1],例如20200603_10250697.jpg
with open(os.path.join(settings.MEDIA_ROOT, new_name), 'wb') as fp: # 写入PDF文件
for chunk in file.chunks():
fp.write(chunk)
pdf = fitz.Document(os.path.join(settings.MEDIA_ROOT, new_name))
for pg in range(0, pdf.pageCount): #pdf.pageCount为页码
page = pdf[pg] # 获得每一页的对象,此处的pg为数字0、1、2、……
trans = fitz.Matrix(1.0, 1.0).preRotate(0)
pm = page.getPixmap(matrix=trans, alpha=False) # 获得每一页的流对象
PNG_name = time_name + '_%s'%pg + '.png' # 此处将png改成jpg也可以正常显示,但我这里还是跟原来代码一样
pm.writePNG(os.path.join(settings.MEDIA_ROOT, PNG_name)) # 保存图片
url = "http://" + request.get_host() + settings.MEDIA_URL + PNG_name
url_list.append(url)
pdf.close()
print(url_list)
return restful.result(data={'url_list':url_list})