瀏覽代碼

all2pdf_yed neu hinzugefügt

Your Name 5 年之前
父節點
當前提交
c5ff3c538e
共有 1 個文件被更改,包括 391 次插入0 次删除
  1. 391 0
      all2pdf_yed

+ 391 - 0
all2pdf_yed

@@ -0,0 +1,391 @@
+#!/usr/bin/env bash
+
+## https://de.wikipedia.org/wiki/Comic-Book-Format
+## https://www.din-formate.de/reihe-a-din-groessen-mm-pixel-dpi.html
+## https://www.ihre-ideenfabrik.de/sp_faq/din-formate/
+
+title="compress_pdf "$version""
+conversion="Compress files.."
+end="Complete :P"
+
+
+## if auto is choosen for size PictureAverage is limited to MaxPictureAverage
+MaxPictureAverage=1000
+
+
+## zenity --forms --text "Formulário com lista de duas colunas" --add-entry "Nome" --add-list="Lista dupla" --column-values "Núm|Descritivo" --list-values="1|Primeira Linha|2|Segunda Linha|3|Terceira linha|" --show-header
+## zenity --list --checklist --text 'Select the interface to be used:' --column 'Select...' --column 'Interface Name' FALSE
+
+## zenity --list --checklist --text 'Select options:' --column 'Select' --column 'Options' 'rotate' 'autorotate pictures' 'compress' 'compress after convert'
+
+
+#===  FUNCTION  ================================================================
+#          NAME: chooseDPI
+#   DESCRIPTION: 
+#===============================================================================
+
+chooseDPI() {
+
+	while [ "$DPI" == 0 ] 
+	do	
+		#DPI=`zenity --list --title="$title" --text="Choose DPI" --width=680 --height=270 --column="Value" --column="DPI" 72 72 150 "150 (default)" 300 300`
+        	DPI=`zenity --list --title="$title" --text="Choose DPI" --width=100 --height=270 --column="DPI" 72 150 300 noChange`
+
+		[ $? -ne 0 ] && exit 2
+	done
+
+}
+
+#===  FUNCTION  ================================================================
+#          NAME: chooseDinSize
+#   DESCRIPTION: create ssh tunnel to application server
+#===============================================================================
+
+chooseDinSize() {
+
+	while [ ! "$DINNORM" ] 
+	do	
+#		DIN_A3="`echo \"scale=0; \${DPI}*11.693333333/1\" | bc -l`x`echo \"scale=0; \${DPI}*16.536666667/1\" | bc -l`"
+#		DIN_A4="`echo \"scale=0; \${DPI}*8.266666667/1\" | bc -l`x`echo \"scale=0; \${DPI}*11.693333333/1\" | bc -l`"
+#		DIN_A5="`echo \"scale=0; \${DPI}*5.826666667/1\" | bc -l`x`echo \"scale=0; \${DPI}*8.266666667/1\" | bc -l`"
+
+#		read DINNORM DINSIZE <<< $(zenity --list --print-column=ALL --separator=' ' --title="$title" --text="Choose Size" --width=680 --height=270 --column="Din Norm" --column="Format" NoChange nochange A3 $DIN_A3 A4 $DIN_A4 A5 $DIN_A5 )
+		DINNORM=`zenity --list --print-column=ALL --separator=' ' --title="$title" --text="Choose Din Norm" --width=250 --height=270 --column="Din Norm" nochange A3 A4 A5 A6`
+
+
+		[ $? -ne 0 ] && exit 2
+	done
+
+}
+
+
+#===  FUNCTION  ================================================================
+#          NAME: extractFile
+#   DESCRIPTION: 
+#===============================================================================
+
+function extractFile() {
+
+    mkdir $$
+
+    case $(file --mime-type -b "${FILE}") in
+	## PDF
+        application/pdf)  
+		pdfimages -j "${FILE}" $$/bild
+		;;
+	## CBR
+	application/x-rar)
+		unrar e -y "${FILE}" $$/
+		;;
+	## CBZ
+	application/zip)
+		unzip -j "${FILE}" -d $$/
+        ;;
+	## directory
+	inode/directory)
+        	cp -R "${FILE}"/* $$/
+        	## remove trailing /
+        	FILE="${FILE%\/}"
+		;;
+        *)      
+		FILETYP="unknown"  
+		exit 1
+		;;
+    esac
+}
+
+
+#===  FUNCTION  ================================================================
+#          NAME: findExtractedPictures
+#   DESCRIPTION: find extracted pictures
+
+#===============================================================================
+
+findExtractedPictures() {
+
+#    extractedPictures=`${EXEC_FIND} | sed 's/ /\\ /g' | sort -n | paste -sd\ `
+    extractedPictures=`find $$ -iname '*.*g' | sed 's/ /\\ /g' | sort -n | paste -sd\ `
+}
+
+
+#===  FUNCTION  ================================================================
+#          NAME: RotateAutoPage
+#   DESCRIPTION: rotate images
+
+#===============================================================================
+
+RotateAutoPage() {
+
+	while [ $# -gt 0 ]; do
+			w=`identify -format "%[fx:w]" "$1"`		
+			h=`identify -format "%[fx:h]" "$1"`		
+			if [ $w -gt $h ]
+			then 
+			convert "$1" -rotate 270 "$1"
+			fi	
+		shift
+
+	done
+}
+
+
+#===  FUNCTION  ================================================================
+#          NAME: convertPPMtoPNG
+#   DESCRIPTION: convert *.ppm to png
+#===============================================================================
+
+convertPPMtoPNG() {
+
+    convert $$/*.ppm $$/image%d.png 2>/dev/null && rm $$/*.ppm
+
+}
+
+#===  FUNCTION  ================================================================
+#          NAME: renameExtFiles
+#   DESCRIPTION: rename 01.jpg 001.jpg ... 
+#===============================================================================
+
+renameExtFiles() {
+
+#	for counter in {01..99}; do 
+#		## PID=678 -> test -f 678/89.* && mv 678/89.* 678/089.jpg
+#		test -f $$/${counter}.* \
+#			&& mv $$/${counter}.* $$/0${counter}.${FILE##*.}
+##        find $$ -name "${counter}.*" | xargs
+#	done
+#    IFS=$'\n'
+    counter=0
+    PID=$$
+
+#    for file in $(find $$ -type f -iname '*.*g' | sort -n )}
+#    do
+#        rename "${file}" $$/${counter}
+#        counter=$(( ${counter} + 1 ))
+#    done
+#     find $$ -type f -iname \*.*g -print0  | xargs -IF -0 mv F /folder/to/destination/
+    
+#    ${EXEC_FIND} | sort -n  | gawk 'BEGIN{ a=1 }{ printf "mv \"%s\" %04d.jpg\n", $0, a++ }' | bash
+#    find $$ -iname '*.*g' | sed 's/ /\\ /g' | sort -n | paste -sd\ | sort -n  | gawk 'BEGIN{ a=1 }{ printf "mv \"%s\" %04d.jpg\n", $0, a++ }' | bash
+    cd $$
+    ## for cbr/cbz, cover.jpg need to be at the beginning of the pdf
+    rename 's/cover/0000000/g' *
+    find . -iname '*.*g' | sort --version-sort | gawk 'BEGIN{ a=1 }{ printf "mv \"%s\" %04d.jpg\n", $0, a++ }' | bash
+    cd ..
+}
+
+#===  FUNCTION  ================================================================
+#          NAME: checkCorruptPictures
+#   DESCRIPTION: Detect corrupt pictures
+#===============================================================================
+
+#checkCorruptPictures() {
+# 
+#    find . -iname *g" -o -iname "*f" -type f 2>/dev/null | xargs identify -verbose >/dev/null 2>&1; echo $?
+#
+#}
+
+
+#===  FUNCTION  ================================================================
+#          NAME: calculatePictureAverage
+#   DESCRIPTION: calculate average from pictures weight
+#===============================================================================
+
+calculatePictureAverage() {
+
+    count=0
+    total=0
+
+#    for file in $(ls $$/*g $$/*G $$/*/*g $$/*/*G $$/*/*f $$/*/*F)
+#    for file in $$/*g $$/*G $$/*/*g $$/*/*G $$/*/*f $$/*/*F
+    for file in ${extractedPictures}
+    do
+        if [ -f "${file}" ]; then
+             i=`convert "${file}" -print "%w" /dev/null`
+             total=$(echo 0${total}+$i | bc )
+             ((count++))
+            echo file=${file}
+#            echo i=$i
+        fi
+    done
+    
+#    PictureAverage=`echo "scale=2; $total / $count" | bc`
+    PictureAverage=$(($total / $count))
+
+    ## 
+    [ ${PictureAverage} -gt ${MaxPictureAverage} ] && { echo "PictureAverage = ${PictureAverage}. Limit to ${MaxPictureAverage}" ; PictureAverage=${MaxPictureAverage} ; }
+
+}
+
+
+
+#===  FUNCTION  ================================================================
+#          NAME: createPDF
+#   DESCRIPTION:  
+#===============================================================================
+
+createPDF() {
+
+#        convert -compress jpeg -resize !874x1240 -density 150x150 -units PixelsPerInch $$/*g $$/*G $$/*/*g $$/*/*G $$/*/*f $$/*/*F "${1%\.pdf}_${compression}.pdf"
+
+#        [ "${DINSIZE}" != "nochange" ] 	&& USE_DINSIZE="-resize !${DINSIZE} "
+        [ "${DINNORM}" != "nochange" ] 	&& USE_DINNORM="-page ${DINNORM}"
+	[ "${DPI}" != "noChange" ] 	&& USE_DPI="-density ${DPI}x${DPI} "
+	
+    echo PictureAverage=$PictureAverage
+
+
+#PictureAverage=1000
+
+    echo PictureAverage=$PictureAverage
+USE_DINNORM="-resize ${PictureAverage}x -density 150x150"
+#USE_DINNORM="-resize 793x -density 150x150"
+
+#	        convert -compress jpeg -resize !${DINSIZE} -density ${DPI}x${DPI} -units PixelsPerInch $$/*g $$/*G $$/*/*g $$/*/*G $$/*/*f $$/*/*F "${FILE%\.*}_${DPI}_${DINNORM}.pdf"
+#        convert -compress jpeg ${USE_DINNORM} ${USE_DPI} -units PixelsPerInch $$/*g $$/*G $$/*/*g $$/*/*G $$/*/*f $$/*/*F "${FILE%\.*}_${DPI}_${DINNORM}.pdf"
+#        convert -compress jpeg ${USE_DINNORM} -density 28.350000000000001421x28.350000000000001421 -units PixelsPerInch $$/*g $$/*G $$/*/*g $$/*/*G $$/*/*f $$/*/*F "test.pdf"
+#        convert -compress jpeg ${USE_DINNORM} -density 300x300 -units PixelsPerInch $$/*g $$/*G $$/*/*g $$/*/*G $$/*/*f $$/*/*F "test_300.pdf"
+#        convert -compress jpeg ${USE_DINNORM} -density 150x150 -units PixelsPerInch $$/*g $$/*G $$/*/*g $$/*/*G $$/*/*f $$/*/*F "test_150.pdf"
+####        convert -compress jpeg ${USE_DINNORM} -density 30x30 -units PixelsPerInch $$/*g $$/*G $$/*/*g $$/*/*G $$/*/*f $$/*/*F "${FILE%\.*}_${DINNORM}.pdf"
+#    mogrify  ${USE_DINNORM} $(find $$ -type f -iname '*.*g' | sort -n | paste -sd\ )
+
+#    convert ${USE_DINNORM} $(${EXEC_FIND} | sort -n | paste -sd\ ) "${FILE%\.*}_${DINNORM}222.pdf"
+    convert ${USE_DINNORM} $( find $$ -iname '*.*g' | sed 's/ /\\ /g' | sort -n | paste -sd\ ) "${FILE%\.*}_${PictureAverage}.pdf"
+
+    NEWPDF="${FILE%\.*}_${PictureAverage}.pdf"
+
+       #convert ${USE_DINNORM} $$/*g $$/*G $$/*/*g $$/*/*G $$/*/*f $$/*/*F "${FILE%\.*}_${DINNORM}.pdf"        
+#    convert ${USE_DINNORM} $$/*g $$/*G $$/*/*g $$/*/*G $$/*/*f $$/*/*F "${FILE%\.*}_${DINNORM}.pdf"
+###        convert ${USE_DINNORM} $$/*g $$/*G $$/*/*g $$/*/*G $$/*/*f $$/*/*F "${FILE%\.*}_${DINNORM}.pdf"
+#        convert -compress jpeg ${USE_DINNORM} -density 10x10 -units PixelsPerInch $$/*g $$/*G $$/*/*g $$/*/*G $$/*/*f $$/*/*F "test_10.pdf"
+#        convert -compress jpeg ${USE_DINNORM} -density 30x30 -units PixelsPerInch $$/*g $$/*G $$/*/*g $$/*/*G $$/*/*f $$/*/*F "test_3.pdf"
+#        convert -compress jpeg ${USE_DINNORM} -units PixelsPerInch $$/*g $$/*G $$/*/*g $$/*/*G $$/*/*f $$/*/*F "test_X.pdf"
+
+#${USE_DINSIZE}
+}
+
+#===  FUNCTION  =======================f=========================================
+#          NAME: compress_pdf
+#   DESCRIPTION: compress pdf
+#===============================================================================
+
+compress_pdf() {
+	
+	## compress pdf
+	gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile="${*%\.pdf}-smaller.pdf" "${*%\.pdf}.pdf"
+
+}
+
+#===  FUNCTION  =======================f=========================================
+#          NAME: cleanup
+#   DESCRIPTION: delete tmp files
+#===============================================================================
+
+cleanup() {
+	
+	rm -R $$/
+
+}
+
+
+#===  Scriptablauf  ================================================================
+#
+#
+#===================================================================================
+
+#chooseDPI
+
+## chooseDinSize
+#chooseDinSize
+
+FILES=("$@")
+
+echo ${#FILES[@]}
+
+#printf '%s\n' "${FILES[@]}"
+
+
+SAVEIFS=$IFS
+[ ${#FILES[@]} -eq 0 ] && IFS=$'\n' FILES=(`yad --width=1000 --height=600 --file-selection --multiple --separator=$'\n' --title="Bitte Dateien auswählen" --text="Es wurde keine Datei als Parameter übermittelt. Bitte wählen."`)
+IFS=$SAVEIFS
+
+#read ROTATE COMPRESS  <<< $(yad --width=300 --height=100  --center --title="Field Optionen"  --form  --separator=" " --field="Rotate pictures:CHK" TRUE --field="Compress pdf:CHK")
+read ROTATE COMPRESS CSIZE  <<< $(yad --width=300 --height=100 --form  --separator=" " --center --title="Field Optionen" --form --field="Rotate pictures:CHK" TRUE --field="Compress pdf:CHK" FALSE --field="Size":CB 'auto!1200!1000!750!500!400!300' )
+
+
+echo "aa=$ROTATE bb=$COMPRESS cc=$CSIZE"
+
+## if size is choosen ...
+[ "${CSIZE}" != "auto" ] && PictureAverage="${CSIZE}" || PictureAverage=0
+
+
+#COUNT_FILES=`echo $FILES | wc -w`
+
+printf '%s\n' "${FILES[@]}"
+
+
+#for (( i=0; i<${#FILES[@]}; i++ )); do 
+#echo "${FILES[$i]}" ; done
+
+
+#(while [ ${COUNT_FILES} ] -gt 0 ]; do
+#(for FILE in ${FILES}; do
+#(for (( i=0; i<${#FILES[@]}; i++ )); do
+(for FILE in "${FILES[@]}"; do
+
+    echo FILE=$FILE
+    ## do not change!
+  #  FILE=$1
+    DPI=0
+    EXEC_FIND="find $$ -iname '*.*g'"
+
+	## progress bar
+#	echo $(( 100/${#FILES[@]}*(${#FILES[@]}-$#) ))
+	echo "# Extraxt pictures from pdf... (1/4) \n$1 (File: $((${#FILES[@]}-$#+1))/${#FILES[@]})"	
+
+    ## skip script itself
+    [ "${FILE}" == "`basename "$0"`" ] && { shift; COUNT_FILES=$(( ${COUNT_FILES}-1 )); continue; }
+
+
+    ## extract images from file
+    extractFile
+
+    ## convert files if needed
+    convertPPMtoPNG
+
+    ## rename extracted images
+    renameExtFiles
+
+    ## find extracted pictures
+    findExtractedPictures
+
+    ## rotate images
+    #RotateAutoPage $$/*g $$/*G $$/*/*g $$/*/*G $$/*/*f $$/*/*F
+    [ "${ROTATE}" == "TRUE" ] && RotateAutoPage ${extractedPictures}
+
+    #find $$ -type f -regex '.*[gfGF]$' | while read file; 
+    #do
+    #    RotateAutoPage "${file}"
+    #done 
+
+    ## calculate picture average if auto is choosen
+    [ "${CSIZE}" == "auto" ] && calculatePictureAverage
+
+    ## create new PDF
+	echo "# Create new pdf... (3/4) \n$1 (File: $((${#FILES[@]}-$#+1))/${#FILES[@]})"
+    createPDF
+
+    [ "${COMPRESS}" == "TRUE" ] && compress_pdf ${NEWPDF}
+
+    ## delete tmp files
+    cleanup
+
+    shift
+
+
+done
+
+echo "# "$end"" ; sleep 1
+) |
+#### Barra de progrés ####
+zenity --progress --percentage=0 --title="$title" --text="$conversion" --pulsate --width=400 
+