views.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. from django.shortcuts import render
  2. from django.http import HttpResponse
  3. from .forms import *
  4. from django.views.decorators.csrf import csrf_exempt
  5. import os
  6. from bpconverter.settings import MEDIA_ROOT
  7. import PyPDF2
  8. import re
  9. import glob
  10. def handle_uploaded_file(f):
  11. print(dir(f.chunks))
  12. counter = 0
  13. with open(os.path.join(MEDIA_ROOT,f.name), 'wb+') as destination:
  14. counter = counter +1
  15. print(counter)
  16. for chunk in f.chunks():
  17. #print(chunk) ok. qualcosa carica
  18. destination.write(chunk)
  19. print("{}/out/*.pdf".format(MEDIA_ROOT))
  20. listtoremove = glob.glob("{}/out/*.pdf".format(MEDIA_ROOT))
  21. for ltr in listtoremove:
  22. print('removing:',ltr)
  23. os.remove(ltr)
  24. return os.path.join(MEDIA_ROOT,f.name)
  25. def esegue_conversione(inputfile):
  26. rec = re.compile('[A-Z]{6}\d{2}[A-Z]\d{2}[A-Z]\d{3}[A-Z]',flags=re.I)
  27. print('apertura file')
  28. pdfr=None
  29. numpdfr=0
  30. try:
  31. pdfr = PyPDF2.PdfReader(inputfile)
  32. except PyPDF2.errors.PdfReadError as pre:
  33. print('errore',pre)
  34. risultato = dict()
  35. if pdfr:
  36. print('numero di pagine',len(pdfr.pages))
  37. numpdfr=len(pdfr.pages)
  38. codicefiscale=None
  39. listapagine={} #contiene il codice fiscale e le pagine in cui e' stato trovato
  40. for i in range(0,len(pdfr.pages)):
  41. pagina = pdfr.pages[i]
  42. testo = pagina.extract_text(0)
  43. # il testo estratto e' tutto carattere.
  44. trovato=re.search(rec,testo)
  45. if trovato:
  46. print('trovato',trovato[0])
  47. if trovato[0] in listapagine:
  48. listapagine[trovato[0]].append(i)
  49. else:
  50. listapagine[trovato[0]] = list()
  51. listapagine[trovato[0]].append(i)
  52. risultato[trovato[0]] = ''
  53. for k in listapagine:
  54. # per ogni codice fiscale, genera le pagine che corrispondono (listapagine[k])
  55. print(k,listapagine[k])
  56. writer = PyPDF2.PdfWriter()
  57. for kk in listapagine[k]:
  58. print('pagine da salvare',kk)
  59. writer.add_page(pdfr.pages[kk])
  60. r = open("{}/out/{}.pdf".format(MEDIA_ROOT,k),'wb')
  61. writer.write(r)
  62. r.close()
  63. risultato[k] = {'file':"{}/out/{}.pdf".format(MEDIA_ROOT,k),'pagine':listapagine[k]}
  64. else: risultato['errore']=[]
  65. #rimozione del file
  66. os.remove(inputfile)
  67. print('risultato',risultato)
  68. return (risultato,numpdfr)
  69. @csrf_exempt
  70. def frontpage(request):
  71. listaccepted = list()
  72. listaccepted.append('195.110.154.210')
  73. listaccepted.append('195.110.154.213')
  74. print('x_real_ip',request.META['HTTP_X_REAL_IP'])
  75. print('http_host',request.META['HTTP_HOST'])
  76. '''
  77. auth = False
  78. if 'HTTP_X_REAL_IP' in request.META:
  79. print('presente X_REAL_IP',request.META['HTTP_X_REAL_IP'])
  80. if request.META['HTTP_X_REAL_IP'] in listaccepted:
  81. print('found presente X_REAL_IP',request.META['HTTP_X_REAL_IP'])
  82. auth = True
  83. else:
  84. if 'HTTP_HOST' in request.META:
  85. if request.META['HTTP_HOST'] in listaccepted:
  86. auth = True
  87. if not auth:
  88. return HttpResponse("Accesso Non Autorizzato", status=503, headers={})
  89. '''
  90. data = {}
  91. print('request.method',request.method)
  92. if request.method == 'POST':
  93. form = UploadFileForm(request.POST,request.FILES)
  94. print('form is valid',form.is_valid())
  95. if form.is_valid():
  96. nomefile = request.FILES['filecaricato']
  97. print('nome file',nomefile)
  98. filesalvato = handle_uploaded_file(nomefile)
  99. risultato = esegue_conversione(filesalvato)
  100. data['listafiles'] = risultato[0]
  101. data['numeropagine'] = risultato[1]
  102. print('dati passati al template',data)
  103. return render(request,'frontpage.html',data)