如何使用命令行将每个PDF页面分为两页?

菲利普·柯比布莱德(Philip Kirkbride)

我有几本从原件扫描而来的电子书。它们经过了格式化,因此一个PDF页面包含两个实际页面:一个在左边,一个在右边。

我想以编程方式将每个PDF页面分为两部分,因此PDF页面1的左侧50%变为页面1,其右侧变为2页面,以此类推。

有谁知道命令行实用程序或脚本可以帮助您解决此问题?


来自的输出pdfimages -list -f 1 -l 1 file.pdf

page   num  type   width height color comp bpc  enc interp  object ID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------------
   1     0 image    1921  1561  rgb     3   8  jpeg   no       643  0   200   200  200K 2.3%
   1     1 stencil     1     1  -       1   1  image  no   [inline]   0.692     2    -    - 
   1     2 stencil     1     1  -       1   1  image  no   [inline]   0.722 0.650    -    - 
   1     3 stencil     1     1  -       1   1  image  no   [inline]       3     3    -    - 

第二PDF:

page   num  type   width height color comp bpc  enc interp  object ID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------------
   1     0 image     456   625  gray    1   8  jpx    yes      251  0    72    72 11.7K 4.2%
克里斯·希尔

这应该可以使用它所需的pdftk工具(和ghostscript)。

一个简单的例子:

第一步:拆分成单独的页面

 pdftk clpdf.pdf burst

这将产生文件pg_0001.pdf, pg_0002.pdf, ... pg_NNNN.pdf,每页一个。它还产生doc_data.txt包含页面尺寸的信息。

第二步:创建左右半页

  pw=`cat doc_data.txt  | grep PageMediaDimensions | head -1 | awk '{print $2}'`
  ph=`cat doc_data.txt  | grep PageMediaDimensions | head -1 | awk '{print $3}'`
  w2=$(( pw / 2 ))
  w2px=$(( w2*10 ))
  hpx=$((  ph*10 ))
  for f in  pg_[0-9]*.pdf ; do
   lf=left_$f
   rf=right_$f
   gs -o ${lf} -sDEVICE=pdfwrite -g${w2px}x${hpx} -c "<</PageOffset [0 0]>> setpagedevice" -f ${f}
   gs -o ${rf} -sDEVICE=pdfwrite -g${w2px}x${hpx} -c "<</PageOffset [-${w2} 0]>> setpagedevice" -f ${f}
  done

第三步:左右合并以生成newfile.pdf包含单个页面的.pdf。

  ls -1 [lr]*_[0-9]*pdf | sort -n -k3 -t_ > fl
  pdftk `cat fl`  cat output newfile.pdf 

更一般的情况:

  1. 上面的示例假定所有页面的大小均相同。doc_data.txt文件包含每个拆分页面的大小。如果命令

    grep PageMediaDimensions <doc_data.txt | sort | uniq | wc -l

    不返回1,则页面具有不同的尺寸,并且在第二步中需要一些额外的逻辑

  2. 如果分割比例不完全是50:50 w2=$(( pw / 2 )),则需要上面示例中使用的公式更好的公式

第二个示例显示了如何处理这种更一般的情况。

第一步:pdftk像以前一样拆分

第二步:现在创建三个文件,其中包含每个页面的宽度和高度,以及一个默认值,用于左页面将使用的拆分比例。

  grep PageMediaDimensions <doc_data.txt | awk '{print $2}'    >   pws.txt
  grep PageMediaDimensions <doc_data.txt | awk '{print $3}'    > phs.txt
  grep PageMediaDimensions <doc_data.txt | awk '{print "0.5"}' > lfrac.txt

lfrac.txt如果有关于在何处分割不同页面的信息,则可以手动编辑该文件

第三步:现在,使用不同的页面尺寸和(如果已编辑)不同的分割位置来创建左右拆分页面。

#!/bin/bash
exec 3<pws.txt
exec 4<phs.txt
exec 5<lfrac.txt

for f in  pg_[0-9]*.pdf ; do
 read <&3 pwloc
 read <&4 phloc
 read <&5 lfr
 wl=`echo "($lfr)"'*'"$pwloc" | bc -l`;wl=`printf "%0.f" $wl`
 wr=$(( pwloc - wl ))
 lf=left_$f
 rf=right_$f
 hpx=$((  phloc*10 ))
 w2px=$(( wl*10 ))
 gs -o ${lf} -sDEVICE=pdfwrite -g${w2px}x${hpx} -c "<</PageOffset [0 0]>> setpagedevice" -f ${f}
 w2px=$(( wr*10 ))
 gs -o ${rf} -sDEVICE=pdfwrite -g${w2px}x${hpx} -c "<</PageOffset [-${wl} 0]>> setpagedevice" -f ${f}
