dever 7 年之前
父节点
当前提交
affc3ab46c

+ 3 - 0
conf/env.conf

@@ -5,6 +5,9 @@ name				= 文档转换系统
 site				= http://doc.dever.cc/
 copyright			= 2018 dever.cc v1.0.0
 
+;文档转换后 保存的路径 一般用于nginx使用 默认保存到runtime
+save				= /share/files/
+
 [db]
 rdb					= mysql
 

+ 25 - 14
front/api/main.py

@@ -48,7 +48,7 @@ class Common(object):
 
 		self.referer = self.request.headers.get("Referer")
 		self.host = Demeter.host(self.data['site']['link'])
-		uri = self.request.protocol + "://" + self.request.host + self.request.uri
+		uri = self.getHost() + self.request.uri
 
 		'''
 		if not self.referer:
@@ -147,7 +147,7 @@ class test_path(Load):
 			for row in datad:
 				writer.writerow(row)
 
-		url = self.request.protocol + "://" + self.request.host
+		url = self.getHost();
 
 		file_path = url + file_path.replace(Demeter.path + 'runtime', '')
 
@@ -182,7 +182,7 @@ class convert_path(Load):
 			config = Demeter.config['redis']
 			redis.rpush(config['name'], file['id'])
 
-		url = self.request.protocol + "://" + self.request.host
+		url = self.getHost();
 
 		self.data['file'] = {
 			'status' : file['status'],
@@ -203,7 +203,7 @@ class get_path(Load):
 		self.data = {}
 		file = Common.signature(self, 2)
 
-		url = self.request.protocol + "://" + self.request.host
+		url = self.getHost();
 
 		self.data['file'] = {
 			#'id' : file['id'],
@@ -270,9 +270,12 @@ class view_path(Load):
 		num = page.replace('.page', '')
 		if limit > 0 and int(num) > limit:
 			self.out('您没有权限查看')
-		url = self.request.protocol + "://" + self.request.host
+		url = self.getHost();
 		static = url + path
-		page = Demeter.path + 'runtime' + path + page
+		if 'save' in Demeter.config['setting']:
+			page = path + page
+		else:
+			page = Demeter.path + 'runtime' + path + page
 		content = File.readContent(page)
 		content = content.replace('src="', 'src="' + str(static))
 		return content
@@ -280,10 +283,9 @@ class view_path(Load):
 	def getContent(self, file, limit, uid):
 		if limit < 0:
 			limit = int(file['page'])
-		host = self.request.host.replace(':8088', '')
-		url = self.request.protocol + "://" + host
+		url = self.getHost();
 		style = ['document.css']
-		script = ['jquery.js']
+		script = ['jquery.js', 'layer.js']
 		content = ''
 		static = self.static(url)
 		assets = self.assets(url, file['path'])
@@ -292,16 +294,18 @@ class view_path(Load):
 			content = content + '<link rel="stylesheet" href="'+static+i+'"/>'
 
 		content = content + '<link rel="stylesheet" href="'+assets+file['key']+'.css"/>'
+		#content = content + '<style>' + File.readContent(file['path'], file['key']+'.css') + '</style>'
 
 		for i in script:
 			content = content + '<script src="'+static+i+'"></script>'
 
 		content = content + self.style()
-		content = content + '<div id="page-container">'
+		content = content + '<div id="page-container" load-css="'+assets+file['key']+'.css">'
 		page_url = self.url(url, file['path'], file['key'], uid)
 		for i in range(limit):
 			n = str(i+1)
-			content = content + '<div id="pf'+n+'" style="display:none;" class="demeter_document pf w0 h0" data-page-no="'+n+'" data-page-url="'+page_url+n+'.page"></div>'
+			#content = content + '<div id="pf'+n+'" style="display:none;" class="demeter_document pf w0 h0" data-page-no="'+n+'" data-page-url="'+page_url+n+'.page"></div>'
+			content = content + '<div id="demeter_document_'+n+'" style="display:none;" class="demeter_document" data-page-no="'+n+'" data-page-url="'+page_url+n+'.page"></div>'
 
 		content = content + '</div>'
 		#content = content + '<script>try{pdf2htmlEX.defaultViewer = new pdf2htmlEX.Viewer({});}catch(e){}</script>'
@@ -315,7 +319,7 @@ class view_path(Load):
 			File.write(view, content)
 		else:
 			content = File.readContent(file['html'])
-			url = self.request.protocol + "://" + self.request.host
+			url = self.getHost();
 
 			static = self.static(url) + 'pdf/'
 			content = content.replace('src="', 'src="' + static)
@@ -331,11 +335,17 @@ class view_path(Load):
 			content = content.replace('</head>', self.style() + '<head>')
 		return content
 
+	def getHost(self):
+		host = self.request.host.replace(':8088', '')
+		host = self.request.protocol + "://" + host
+		return host
+
 	def static(self, url):
 		return url + '/static/'
 
 	def assets(self, url, path):
-		path = path.replace(Demeter.path + 'runtime', '')
+		if 'save' not in Demeter.config['setting']:
+			path = path.replace(Demeter.path + 'runtime', '')
 		return url + path
 
 	def pattern(self, limit, content):
@@ -359,7 +369,8 @@ class view_path(Load):
 		signature = self.input('signature')
 		file_id = self.input('file_id')
 
-		path = path.replace(Demeter.path + 'runtime', '')
+		if 'save' not in Demeter.config['setting']:
+			path = path.replace(Demeter.path + 'runtime', '')
 
 		url = url + '/main/view?path=' + str(path) + '&file=' + key + '&file_id=' + file_id + '&timestamp=' + timestamp + '&nonce=' + nonce + '&appid=' + appid + '&signature=' + signature + '&uid=' + uid + '&page='
 

+ 78 - 31
front/static/document.js

@@ -29,12 +29,39 @@ var Document =
     left : 0,
     zoom : 11,
     Init : function(option)
+    {
+        var self = this;
+        if (typeof($) != 'object') {
+            self.Script('jquery');
+        }
+        if (typeof(layer) != 'object') {
+            self.Script('layer/layer');
+        }
+        var index = layer.load(0, {shade: false});
+        $(window).load(function()
+        {
+            self.Onload(index);
+        });
+    }
+
+    ,Script : function(name)
+    {
+        var path = location.href.split('document.js');
+        var script = document.createElement("script");
+        script.type = "text/javascript";
+        script.src = path[0] + name + ".js";
+        document.getElementsByTagName('head')[0].appendChild(script);
+    }
+
+    ,Onload : function(index)
     {
         var self = this;
         self.Option(option);
+        
         $.getJSON(self.option.document + '&callback=?', function(t)
         {
             $(self.option.reader).html(t.msg);
+            layer.close(index);
 
             self.width = $(self.option.reader).width();
             if (self.option.tool) {
@@ -44,7 +71,7 @@ var Document =
             self.Border();
             self.Scroll();
 
-            $('.pf').each(function(i)
+            $('.demeter_document').each(function(i)
             {
                 if (i < self.show) {
                     self.Load(i);
@@ -57,42 +84,62 @@ var Document =
     {
         var self = this;
         self.page = i;
-        var doc = $('.pf').eq(i);
+        var doc = $('.demeter_document').eq(i);
+        doc.hide();
         var url = doc.attr('data-page-url');
         var parent = doc.parent();
+        var index = layer.load(0, {shade: false});
         $.getJSON(url + '&callback=?', function(t)
         {
-            doc.prop('outerHTML', t.msg).show();
-            var e = $('.pf').eq(i);
-            var c = e.find('.w0');
-            var w = c.width();
-            var w = c.get(0).offsetWidth;
-            if (w - self.width > 10) {
-                var z = 100 - ((w - self.width)/self.zoom);
-                $(self.option.reader).css('zoom', z + '%');
-                if (self.left) {
-                    c = c.children().eq(0);
-                    e = c.children().eq(0);
-                    if (!e.length) {
-                        e = c;
-                    }
-                    var left = parseInt(e.css('left'));
-                    if (left <= 0) {
-                        self.left = 0;
-                    } else {
-                        var e = c.children().eq(3);
-                        if (e.length) {
-                            var left = parseInt(e.css('left'));
-                        }
+            doc.html(t.msg);
+            self.LoadDoc(i,index,doc);
+        });
+    }
+
+    ,LoadDoc : function(i, index, doc)
+    {
+        var html = doc.html();
+        if (doc.find('.w0').length) {
+            this.SetOffset(i,index,doc);
+        } else {
+            this.LoadDoc(i,index,doc);
+        }
+    }
+
+    ,SetOffset : function(i,index,doc)
+    {
+        var self = this;
+        var e = $('.pf');
+        var c = e.find('.w0');
+        var w = c.width();
+        var w = c.get(0).offsetWidth;
+        if (w - self.width > 10) {
+            var z = 100 - ((w - self.width)/self.zoom);
+            $(self.option.reader).css('zoom', z + '%');
+            if (self.left) {
+                c = c.children().eq(0);
+                e = c.children().eq(0);
+                if (!e.length) {
+                    e = c;
+                }
+                var left = parseInt(e.css('left'));
+                if (left <= 0) {
+                    self.left = 0;
+                } else {
+                    var e = c.children().eq(3);
+                    if (e.length) {
+                        var left = parseInt(e.css('left'));
                     }
-                    
-                    self.left = left * -1;
-                    $(self.option.reader).css('margin-left', self.left);
                 }
                 
-                self.width = w;
+                self.left = left * -1;
+                $(self.option.reader).css('margin-left', self.left);
             }
-        });
+            
+            self.width = w;
+        }
+        doc.show();
+        layer.close(index);
     }
 
     ,Option : function(option)
@@ -135,7 +182,7 @@ var Document =
     ,Scroll : function()
     {
         var self = this;
-        var total = $('.pf').length;
+        var total = $('.demeter_document').length;
 
         if (self.option.more) {
 
@@ -183,7 +230,7 @@ var Document =
     {
         var height = 0;
         for (var i = 0; i < this.page; i++) {
-            height += $('.pf').eq(i).height();
+            height += $('.demeter_document').eq(i).height();
         }
         return height;
     }

文件差异内容过多而无法显示
+ 1 - 0
front/static/layer/layer.js


文件差异内容过多而无法显示
+ 1 - 0
front/static/layer/mobile/layer.js


文件差异内容过多而无法显示
+ 0 - 0
front/static/layer/mobile/need/layer.css


二进制
front/static/layer/theme/default/icon-ext.png


二进制
front/static/layer/theme/default/icon.png


文件差异内容过多而无法显示
+ 0 - 0
front/static/layer/theme/default/layer.css


二进制
front/static/layer/theme/default/loading-0.gif


二进制
front/static/layer/theme/default/loading-1.gif


二进制
front/static/layer/theme/default/loading-2.gif


+ 7 - 2
service/convert.py

@@ -152,7 +152,12 @@ class Convert(object):
 		#filename =  Demeter.md5(str(uuid.uuid5(uuid.uuid1(), info['key'])))
 		filename =  info['key']
 		filepath = str(appid) + '/' + day[0] + '/' + day[1] + '/' + day[2]
-		filepath = File.mkdirs(os.path.join(Demeter.path, 'runtime','files', filepath)) + '/' + filename
+		path = ''
+
+		if 'save' in Demeter.config['setting']:
+			filepath = File.mkdirs(os.path.join(Demeter.config['setting']['save'], filepath)) + '/' + filename
+		else:
+			filepath = File.mkdirs(os.path.join(Demeter.path, 'runtime','files', filepath)) + '/' + filename
 
 		local = filepath + info['ext']
 
@@ -196,7 +201,7 @@ class Convert(object):
 			convert = convert + ' && '
 		else:
 			info['pdf'] = info['local']
-		convert = convert + 'pdf2htmlEX --zoom 1.5 --no-drm 1 --split-pages 1 '
+		convert = convert + 'pdf2htmlEX --zoom 1.5 --use-cropbox 0 --no-drm 1 --split-pages 1 '
 		convert = convert + '--embed-css 0  --embed-javascript 0 --embed-image 0 --embed-font 1 --process-outline 0 '
 		convert = convert + '--embed-external-font 0 --dest-dir '+info['path']+' --page-filename %d.page ' + info['pdf']
 

部分文件因为文件数量过多而无法显示