PA_Vorlage/test-server/main.py

61 lines
1.6 KiB
Python
Executable File

#!/usr/bin/env python3
"""
Host a simple Flask server and print the POST of any request to the terminal
"""
from flask import Flask, request
import sys
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdftypes import resolve1
from pdfminer.psparser import PSLiteral
import json
import io
app = Flask(__name__)
# Decode FDF data and print to terminal
@app.route('/', methods=['POST'])
def post():
data = io.BytesIO(request.data)
# Decode the data
parser = PDFParser(data)
doc = PDFDocument(parser)
FDF = resolve1(doc.catalog['FDF'])
fields = resolve1(FDF.get('Fields'))
for i in fields:
field = resolve1(i)
value_psl: PSLiteral | bytes = field.get('V')
value = ''
if isinstance(value_psl, PSLiteral):
if value_psl.name.startswith('\\376\\377'): # Like: \\376\\377\\000p\\000e\\000r\\000s\\000o\\000n
value = ''.join(
c for c in value_psl.name.replace('\\376\\377', '').split('\\000') if c
)
else:
value = value_psl.name
elif isinstance(value_psl, bytes):
if value_psl.startswith(b'\xfe\xff'):
value = value_psl.decode('utf-16-be')
elif value_psl.startswith(b'\xff\xfe'):
value = value_psl.decode('utf-16-le')
else:
value = value_psl.decode('utf-8')
else:
print(f'Unknown type: {type(value_psl)}')
key = field.get('T').decode('utf-8')
print(f'{key}: {value}')
return '', 204
if __name__ == '__main__':
app.run(host='127.0.0.1', port=5000)