Чтение PDF с помощью ImageMagick было отключено из-за уязвимости безопасности Ghostscript имел .Проблема заключается в дизайне, и смягчение безопасности от команды ImageMagick будет существовать до.ImageMagick снова позволяет Ghostscript обрабатывать PDF-файлы и обновлять Google Cloud Functions до этой новой версии ImageMagick с включенной обработкой PDF.
Нет исправления проблемы ImageMagick / Wand в GCF, которую я мог бы найти, но как обходной путь дляПреобразование PDF-файлов в изображения в Google Cloud Functions позволяет использовать эту [оболочку ghostscript] [2], чтобы напрямую запросить преобразование PDF-файла в изображение с помощью Ghostscript и обойти ImageMagick / Wand.Затем вы можете загрузить PNG в ImageMagick или OpenCV без проблем.
needs.txt
google-cloud-storage
ghostscript==0.6
main.py
# create a temp filename and save a local copy of pdf from GCS
_, temp_local_filename = tempfile.mkstemp()
gcs_blob = STORAGE_CLIENT.bucket('XXXX').get_blob(results["storedLocation"])
gcs_blob.download_to_filename(temp_local_filename)
# create a temp folder based on temp_local_filename
temp_local_dir = tempfile.mkdtemp()
# use ghostscript to export the pdf into pages as pngs in the temp dir
args = [
"pdf2png", # actual value doesn't matter
"-dSAFER",
"-sDEVICE=pngalpha",
"-o", temp_local_dir+"page-%03d.png",
"-r300", temp_local_filename
]
# the above arguments have to be bytes, encode them
encoding = locale.getpreferredencoding()
args = [a.encode(encoding) for a in args]
#run the request through ghostscript
ghostscript.Ghostscript(*args)
# read the files in the tmp dir and process the pngs individually
for png_file_loc in glob.glob(temp_local_dir+"*.png"):
# loop through the saved PNGs, load into OpenCV and do what you want
cv_image = cv2.imread(png_file_loc, cv2.IMREAD_UNCHANGED)
Надеюсь, это поможет кому-то столкнуться с той же проблемой.