将PDF杂志转换为电视可视双图像格式

时间:2012-04-06 13:23:38

标签: image bash pdf imagemagick

如何将PDF格式的杂志转换为可在电视上观看?我的电视无法显示pdf,只能显示图像,而且由于它是宽屏显示,一次显示双页是有意义的。直到现在我使用了一个解决方案,这意味着以下步骤:

1.使用pdfnup(pdfjam软件包的一部分)将杂志转换为双页格式(实际上是单页是原始文件双页的pdf文件)

pdfnup inputfile.pdf --pages '{},1-' --outfile dualpagefile.pdf

由于参数--pages '{},1-',inputfile.pdf的第一页 - 杂志封面 - 与空页相邻。

2.将双页版本文档转换为可在电视上观看的图像

convert -density 150 dualpagefile.pdf imagefiles_%03d.jpg

此解决方案的问题是,dualpagefile.pdf中的pagesize与原始inputfile.pdf中的页面大小完全相同,导致在dualpagefile.pdf页面的顶部和底部出现白边距。

现在我正在寻找一种更简单,也许更快的解决方案,没有白色条纹。

我正在尝试将inputfile.pdf首先转换为imagefiles,然后将它们连接到双页图像,但我不知道如何使用convert --adjoin命令来处理一系列图像,其中第一个页面保持原样,或与空白页面相邻。

这个问题是否有任何优雅的解决方案:将pdf转换为一系列双页图像,并附带单独的封面?

2 个答案:

答案 0 :(得分:2)

我不是最好的bash,但这是你可以尝试的东西。 这要求所有文件都从book-0.jpg,book-1.jpg一直编号到book-n.jpg。 (这可以通过convert <filename>.pdf book.jpg

来实现
#!/bin/bash
one=1
num_files=$(ls *.jpg | wc -l)
for ((i=0; i<=$(($num_files-$one)); i+=2))
do
j=$(($i+$one)) 
montage -adjoin  book-$i.jpg book-$j.jpg Page_$i.jpg
done
echo "Process Finished"

我很确定有更好的方法可以做到这一点,但这种方式也可以。

您可以修改montage -adjoin ..行并根据需要添加密度,质量设置。

答案 1 :(得分:0)

根据Nunoxic的想法,最终代码:

#!/bin/bash
# usage: pdf2tv inputfile.pdf
FILENAME=$1                         # the inputfile
FILENAME_NOEXT=${FILENAME/\/*\//};      # the inputfile without extension
FILENAME_NOEXT=${FILENAME_NOEXT/.*/};   # the inputfile without extension and additional points in the name
FILENAME_NOWSP=${FILENAME_NOEXT// /_}; # substitute spaces with underscores
TVRESOL='1920x1080'                    # TV resolution

mkdir $FILENAME_NOWSP                  # make a directory for the generated images
cd $FILENAME_NOWSP

convert -density 150 -resize ${TVRESOL} "../${FILENAME}" ${FILENAME_NOWSP}.jpg    # convert pdf's pages to jpg
num_files=$(ls ${FILENAME_NOWSP}*.jpg | wc -l)          # number of jpgs    
mv ${FILENAME_NOWSP}-0.jpg Page_001.jpg                    # the cover page
counter=2
for ((i=1; i<=$(($num_files-1)); i+=2))
do
  j=$(($i+1)) 
  outfilename=Page_`printf %03d.jpg $counter`
  # appending 2 adjacent pages into a dual page image
  convert +append ${FILENAME_NOWSP}-$i.jpg ${FILENAME_NOWSP}-$j.jpg -resize '100%x100%' $outfilename
  rm ${FILENAME_NOWSP}-{$i,$j}.jpg  # removing the temporary single images
  ((counter+=1))
done
echo "Process Finished"