소스 검색

working on submit redis, read redis

bscheibel 4 년 전
부모
커밋
304f9dac35
5개의 변경된 파일247개의 추가작업 그리고 45개의 파일을 삭제
  1. 2 0
      app/__init__.py
  2. 7 3
      app/static/css/style.css
  3. 70 19
      app/templates/show_image.html
  4. 125 12
      app/test.html
  5. 43 11
      app/views.py

+ 2 - 0
app/__init__.py

@@ -1,7 +1,9 @@
 from flask import Flask
+from flask_cors import CORS
 
 app = Flask(__name__)
 app.debug = True
 app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0
+CORS(app)
 
 from app import views

+ 7 - 3
app/static/css/style.css

@@ -42,10 +42,7 @@ img {
 
 .column {
     flex: 1;
-
-    /*for demo purposes only */
     background: #f2f2f2;
-    /*border: 1px solid #e6e6e6;*/
     box-sizing: border-box;
 }
 .column-one {
@@ -70,4 +67,11 @@ height: 20px;
 position: absolute;
 left: 0px;
 top: 0px;
+}
+
+.frame {
+  flex: 1 1 auto;
+  border: 0;
+  height: 50%;
+  width: 100%;
 }

+ 70 - 19
app/templates/show_image.html

@@ -3,6 +3,7 @@
   <title>Dimension Extraction</title>
   <link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}"/>
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
+<script src="https://unpkg.com/pdfjs-dist@latest/build/pdf.min.js"></script>
 </head>
 
 <body>
@@ -12,10 +13,12 @@
             <h1>Drawing</h1>
             <p> <a href="http://localhost:5000/"> Upload another drawing </a> </p>
         {% if filename %}
-        <div class="images">
-            <img src="{{ url_for('send_file', filename=filename) }}" id="drawing"/>
-            <div class="red" ></div>
-        </div>
+             <div class="images">
+                <img id="drawing" src="{{ url_for('send_file', filename=filename) }}">
+             </div>
+         <!--   <input type="file" id="pdf-upload"/>
+            <hr/>
+            <canvas class="frame"></canvas>-->
         {% else %}
         <h1>no image for whatever reason</h1>
         {% endif %}
@@ -50,7 +53,7 @@
                 </table>
                 </form>
                 </font>
-        <div id="result">Result</div>
+        <div id="result">Result {{ number }}</div>
     </div>
     <!--<div class="split right">-->
     <div class="column column-three">
@@ -63,59 +66,107 @@
                 {% endfor %}
                 </table>
     </div>
+
 </div>
 
-<script>
+    <script>
+    function set_redis(key, value) {
+        $.ajax({
+            type: "POST",
+            url: "/redis/set/" + key + "/" + value,
+            data: "format=json",
+            dataType: "text",
+            success: function(data)
+            {
+                (data.GET);
+            }
+        });
+    }
+
+     function get_redis(key) {
+        $.ajax({
+            type: "GET",
+            url: "redis/get/" + key,
+            data: "format=json",
+            dataType: "text",
+            success: function(data)
+            {
+                $("#result").text(data.GET);
+            }
+        });
+    }
+
+    </script>
 
+<script>
 
