views.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  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. listaccepted.append('195.110.154.210')
  78. listaccepted.append('195.110.154.213')
  79. listaccepted.append('127.0.0.1')
  80. print(request.META)
  81. if 'x_real_ip'.upper() in request.META:
  82. print('x_real_ip',request.META['HTTP_X_REAL_IP'])
  83. if 'http_host'.upper() in request.META:
  84. print('http_host',request.META['HTTP_HOST'])
  85. if 'remote_address'.upper() in request.META:
  86. print('remote_addrews',request.META['REMOTE_ADDR'])
  87. auth = False
  88. if 'HTTP_X_REAL_IP' in request.META:
  89. print('presente X_REAL_IP',request.META['HTTP_X_REAL_IP'])
  90. if request.META['HTTP_X_REAL_IP'] in listaccepted:
  91. print('found presente X_REAL_IP',request.META['HTTP_X_REAL_IP'])
  92. auth = True
  93. if 'HTTP_HOST' in request.META:
  94. if request.META['HTTP_HOST'] in listaccepted:
  95. print('found presente HTTP_HOST',request.META['HTTP_HOST'])
  96. auth = True
  97. if 'REMOTE_ADDR' in request.META:
  98. if request.META['REMOTE_ADDR'] in listaccepted:
  99. print('found presente REMOTE_ADDR',request.META['REMOTE_ADDR'])
  100. auth = True
  101. if not auth:
  102. return HttpResponse("Accesso Non Autorizzato", status=503, headers={})
  103. data = {}
  104. print('request.method',request.method)
  105. if request.method == 'POST':
  106. form = UploadFileForm(request.POST,request.FILES)
  107. print('form is valid',form.is_valid())
  108. if form.is_valid():
  109. nomefile = request.FILES['filecaricato']
  110. print('nome file',nomefile)
  111. filesalvato = handle_uploaded_file(nomefile)
  112. risultato = esegue_conversione(filesalvato)
  113. data['listafiles'] = risultato[0]
  114. data['numeropagine'] = risultato[1]
  115. print('dati passati al template',data)
  116. return render(request,'frontpage.html',data)