all2pdf 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. #!/usr/bin/env bash
  2. ## https://de.wikipedia.org/wiki/Comic-Book-Format
  3. ## https://www.din-formate.de/reihe-a-din-groessen-mm-pixel-dpi.html
  4. ## https://www.ihre-ideenfabrik.de/sp_faq/din-formate/
  5. title="compress_pdf "$version""
  6. end="Complete :P"
  7. ## do not change!
  8. FILE=$*
  9. DPI=0
  10. #=== FUNCTION ================================================================
  11. # NAME: chooseDPI
  12. # DESCRIPTION:
  13. #===============================================================================
  14. chooseDPI() {
  15. while [ "$DPI" == 0 ]
  16. do
  17. #DPI=`zenity --list --title="$title" --text="Choose DPI" --width=680 --height=270 --column="Value" --column="DPI" 72 72 150 "150 (default)" 300 300`
  18. DPI=`zenity --list --title="$title" --text="Choose DPI" --width=100 --height=270 --column="DPI" 72 150 300`
  19. [ $? -ne 0 ] && exit 2
  20. done
  21. }
  22. #=== FUNCTION ================================================================
  23. # NAME: chooseDinSize
  24. # DESCRIPTION: create ssh tunnel to application server
  25. #===============================================================================
  26. chooseDinSize() {
  27. while [ ! "$DINNORM" ]
  28. do
  29. DIN_A3="`echo \"scale=0; \${DPI}*11.693333333/1\" | bc -l`x`echo \"scale=0; \${DPI}*16.536666667/1\" | bc -l`"
  30. DIN_A4="`echo \"scale=0; \${DPI}*8.266666667/1\" | bc -l`x`echo \"scale=0; \${DPI}*11.693333333/1\" | bc -l`"
  31. DIN_A5="`echo \"scale=0; \${DPI}*5.826666667/1\" | bc -l`x`echo \"scale=0; \${DPI}*8.266666667/1\" | bc -l`"
  32. read DINNORM DINSIZE <<< $(zenity --list --print-column=ALL --separator=' ' --title="$title" --text="vdvds" --width=680 --height=270 --column="Din Norm" --column="Format" A3 $DIN_A3 A4 $DIN_A4 A5 $DIN_A5)
  33. [ $? -ne 0 ] && exit 2
  34. done
  35. }
  36. #=== FUNCTION ================================================================
  37. # NAME: extractFile
  38. # DESCRIPTION:
  39. #===============================================================================
  40. function extractFile() {
  41. mkdir $$
  42. case $(file --mime-type -b "${FILE}") in
  43. ## PDF
  44. application/pdf)
  45. pdfimages -j "${FILE}" $$/bild
  46. ;;
  47. ## CBR
  48. application/x-rar)
  49. unrar e -y "${FILE}" $$/
  50. ;;
  51. ## CBZ
  52. application/zip)
  53. unzip -j "${FILE}" -d $$/
  54. ;;
  55. ## directory
  56. inode/directory)
  57. cp -R "${FILE}"/* $$/
  58. ## remove trailing /
  59. FILE="${FILE%\/}"
  60. ;;
  61. *)
  62. FILETYP="unknown"
  63. exit 1
  64. ;;
  65. esac
  66. }
  67. #=== FUNCTION ================================================================
  68. # NAME: RotateAutoPage
  69. # DESCRIPTION: rotate images
  70. #===============================================================================
  71. RotateAutoPage() {
  72. while [ $# -gt 0 ]; do
  73. w=`identify -format "%[fx:w]" "$1"`
  74. h=`identify -format "%[fx:h]" "$1"`
  75. if [ $w -gt $h ]
  76. then
  77. convert "$1" -rotate 270 "$1"
  78. fi
  79. shift
  80. done
  81. }
  82. #=== FUNCTION ================================================================
  83. # NAME: renameExtFiles
  84. # DESCRIPTION: rename 01.jpg 001.jpg ...
  85. #===============================================================================
  86. renameExtFiles() {
  87. for counter in {01..99}; do
  88. ## PID=678 -> test -f 678/89.* && mv 678/89.* 678/089.jpg
  89. test -f $$/${counter}.* \
  90. && mv $$/${counter}.* $$/0${counter}.${FILE##*.}
  91. # find $$ -name "${counter}.*" | xargs
  92. done
  93. }
  94. #=== FUNCTION ================================================================
  95. # NAME: checkCorruptPictures
  96. # DESCRIPTION: Detect corrupt pictures
  97. #===============================================================================
  98. #checkCorruptPictures() {
  99. #
  100. # find . -iname *g" -o -iname "*f" -type f 2>/dev/null | xargs identify -verbose >/dev/null 2>&1; echo $?
  101. #
  102. #}
  103. #=== FUNCTION ================================================================
  104. # NAME: createPDF
  105. # DESCRIPTION:
  106. #===============================================================================
  107. createPDF() {
  108. # convert -compress jpeg -resize !874x1240 -density 150x150 -units PixelsPerInch $$/*g $$/*G $$/*/*g $$/*/*G $$/*/*f $$/*/*F "${1%\.pdf}_${compression}.pdf"
  109. convert -compress jpeg -resize !${DINSIZE} -density ${DPI}x${DPI} -units PixelsPerInch $$/*g $$/*G $$/*/*g $$/*/*G $$/*/*f $$/*/*F "${FILE%\.*}_${DPI}_${DINNORM}.pdf"
  110. }
  111. #=== FUNCTION ================================================================
  112. # NAME: cleanup
  113. # DESCRIPTION: delete tmp files
  114. #===============================================================================
  115. cleanup() {
  116. rm -R $$/
  117. }
  118. #=== Scriptablauf ================================================================
  119. #
  120. #
  121. #===================================================================================
  122. chooseDPI
  123. ## chooseDinSize
  124. chooseDinSize
  125. ## extract images from file
  126. extractFile
  127. ## rotate images
  128. RotateAutoPage $$/*g $$/*G $$/*/*g $$/*/*G $$/*/*f $$/*/*F
  129. #find $$ -type f -regex '.*[gfGF]$' | while read file;
  130. #do
  131. # RotateAutoPage "${file}"
  132. #done
  133. ## rename extracted images
  134. renameExtFiles
  135. ## create new PDF
  136. createPDF
  137. ## delete tmp files
  138. cleanup