如何将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转换为一系列双页图像,并附带单独的封面?
答案 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"