-    let pos = $("#drawing").position();
 
     $(document).ready(function(){
 
         $("input[type=number]").on("change keyup input", function(){
+            var json_value = new Object();
+            json_value.name = $(this).attr('name');
+            json_value.input = $(this).val();
 
+            var key = 'last' + "_" +'{{filename}}';
 
-            var key = $(this).attr('name');
-            $("#result").text($(this).val());
-            $("#result").append($(this).attr('name'));
+            console.log(JSON.stringify(json_value));
 
+            var value = json_value;
+            set_redis(key, value);
         });
 
         $("input[type=checkbox]").on("change keyup input", function(){
 
            // Print entered value in a div box
            $("#result").text($(this).attr('name'));
+           set_redis(key, value);
 
         });
 
 
 
-        $("input#measurements").on("hover",function(){
+        $("input[type=number]").focus(function(){
 
             // highlight values, does not work so far
 
             var number = $(this).attr('name');
             var coords = $(this).attr('data-coords');
-            highlight_areas(coords, pos)
+            highlight_areas(coords);
+
+        });
+
+        $("input[type=number]").blur(function(){
+
+          $("div").removeClass("red");
 
         });
 
 
       function highlight_areas(coords){
 
-       let x = pos.left;
-       let y = pos.top;
-       console.log(coords)
+       let pos = $("#drawing").position();
+       let drawing_x = pos.left;
+       let drawing_y = pos.top;
+       let array_coords = coords.split(",");
+       let coords_x = parseFloat(array_coords[0]);
+       let coords_y = parseFloat(array_coords[1]);
+
+       let width = $("#drawing").width();
+       let height = $("#drawing").height();
+       let x = width*(coords_x/595)-60;
+       let y = height*(coords_y/842)+10;
+       console.log(width, height);
 
-        /*$('#yourdiv').append('<img src="/path/to/your/image.jpg"' + /
-        'style="width:auto;height:auto;position:absolute;' + /
-        'left:' + x + ';top:'+ y +'" />");*/
+       let $point = jQuery("<div class='red'/>").css({top: (drawing_y + y) + 'px', left: (drawing_x + x) + 'px'})
 
+        $(".images").append($point);
 
         };
 
      });
 
-   </script>
+ </script>
+
 
 </body>

+ 125 - 12
app/test.html

@@ -8,17 +8,6 @@
 
 
 
-
-        $('#getPos').on('click', function(){
-
-            var xRes = $('#xRes span'),
-                yRes = $('#yRes span'),
-                image = $('img#myImg');
-
-            xRes.html(image.offset().top);
-            yRes.html(image.offset().left);
-
-        });
 </body>
 </html>
 
@@ -44,4 +33,128 @@
 
 
 
-
+var url = "{{ url_for('send_file', filename=filename) }}";
+console.log(url);
+var file = url;
+var file_reader = new FileReader();
+typedarray = new Uint8Array(file);
+
+
+// Loaded via <script> tag, create shortcut to access PDF.js exports.
+var pdfjsLib = window['pdfjs-dist/build/pdf'];
+
+var loadingTask = pdfjsLib.getDocument({data : file});
+loadingTask.promise.then(function(pdf) {
+  console.log('PDF loaded');
+
+  // Fetch the first page
+  var pageNumber = 1;
+  pdf.getPage(pageNumber).then(function(page) {
+    console.log('Page loaded');
+
+    var scale = 1.5;
+    var viewport = page.getViewport({scale: scale});
+
+    // Prepare canvas using PDF page dimensions
+    var canvas = document.getElementById('the-canvas');
+    var context = canvas.getContext('2d');
+    canvas.height = viewport.height;
+    canvas.width = viewport.width;
+
+    // Render PDF page into canvas context
+    var renderContext = {
+      canvasContext: context,
+      viewport: viewport
+    };
+    var renderTask = page.render(renderContext);
+    renderTask.promise.then(function () {
+      console.log('Page rendered');
+    });
+  });
+}, function (reason) {
+  // PDF loading error
+  console.error(reason);
+});
+            <img src="{{ url_for('send_file', filename=filename) }}" id="drawing"/>
+
+</script>
+
+
+<script>
+var encoded_data = '{{ encoded_data }}';
+console.log(encoded_data);
+var pdf_data = atob(encoded_data);
+console_log(pdf_data);
+var pdfjsLib = window['pdfjs-dist/build/pdf'];
+
+
+var loadingTask = pdfjsLib.getDocument({pdf_data});
+loadingTask.promise.then(function(pdf) {
+  console.log('PDF loaded');
+
+  // Fetch the first page
+  var pageNumber = 1;
+  pdf.getPage(pageNumber).then(function(page) {
+    console.log('Page loaded');
+
+    var scale = 1.5;
+    var viewport = page.getViewport({scale: scale});
+
+    // Prepare canvas using PDF page dimensions
+    var canvas = document.getElementById('canvas');
+    var context = canvas.getContext('2d');
+    canvas.height = viewport.height;
+    canvas.width = viewport.width;
+
+    // Render PDF page into canvas context
+    var renderContext = {
+      canvasContext: context,
+      viewport: viewport
+    };
+    var renderTask = page.render(renderContext);
+    renderTask.promise.then(function () {
+      console.log('Page rendered');
+    });
+  });
+}, function (reason) {
+  // PDF loading error
+  console.error(reason);
+});
+
+
+
+</script>
+ document.querySelector("#pdf-upload").addEventListener("change", function(e){
+	var canvasElement = document.querySelector("canvas")
+	var file = e.target.files[0]
+	if(file.type != "application/pdf"){
+		console.error(file.name, "is not a pdf file.")
+		return
+	}
+
+	var fileReader = new FileReader();
+
+	fileReader.onload = function() {
+		var typedarray = new Uint8Array(this.result);
+
+		pdfjsLib.getDocument(typedarray).then(function(pdf) {
+			// you can now use *pdf* here
+			console.log("the pdf has ",pdf.numPages, "page(s).")
+			pdf.getPage(pdf.numPages).then(function(page) {
+				// you can now use *page* here
+				var viewport = page.getViewport(2.0);
+				var canvas = document.querySelector("canvas")
+				canvas.height = viewport.height;
+				canvas.width = viewport.width;
+
+
+				page.render({
+					canvasContext: canvas.getContext('2d'),
+					viewport: viewport
+				});
+			});
+
+		});
+	};
+
+	fileReader.readAsArrayBuffer(file);

+ 43 - 11
app/views.py

@@ -1,3 +1,4 @@
+#encoding
 from app import app
 from flask import request, redirect, url_for, send_from_directory, render_template
 import subprocess
@@ -7,6 +8,7 @@ import json
 import os
 import json
 import re
+import base64
 #https://medium.com/@emerico/convert-pdf-to-image-using-python-flask-2864fb655e01
 
 
@@ -27,7 +29,7 @@ def convert_pdf_img(filename):
 
 def extract_all(uuid, filename, db):
     #order_bounding_boxes_in_each_block.main(uuid, UPLOAD_FOLDER + "/" + filename)
-    subprocess.call(['python3','/home/bscheibel/PycharmProjects/dxf_reader/main.py', str(uuid),UPLOAD_FOLDER + "/" + filename, db, str(1)])
+    subprocess.call(['python3','/home/bscheibel/PycharmProjects/dxf_reader/main.py', str(uuid),UPLOAD_FOLDER + "/" + filename, db, str(0)])
 
 @app.route('/', methods=['GET', 'POST'])
 def upload_file():
@@ -52,6 +54,7 @@ def upload_file():
 @app.route('/show/<filename>&<uuid>')
 def uploaded_file(filename, uuid):
     file_out = "out.jpg"
+    #file_out = filename
     if request.method == 'POST':
         uuid = 433
     if filename.endswith(".pdf") or filename.endswith(".PDF"):
@@ -61,19 +64,34 @@ def uploaded_file(filename, uuid):
         #print(iso)
         isos = json.loads(db.get(str(uuid)+"isos"))
         dims = json.loads(db.get(str(uuid)+"dims"))
+        number_blocks = db.get(str(uuid)+"eps")
         html_code = ""
         reg = r"(-?\d{1,}\.?\d*)"
         for dim in dims:
             html_code += '''<td><h4>''' + dim + '''</h4></td>'''
             for d in dims[dim]:
-                number = re.search(reg, d)
+                number = d
+
+                """ number = re.search(reg, d)
                 number = number.group(1)
+                try:
+                    floats = len(number.split(".")[1])
+                    if floats <= 1:
+                        steps = 0.1
+                    elif floats == 2:
+                        steps = 0.01
+                    elif floats == 3:
+                        steps = 0.001
+                    else:
+                        steps = 0.001
+                except:          """
+                steps = 0.1
                 coords = ",".join(str(e) for e in dims[dim][d])
                 html_code += "<tr><td style='text-align:center'> <input type='checkbox' name='relevant." + d + "' value='checked'> </td>" + \
                              "<td style='text-align:center'>" + d + "</td>" + \
-                             "<td style='text-align:center'> <input type='number' step=0.01 data-coords='" + coords + "' name='" + d + "' value='" + number + "'  size='10'> </td></tr>"
+                             "<td style='text-align:center'> <input type='number' step='" + str(steps) + "' data-coords='" + coords + "' name='" + d + "' value='" + number + "'  size='10'> </td></tr>"
                 #print(html_code)
-        return render_template('show_image.html', filename=file_out, isos=isos, dims=dims, text=html_code)
+        return render_template('show_image.html', filename=file_out, isos=isos, dims=dims, text=html_code, number=number_blocks)
 
     else:
         filename = filename
@@ -90,6 +108,9 @@ def add_header(response):
     response.headers['Cache-Control'] = 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0'
     response.headers['Pragma'] = 'no-cache'
     response.headers['Expires'] = '-1'
+    response.headers['Access-Control-Allow-Origin'] = '*'
+    response.headers.add("Access-Control-Allow-Headers", "*")
+    response.headers.add("Access-Control-Allow-Methods", "*")
     return response
 
 
@@ -103,11 +124,22 @@ def generate(name):
     except:
         return"Sorry file not found"
 
-"""@app.route('/show_results')
-def form_post():
-    text = []
-    db = redis.Redis('localhost')
-    for key in request.form:
-        db.set(key, request.form[key])
-    return render_template('display_results.html'"""
+@app.route('/redis/get/<key>',methods=['GET'])
+def redis_get(key):
+    db = redis.Redis("localhost")
+    result = json.loads(db.get(key))
+    return result
+
+@app.route('/redis/set/<key>/<value>',methods=['POST'])
+def redis_set(key, value):
+    db = redis.Redis("localhost")
+    try:
+        result = json.loads(db.get(key))
+
+
+        key = key.encode("utf-8")
+        result = db.set(key, str(value))
+    else:
+        db.set( )
+    return "OK"