0

如何将 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 中的页面大小与原始 inputfile.pdf 中的页面大小完全相同,导致 dualpagefile.pdf 页面的顶部和底部出现白边。

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

我正在尝试首先将 inputfile.pdf 转换为图像文件,然后将它们与双页图像相邻,但我不知道如何将convert --adjoin命令用于一系列图像,第一页保持原样或相邻有一个空白页。

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

4

2 回答 2

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 ..行并根据需要添加密度、质量设置。

于 2012-04-06T17:21:22.693 回答
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"
于 2012-04-06T21:23:52.493 回答