def decrypt_pdf(src):
decrypted = TemporaryFile()
popen = subprocess.Popen(['qpdf', '--decrypt', '/dev/stdin', '-'],
stdin=src, stdout=decrypted, stderr=subprocess.PIPE)
stdout, stderr = popen.communicate()
if popen.returncode in (0, 3): # 0 == ok, 3 == warning
if popen.returncode == 3:
logger.warn('qpdf warning:\n%s', smart_bytes(stderr, errors='backslashreplace'))
else:
from ecs.users.utils import get_current_user
user = get_current_user()
logger.warn('qpdf error (returncode=%s):\nUser: %s (%s)\n%s', popen.returncode, user, user.email if user else 'anonymous', smart_bytes(stderr, errors='backslashreplace'))
raise ValueError('pdf broken')
decrypted.seek(0)
return decrypted
评论列表
文章目录