done

第四步:这与上一个更简单的示例中的合并步骤相同。

  ls -1 [lr]*_[0-9]*pdf | sort -n -k3 -t_ > fl
  pdftk `cat fl`  cat output newfile.pdf 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用命令行将4GB SQL文件拆分为查询

来自分类Dev

从命令行每张纸打印两页

来自分类Dev

如何使用命令行将音频输出切换到每个应用程序的特定设备?

来自分类Dev

使用命令行打印特定的PDF页面

来自分类Dev

使用命令行重新排列PDF页面

来自分类Dev

使用命令行重新排列PDF页面

来自分类Dev

如何使用命令行工具批量处理pdf中的每个图像?

来自分类Dev

使用命令行将窗口移至特定屏幕

来自分类Dev

使用命令行将窗口移至特定屏幕

来自分类Dev

使用命令行将.CSV转换为.XLSX

来自分类Dev

如何使用命令行将新用户添加为sudoer?

来自分类Dev

如何使用命令行将图像从文件复制到剪贴板?

来自分类Dev

如何使用命令行将文件复制到多个文件夹?

来自分类Dev

如何使用命令行将文件部署到Artifactory?

来自分类Dev

如何使用命令行将应用程序上传到Windows应用商店

来自分类Dev

如何使用命令行将单个C#类文件编译为.exe?

来自分类Dev

如何使用命令行将分支推送到gitlab

来自分类Dev

如何使用命令行将跟踪器更改/添加到.torrent文件?

来自分类Dev

如何使用命令行将图像从文件复制到剪贴板?

来自分类Dev

如何使用命令行将新用户添加为sudoer?

来自分类Dev

如何使用命令行将应用程序上传到Windows应用商店

来自分类Dev

如何使用命令行将查询结果导出到文本文件

来自分类Dev

如何将PDF文件快速拆分为单页(即从“终端”命令行中)?

来自分类Dev

如何从命令行将ppt转换为pdf?

来自分类Dev

如何使用 WinRAR 命令行将多个档案提取到每个文件夹?

来自分类Dev

如何使用jsPDF在PDF中以两页显示图像?

来自分类Dev

如何使用命令行将切入点附加到.jar文件中驻留的类的方法?

来自分类Dev

如何在OS X中使用命令行将GIF文件转换为PNG或JPEG?

来自分类Dev

Python CSV Reader:如何使用命令行将输出传递到另一个脚本

Related 相关文章

  1. 1

    如何使用命令行将4GB SQL文件拆分为查询

  2. 2

    从命令行每张纸打印两页

  3. 3

    如何使用命令行将音频输出切换到每个应用程序的特定设备?

  4. 4

    使用命令行打印特定的PDF页面

  5. 5

    使用命令行重新排列PDF页面

  6. 6

    使用命令行重新排列PDF页面

  7. 7

    如何使用命令行工具批量处理pdf中的每个图像?

  8. 8

    使用命令行将窗口移至特定屏幕

  9. 9

    使用命令行将窗口移至特定屏幕

  10. 10

    使用命令行将.CSV转换为.XLSX

  11. 11

    如何使用命令行将新用户添加为sudoer?

  12. 12

    如何使用命令行将图像从文件复制到剪贴板?

  13. 13

    如何使用命令行将文件复制到多个文件夹?

  14. 14

    如何使用命令行将文件部署到Artifactory?

  15. 15

    如何使用命令行将应用程序上传到Windows应用商店

  16. 16

    如何使用命令行将单个C#类文件编译为.exe?

  17. 17

    如何使用命令行将分支推送到gitlab

  18. 18

    如何使用命令行将跟踪器更改/添加到.torrent文件?

  19. 19

    如何使用命令行将图像从文件复制到剪贴板?

  20. 20

    如何使用命令行将新用户添加为sudoer?

  21. 21

    如何使用命令行将应用程序上传到Windows应用商店

  22. 22

    如何使用命令行将查询结果导出到文本文件

  23. 23

    如何将PDF文件快速拆分为单页(即从“终端”命令行中)?

  24. 24

    如何从命令行将ppt转换为pdf?

  25. 25

    如何使用 WinRAR 命令行将多个档案提取到每个文件夹?

  26. 26

    如何使用jsPDF在PDF中以两页显示图像?

  27. 27

    如何使用命令行将切入点附加到.jar文件中驻留的类的方法?

  28. 28

    如何在OS X中使用命令行将GIF文件转换为PNG或JPEG?

  29. 29

    Python CSV Reader:如何使用命令行将输出传递到另一个脚本

热门标签

归档