s4
changeset 915:b47f64276427
Try to compress PDF if gs is available
author | HIROSE Yuuji <yuuji@gentei.org> |
---|---|
date | Fri, 08 Jan 2021 19:01:50 +0900 |
parents | cfb6247a2266 |
children | 7cac220d52a7 |
files | s4-funcs.sh s4-main.js |
diffstat | 2 files changed, 38 insertions(+), 4 deletions(-) [+] |
line diff
1.1 --- a/s4-funcs.sh Wed Jan 06 12:56:33 2021 +0900 1.2 +++ b/s4-funcs.sh Fri Jan 08 19:01:50 2021 +0900 1.3 @@ -1055,6 +1055,12 @@ 1.4 fi 1.5 $sha1 "$@" | cut -d' ' -f1 1.6 } 1.7 +if type gs >/dev/null 2>&1; then 1.8 + gs_pdfwrite() { 1.9 + gs -sDEVICE=pdfwrite -dPDFSETTINGS=/default \ 1.10 + -dNOPAUSE -dQUIET -dBATCH -o "$2" "$1" 1.11 + } 1.12 +fi 1.13 enjpeg() { 1.14 if [ -z "$cjpeg" ]; then 1.15 if type cjpeg >/dev/null 2>&1; then 1.16 @@ -1580,6 +1586,16 @@ 1.17 mogrify -quality 75 -resize $maximagexy'>' "$tmpd/$v" 1.18 err "Mogrified: `ls -lF $tmpd/$v`" # 2020-05-31 1.19 ;; 1.20 + [Aa]pplication/[Pp][Dd][Ff]) 1.21 + if [ x"`getpar comppdf`" = x"yes" ]; then 1.22 + if type gs_pdfwrite >/dev/null 2>&1; then 1.23 + err Calling gs 1.24 + gs_pdfwrite "$tmpd/$v" "$tmpd/$v.mini.pdf" && { 1.25 + err "PDF compressed: `ls -lF $tmpd/${v}*`" 1.26 + mv "$tmpd/$v.mini.pdf" "$tmpd/$v" 1.27 + } 1.28 + fi 1.29 + fi 1.30 esac 1.31 if ! echo "$mimetype" | egrep "$file_accept_egrep" >/dev/null 2>&1 1.32 then
2.1 --- a/s4-main.js Wed Jan 06 12:56:33 2021 +0900 2.2 +++ b/s4-main.js Fri Jan 08 19:01:50 2021 +0900 2.3 @@ -6,6 +6,7 @@ 2.4 var myurl = document.URL, 2.5 mypath = myurl.substring(myurl.lastIndexOf("/")); 2.6 var art_m_list = []; 2.7 + let input_pdfsw = 'input[name="comppdf"]'; 2.8 if (mypath.match(/(.*)\/(.*)/)) { 2.9 mypath = RegExp.$2; 2.10 mypath = mypath.substring(0, mypath.lastIndexOf("?")); 2.11 @@ -189,16 +190,31 @@ 2.12 szmax = parseInt(szmax); 2.13 if (szmax <= 0) return; 2.14 // szmax = 10000 2.15 - let ng = "", rcval=false, fileexists=false; 2.16 + let ng = "", rcval=false, fileexists=false, 2.17 + pdfsw = form.querySelector(input_pdfsw), 2.18 + pdfmsg = "Try compressing PDF?\nPDFを圧縮してみますか?\n" + 2.19 + "(それでも収まらない場合もあります)"; 2.20 for (let f of form.querySelectorAll('input[type="file"]')) { 2.21 - let thiserr = false 2.22 + let thiserr = false; 2.23 for (let i of f.files) { 2.24 fileexists = true; 2.25 let fn = i.name, sz = i.size; 2.26 console.log("max="+szmax+", fn="+fn+", sz="+sz); 2.27 if (sz > szmax) { 2.28 - thiserr = true; 2.29 - ng += ((ng>"" ? ", " : "")+fn) 2.30 + if (fn.match(/\.pdf/i) 2.31 + && sz < szmax*3 // XXX : x3 reasonable? 2.32 + && (pdfsw || confirm(pdfmsg))) { 2.33 + if (!pdfsw) { 2.34 + pdfsw = document.createElement("input"); 2.35 + pdfsw.name = "comppdf"; 2.36 + pdfsw.type = "text"; 2.37 + f.parentNode.insertBefore(pdfsw, f); 2.38 + pdfsw.value = "yes"; 2.39 + } 2.40 + } else { 2.41 + thiserr = true; 2.42 + ng += ((ng>"" ? ", " : "")+fn) 2.43 + } 2.44 } 2.45 } 2.46 thiserr ? f.classList.add("warnbg") : f.classList.remove("warnbg"); 2.47 @@ -267,6 +283,8 @@ 2.48 newform = new FormData(form); 2.49 if (data.get("text") > "") { // Called by submit button 2.50 myform.reset(); 2.51 + let pdfsw = myform.querySelector(input_pdfsw); 2.52 + if (pdfsw) pdfsw.remove(); 2.53 // myform.text.value = ''; 2.54 } 2.55 myform.fetchtime.value = newform.get("fetchtime");