pdf 中的分页

pdf 中的分页

我有一个扫描的 PDF 文件,其中两个不同的真实页面一起出现在一个虚拟页面上。

分辨率质量良好。问题是我在阅读时必须缩放并从左向右拖动。
是否有一些命令(convert,,pdftk...)或脚本可以将此pdf文件转换为普通页面(书中的一页= pdf文件中的一页)?

答案1

由于我在 python 脚本(以及其他几个解决方案)方面遇到了问题,所以只是补充一下:对我来说mutool效果很好。这是优雅的阅读器附带的一个简单而小的附加功能mupdf。所以你可以尝试:

mutool poster -y 2 input.pdf output.pdf

对于水平分割,替换yx。当然,您可以将两者结合起来以获得更复杂的解决方案。

真的很高兴发现这个(经过多年的日常 mupdf 使用:)


安装mupdfmutool从源代码开始

mutool从 1.4 版开始随 mupdf 一起提供:http://www.mupdf.com/news

wget http://www.mupdf.com/downloads/mupdf-1.8-source.tar.gz
tar -xvf mupdf-1.8-source.tar.gz
cd mupdf-1.8-source
sudo make prefix=/usr/local install

或者前往下载页面找到更新的版本。

mutool从 Linux 发行包安装

在 Debian 上,包含的软件包mutoolmupdf-tools:

apt-get install mupdf-tools

答案2

这是一个使用以下命令的小型 Python 脚本旧的 PyPdf 库这很好地完成了工作。将其保存在名为(或您喜欢的任何名称)的脚本中un2up,使其可执行(chmod +x un2up),然后将其作为过滤器运行(un2up <2up.pdf >1up.pdf)。

#!/usr/bin/env python
import copy, sys
from pyPdf import PdfFileWriter, PdfFileReader
input = PdfFileReader(sys.stdin)
output = PdfFileWriter()
for p in [input.getPage(i) for i in range(0,input.getNumPages())]:
    q = copy.copy(p)
    (w, h) = p.mediaBox.upperRight
    p.mediaBox.upperRight = (w/2, h)
    q.mediaBox.upperLeft = (w/2, h)
    output.addPage(p)
    output.addPage(q)
output.write(sys.stdout)

忽略任何弃用警告;只有 PyPdf 维护者需要关心这些。

如果输入以不寻常的方式定向,则在截断页面时可能需要使用不同的坐标。看为什么我的代码无法正确分割扫描 pdf 中的每一页?


为了以防万一它有用,这是我之前的答案,它结合使用了两种工具和一些手动干预:

  • PDFjam(至少2.0版本),基于pdf页面LaTeX 包,用于裁剪页面;
  • pdf文件,将左半部分和右半部分重新组合在一起。

这两种工具都是需要的,因为据我所知,pdfpages 无法对一个流中的同一页面应用两种不同的转换。在对 的调用中pdftk,将 42 替换为输入文档 ( ) 中的页数2up.pdf

pdfjam -o odd.pdf --trim '0cm 0cm 14.85cm 0cm' --scale 1.141 2up.pdf
pdfjam -o even.pdf --trim '14.85cm 0cm 0cm 0cm' --scale 1.141 2up.pdf
pdftk O=odd.pdf E=even.pdf cat $(i=1; while [ $i -le 42 ]; do echo O$i E$i; i=$(($i+1)); done) output all.pdf

如果您没有 pdfjam 2.0,则使用 pdfpages 软件包安装 PDFLaTeX 就足够了(在 Ubuntu 上:您需要texlive-latex-推荐 安装 texlive-latex-推荐也许(在 Ubuntu 上:texlive 字体推荐 安装 texlive-fonts-推荐),并使用以下驱动程序文件driver.tex

\batchmode
\documentclass{minimal}
\usepackage{pdfpages}
\begin{document}
\includepdfmerge[trim=0cm 0cm 14.85cm 0cm,scale=1.141]{2up.pdf,-}
\includepdfmerge[trim=14.85cm 0cm 0cm 0cm,scale=1.141]{2up.pdf,-}
\end{document}

然后运行以下命令,将 42 替换为输入文件中的页数(必须调用2up.pdf):

pdflatex driver
pdftk driver.pdf cat $(i=1; pages=42; while [ $i -le $pages ]; do echo $i $(($pages+$i)); i=$(($i+1)); done) output 1up.pdf

答案3

Imagemagick 可以一步完成:

$ convert in.pdf -crop 50%x0 +repage out.pdf

答案4

ImageMagick 的转换命令可以帮助您将文件裁剪为两部分。看http://www.imagemagick.org/Usage/crop/

如果我是你,我会写一个这样的(shell)脚本:

  1. 分割你的文件pdfsam: 1 页 = 磁盘上的 1 个文件(格式并不重要。选择 ImageMagick 知道的格式。我只需要 PS 或 PDF。
  2. 对于每个页面,裁剪前半部分并将其放入名为 ${PageNumber}A 的文件中

  3. 裁剪后半部分并将其放入名为 ${PageNumber}B 的文件中。

    您将获得 1A.pdf、1B.pdf、2A.pdf、2B.pdf 等。

  4. 现在,将其再次组装到一个新的 PDF 中。 有很多方法可以做到这一点。

相关内容