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");