最近由于课程安排,我们需要写一些文章。其中涉及讨论软件界面设计、JavaCC使用、解释器构造设计等等,我便有了发到blog的想法。由于文章又长又多,在向上发送和编辑时非常麻烦(其中涉及表格、图像、各种文字以及数学公式)。在这个时候我想到可以将文件导出成图片,这样虽然无法让浏览器检索到但是便于编辑、浏览和保存,当然它也在一定程度上起到了版权保护的作用(不过这个意义不大,譬如可以通过人肉啊、模式识别工具来把数据抠出来)。总之,我便遇到了一个新的问题:需要做一个方便转换的小工具。
在这里,我通过组合Ubuntu上已有的各个小组件来实现这个工具。在前一个版本中主要是原理上面的实现,后面一个版本提高了速度(让数据交换在缓存中进行,第一个版本是通过文件交换的)以及一些注释达到软件工程的基本标准。
以下是详细的shell代码,第二版本中有比较详细的注释。欢迎大家交流学习。
第一个版本:
#This shell is using for tanslate the pdf files to many jpg files. #You can make your copyright more safely. pdfFileName=${1%.pdf} pdftoppm $pdfFileName.pdf $pdfFileName ppmFiles=`ls $pdfFileName-*.ppm` jpgDir=$pdfFileName-pdf2jpg mkdir $jpgDir for pic in $ppmFiles do jpgFile=${pic%ppm}jpg pnmtojpeg $pic > $jpgFile mv $jpgFile $jpgDir done rm -r $ppmFiles
第二个版本:
#This shell is using for tanslate the pdf file to many jpg files. #You can make your copyright more safely. if [ $# != 1 ] then echo 'pdftojpg version 0.01' echo 'Copyright 2001-2008 by QJGui' echo 'Usage: pdftojpg <PDF-file>' exit fi ###############Get the basic information about the pdf file #pdf File name pdfFile=$1 if [ -e $pdfFile ] then echo "Find File: $pdfFile" else echo "Can not find the pdf File: $pdfFile" exit fi #pdf File name without the type(.pdf) pdfFileName=${pdfFile%.pdf} #Create the dictionary jpgDir=$pdfFileName-pdf2jpg if [ -e $jpgDir ] then echo "The dictionary of $jpgDir exists. Removing it......" rm -r $jpgDir fi echo "Make a new dictionary $jpgDir......" mkdir $jpgDir #Get the total page of the pdf file count=0 x=`pdfinfo $pdfFile | grep 'Pages:*' ` totPage=${x:6:${#x}} echo "Total page number: $totPage" #####################Get Basic Info End ########### while [ $count -lt $totPage ] do count=`expr $count + 1` jpgFile=$pdfFileName-$count.jpg echo "Convert the page $count/$totPage......" pdftoppm -f $count -l $count $pdfFile | pnmtojpeg > ./$jpgDir/$jpgFile done echo "Success. Finish the job. Please see the $jpgDir "
在编辑保存完后,建议大家将其添加到bin目录中以方便调用。