Browse Source

fix #2466 use pdftoppm

Shinsuke Sugaya 5 years ago
parent
commit
30f466e5e2
1 changed files with 56 additions and 18 deletions
  1. 56 18
      src/main/assemblies/files/generate-thumbnail

+ 56 - 18
src/main/assemblies/files/generate-thumbnail

@@ -4,46 +4,84 @@ CMD_TYPE=$1
 URL=$2
 OUTPUT_FILE=$3
 IMAGE_SIZE=100x100!
+TARGET_FILE=`echo $URL | sed -e "s#^file:/*#/#g"`
 
 check_command() {
   CMD=$1
-  CMD_PATH=`which $CMD`
-  if [ ! -e "$CMD_PATH" ] ; then
-    echo "$CMD does not exist."
+  CMD_PATH=`which ${CMD}`
+  if [[ ! -e "${CMD_PATH}" ]] ; then
+    echo "${CMD} does not exist."
     exit 1
   fi
 }
 
-if [ x"$CMD_TYPE" = "xmsoffice" ] ; then
+if [[ x"${CMD_TYPE}" = "xmsoffice" ]] ; then
   check_command convert
+  check_command pdftoppm
   check_command unoconv
-  TARGET_FILE=`echo $URL | sed -e "s#^file:/*#/#g"`
-  TMP_FILE=/tmp/thumbnail.$$.pdf
-  unoconv -e PageRange=1-1 -o $TMP_FILE -f pdf $TARGET_FILE
-  if [ ! -f $TMP_FILE ] ; then
+  TMP_PDF_FILE=/tmp/thumbnail.$$.pdf
+  unoconv -e PageRange=1-1 -o ${TMP_PDF_FILE} -f pdf ${TARGET_FILE}
+  if [[ ! -f ${TMP_PDF_FILE} ]] ; then
     echo "unoconv does not work."
     exit 1
   fi
-  convert -thumbnail $IMAGE_SIZE ${TMP_FILE}[0] $OUTPUT_FILE
-  rm $TMP_FILE
-elif [ x"$CMD_TYPE" = "xpdf" ] ; then
+  TMP_PNG_PREFIX=/tmp/thumbnail.png.$$
+  pdftoppm -png -l 1 ${TMP_PDF_FILE} ${TMP_PNG_PREFIX}
+  TMP_PNG_FILE="${TMP_PNG_PREFIX}-1.png"
+  rm ${TMP_PDF_FILE}
+  if [[ ! -f ${TMP_PNG_FILE} ]] ; then
+    echo "pdftoppm does not work."
+    exit 1
+  fi
+  convert -thumbnail ${IMAGE_SIZE} ${TMP_PNG_FILE} ${OUTPUT_FILE}
+  rm ${TMP_PNG_PREFIX}*png
+elif [[ x"${CMD_TYPE}" = "xpdf" ]] ; then
   check_command convert
+  check_command pdftoppm
   TARGET_FILE=`echo $URL | sed -e "s#^file:/*#/#g"`
-  convert -thumbnail $IMAGE_SIZE ${TARGET_FILE}[0] $OUTPUT_FILE
-elif [ x"$CMD_TYPE" = "xps" ] ; then
+  TMP_PNG_PREFIX=/tmp/thumbnail.png.$$
+  pdftoppm -png -l 1 ${TARGET_FILE} ${TMP_PNG_PREFIX}
+  TMP_PNG_FILE="${TMP_PNG_PREFIX}-1.png"
+  if [[ ! -f ${TMP_PNG_FILE} ]] ; then
+    echo "pdftoppm does not work."
+    exit 1
+  fi
+  convert -thumbnail ${IMAGE_SIZE} ${TMP_PNG_FILE} ${OUTPUT_FILE}
+  rm ${TMP_PNG_PREFIX}*png
+elif [[ x"${CMD_TYPE}" = "xps" ]] ; then
   check_command convert
+  check_command pdftoppm
+  check_command ps2pdf
   TARGET_FILE=`echo $URL | sed -e "s#^file:/*#/#g"`
-  convert -thumbnail $IMAGE_SIZE ${TARGET_FILE}[0] $OUTPUT_FILE
-elif [ x"$CMD_TYPE" = "ximage" ] ; then
+  TMP_PDF_FILE=/tmp/thumbnail.pdf.$$
+  ps2pdf ${TARGET_FILE} ${TMP_PDF_FILE}
+  if [[ ! -f ${TMP_PDF_FILE} ]] ; then
+    echo "ps2pdf does not work."
+    exit 1
+  fi
+  TMP_PNG_PREFIX=/tmp/thumbnail.png.$$
+  pdftoppm -png -l 1 ${TMP_PDF_FILE} ${TMP_PNG_PREFIX}
+  TMP_PNG_FILE="${TMP_PNG_PREFIX}-1.png"
+  rm ${TMP_PDF_FILE}
+  if [[ ! -f ${TMP_PNG_FILE} ]] ; then
+    echo "pdftoppm does not work."
+    exit 1
+  fi
+  convert -thumbnail ${IMAGE_SIZE} ${TMP_PNG_FILE} ${OUTPUT_FILE}
+  rm ${TMP_PNG_PREFIX}*png
+elif [[ x"${CMD_TYPE}" = "ximage" ]] ; then
   check_command convert
   TARGET_FILE=`echo $URL | sed -e "s#^file:/*#/#g"`
-  convert -thumbnail $IMAGE_SIZE ${TARGET_FILE}[0] $OUTPUT_FILE
+  convert -thumbnail ${IMAGE_SIZE} ${TARGET_FILE} ${OUTPUT_FILE}
+elif [[ x"${CMD_TYPE}" = "x" ]] ; then
+  echo "No filetype."
+  exit 1
 else
-  echo "Unsupported type: $CMD_TYPE"
+  echo "Unsupported type: ${CMD_TYPE}"
   exit 1
 fi
 
-if [ ! -f $OUTPUT_FILE ] ; then
+if [[ ! -f ${OUTPUT_FILE} ]] ; then
   echo "Thumbnail is not created."
   exit 1
 fi