Advertisement
aikikode

ebook2pdf.sh

Sep 28th, 2012
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 4.04 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. if [ -z "$1" ]
  4. then
  5.     echo "Usage: ebook2pdf.sh FILENAME WIDTH HEIGHT OVERLAP ROTATE DEPTH"
  6.     exit 1
  7. fi
  8.  
  9. date
  10.  
  11. FILENAME=$(basename $1)
  12. FILEEXT=`echo "${FILENAME##*.}"|tr '[A-Z]' '[a-z]'`
  13.  
  14. SRCDIR="."
  15. RAMDIR="/tmp/ramfs"
  16. RAMSIZE="1M"
  17.  
  18. FULLNAME="$SRCDIR"/"$FILENAME"
  19. FILEID=`md5sum -b "$FULLNAME"|cut -f 1 -d ' '`
  20. mkdir "./ready" &>/dev/null
  21. RESDIR="./ready/$FILEID"
  22.  
  23.  
  24. if [ `mount | grep -c "$RAMDIR"` -eq 0 ]
  25. then
  26.     mkdir "$RAMDIR" &>/dev/null
  27.     chmod 777 "$RAMDIR" &>/dev/null
  28.     mount -t ramfs -o size="$RAMSIZE" tmpfs "$RAMDIR" &>/dev/null
  29.     echo "RAM Drive created"
  30. else
  31.     echo "RAM Drive already exists"
  32. fi
  33.  
  34. rm "$RAMDIR"/"$FILEID"-buf* &>/dev/null
  35. rm -r $RESDIR &>/dev/null
  36. mkdir $RESDIR &>/dev/null
  37. rm $FILENAME.pdf &>/dev/null
  38.  
  39. OUTBUF1="$RAMDIR"/"$FILEID"-buf1
  40. INBUF1="$RAMDIR"/"$FILEID"-buf1.pgm
  41. OUTBUF2="$RAMDIR"/"$FILEID"-buf2
  42. INBUF2="$RAMDIR"/"$FILEID"-buf2.gray
  43. OUTBUF3="$RAMDIR"/"$FILEID"-buf3
  44. SLIDEBUF="$RAMDIR"/"$FILEID"-buf3.gray
  45.  
  46. WIDTH=$2
  47. HEIGHT=$3
  48. OVER=$4
  49. ROTATE=$5
  50. BITS=$6
  51.  
  52. if [ "$FILEEXT" = "pdf" ]
  53. then
  54.     PAGES=`pdfinfo "$FULLNAME" | grep "Pages:\s*" | grep -o [0-9]*`
  55. elif [ "$FILEEXT" = "djvu" ]
  56. then
  57.     PAGES=`djvm -l "$FULLNAME" | grep "PAGE" -c`
  58. else
  59.     echo "Format not supported"
  60.     exit 1
  61. fi
  62.  
  63. echo "Starting $FILENAME"
  64. echo "Type: $FILEEXT"
  65. echo "Checksum: $FILEID"
  66. echo "Width: $WIDTH"
  67. echo "Height: $HEIGHT"
  68. echo "Overlapping: $OVER"
  69. echo "Rotate: $ROTATE"
  70. echo "Bit-depth: $BITS"
  71. echo "Pages: $PAGES"
  72.  
  73. PAGE=0
  74. SLIDE=-1
  75.  
  76. touch "$OUTBUF3"
  77.  
  78. while true
  79. do
  80.  
  81.     # import
  82.  
  83.     if [ "$PAGE" -lt "$PAGES" ]
  84.     then
  85.         PAGE=$(( $PAGE+1 ))
  86.         if [ "$FILEEXT" = "pdf" ]
  87.         then
  88.             pdftoppm -gray -r 300 -f "$PAGE" -l "$PAGE" "$FULLNAME" >"$OUTBUF1" && echo "$FILENAME >> Page                       $PAGE" &
  89.         elif [ "$FILEEXT" = "djvu" ]
  90.         then
  91.             ddjvu -format=pgm -scale=300 -page=$PAGE "$FULLNAME" >"$OUTBUF1" && echo "$FILENAME >>Page                        $PAGE" &
  92.         fi
  93.     else
  94.         rm "$OUTBUF1" &>/dev/null
  95.     fi
  96.  
  97.     #process
  98.  
  99.     if [ -e "$INBUF1" ]
  100.     then
  101.         convert "$INBUF1" -fuzz 1% -trim +repage -resize $WIDTH -bordercolor white -border 0x10 -bordercolor black -border 0x5 -type GrayScale -depth 8 gray:"$OUTBUF2" &
  102.     else
  103.         rm "$OUTBUF2" &>/dev/null
  104.     fi
  105.  
  106.     # export
  107.  
  108.     if [ -e "$INBUF2" ]
  109.     then
  110.         :>"$OUTBUF3"
  111.         ITER=-1
  112.  
  113.         while true
  114.         do
  115.             ITER=$(( $ITER+1 ))
  116.             SKIP=$(( $ITER*$(($HEIGHT-$OVER)) ))
  117.             dd status=noxfer if="$INBUF2" skip=$SKIP count=$HEIGHT bs=$WIDTH of="$SLIDEBUF" &>/dev/null
  118.             if [ `stat -c %s "$SLIDEBUF"` -eq $(($WIDTH*$HEIGHT)) ]
  119.             then
  120.                 SLIDE=$(( $SLIDE+1 ))
  121.                 convert -size $(($WIDTH))x$(($HEIGHT)) -depth 8 "$SLIDEBUF" -rotate $ROTATE +repage -strip -type GrayScale -depth $BITS -compress Zip -quality 100 "$RESDIR"/$(printf %04d $SLIDE).pdf && echo "$FILENAME ++ Slide $SLIDE"
  122.             else
  123.                 cat "$SLIDEBUF" >"$OUTBUF3"
  124.                 break
  125.             fi
  126.         done
  127.  
  128.     fi
  129.  
  130.     wait
  131.  
  132.     # read results
  133.  
  134.     if [ -e "$OUTBUF1" ]
  135.     then
  136.         cat "$OUTBUF1" >"$INBUF1"
  137.     else
  138.         rm "$INBUF1" &>/dev/null
  139.     fi
  140.  
  141.     cat "$OUTBUF3" >"$INBUF2"
  142.  
  143.     if [ -e "$OUTBUF2" ]
  144.     then
  145.         cat "$OUTBUF2" >>"$INBUF2"
  146.     fi
  147.  
  148.     # exit
  149.  
  150.     if [[ ! -e "$OUTBUF1" ]] && [[ ! -e "$OUTBUF2" ]]
  151.     then
  152.         # last slide - weird approach
  153.         if [[ -s $INBUF2 ]]
  154.         then
  155.             SLIDE=$(( $SLIDE+1 ))
  156.             convert -size $(($WIDTH))x$(($HEIGHT)) -depth 8 "$SLIDEBUF" -rotate $ROTATE +repage -strip -type GrayScale -depth $BITS -compress Zip -quality 100 "$RESDIR"/$(printf %04d $SLIDE).pdf && echo "$FILENAME ++ Slide $SLIDE"
  157.         fi
  158.  
  159.         pdftk "$RESDIR"/*.pdf cat output $FILENAME.pdf
  160.         rm -r $RESDIR &>/dev/null
  161.  
  162.         rm "$RAMDIR"/* &>/dev/null
  163.         umount $RAMDIR
  164.  
  165.         echo "Done!"
  166.         date
  167.  
  168.         exit 0
  169.     fi
  170.  
  171. done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement