views.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  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. '''
  65. fino a qui e' tutto chiaro.
  66. il file elaborato viene salvato in out denetro la cartella MEDIA_ROOT
  67. '''
  68. else: risultato['errore']=[]
  69. #rimozione del file
  70. os.remove(inputfile)
  71. print('risultato',risultato)
  72. return (risultato,numpdfr)
  73. @csrf_exempt
  74. def frontpage(request):
  75. print(__name__)
  76. listaccepted = list()
  77. if 'REMOTE' in os.environ:
  78. remote = os.environ['REMOTE'].split(',')
  79. listaccepted.append('127.0.0.1')
  80. for r in remote:
  81. listaccepted.append(r)
  82. print(request.META)
  83. if 'x_real_ip'.upper() in request.META:
  84. print('x_real_ip',request.META['HTTP_X_REAL_IP'])
  85. if 'http_host'.upper() in request.META:
  86. print('http_host',request.META['HTTP_HOST'])
  87. if 'remote_address'.upper() in request.META:
  88. print('remote_addrews',request.META['REMOTE_ADDR'])
  89. auth = False
  90. if 'HTTP_X_REAL_IP' in request.META:
  91. print('presente X_REAL_IP',request.META['HTTP_X_REAL_IP'])
  92. if request.META['HTTP_X_REAL_IP'] in listaccepted:
  93. print('found presente X_REAL_IP',request.META['HTTP_X_REAL_IP'])
  94. auth = True
  95. if 'HTTP_HOST' in request.META:
  96. if request.META['HTTP_HOST'] in listaccepted:
  97. print('found presente HTTP_HOST',request.META['HTTP_HOST'])
  98. auth = True
  99. if 'REMOTE_ADDR' in request.META:
  100. if request.META['REMOTE_ADDR'] in listaccepted:
  101. print('found presente REMOTE_ADDR',request.META['REMOTE_ADDR'])
  102. auth = True
  103. if not auth:
  104. return HttpResponse("Accesso Non Autorizzato", status=503, headers={})
  105. data = {}
  106. print('request.method',request.method)
  107. if request.method == 'POST':
  108. form = UploadFileForm(request.POST,request.FILES)
  109. print('form is valid',form.is_valid())
  110. if form.is_valid():
  111. nomefile = request.FILES['filecaricato']
  112. print('nome file',nomefile)
  113. filesalvato = handle_uploaded_file(nomefile)
  114. risultato = esegue_conversione(filesalvato)
  115. data['listafiles'] = risultato[0]
  116. data['numeropagine'] = risultato[1]
  117. print('dati passati al template',data)
  118. return render(request,'frontpage.html',data)