server.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. from flask import Flask, escape, render_template, request, redirect
  2. from werkzeug.utils import secure_filename
  3. import PyPDF2
  4. import subprocess
  5. import sys
  6. app = Flask(__name__)
  7. def pdf_check(file):
  8. try:
  9. pdf = PyPDF2.PdfFileReader(open(file, "rb"))
  10. except:
  11. return False
  12. else:
  13. return True
  14. def size_check(file):
  15. pdf = PyPDF2.PdfReader(open(file, "rb"))
  16. print(pdf.getDocumentInfo())
  17. ptSqr = pdf.getPage(0).mediaBox[2] * pdf.getPage(0).mediaBox[3]
  18. if ptSqr > 400000:
  19. print("A4 " + str(ptSqr))
  20. return "A4"
  21. elif ptSqr < 150000:
  22. print("Label " + str(ptSqr))
  23. return "label"
  24. else:
  25. print("Unknown paper size")
  26. return "unknown"
  27. def label_print(file):
  28. print("calling lpr command")
  29. print(" ".join(["lp", "-d", "Kyocera_Laser", "-o" "fit-to-page", file]), file=sys.stderr)
  30. subprocess.call(["lp", "-d", "Kyocera_Laser", "-o" "fit-to-page", file])
  31. @app.route('/')
  32. def root():
  33. return redirect("/upload", code=302)
  34. @app.route('/upload')
  35. def upload_page():
  36. return render_template('upload.html')
  37. @app.route('/uploader', methods = ['GET', 'POST'])
  38. def upload_file():
  39. if request.method == 'POST':
  40. f = request.files['file']
  41. file = "uploads/" + secure_filename(f.filename)
  42. f.save(file)
  43. if pdf_check(file):
  44. if size_check(file) == "A4":
  45. label_print(file)
  46. return redirect("/upload", code=302)
  47. return "great pdf but size is not A4"
  48. else:
  49. return "file is not a usable pdf"
  50. else:
  51. return redirect("/upload", code=302)