하나의 가상 페이지에 두 개의 서로 다른 실제 페이지가 함께 나타나는 스캔한 PDF 파일이 있습니다.
해상도 품질은 좋습니다. 문제는 읽으면서 확대/축소하고 왼쪽에서 오른쪽으로 드래그해야 한다는 것입니다. 이 pdf 파일을 일반 페이지(책의 한 페이지 = pdf 파일의 한 페이지)로 변환할 수 있는 명령( , , ...)이나 스크립트가
있습니까 ?convert
pdftk
답변1
Python 스크립트(및 몇 가지 다른 솔루션)에 문제가 있으므로 추가하자면: mutool
나에게는 잘 작동합니다. 이것은 우아한 리더와 함께 제공되는 간단하고 작은 추가 기능입니다 mupdf
. 따라서 다음을 시도해 볼 수 있습니다.
mutool poster -y 2 input.pdf output.pdf
수평 분할의 경우 y
로 바꾸십시오 x
. 물론 더 복잡한 솔루션을 위해 두 가지를 결합할 수도 있습니다.
(수년간 매일 mupdf를 사용한 후) 이것을 발견하게 되어 정말 기쁩니다 :)
소스에서 설치 mupdf
및 mutool
시작
( 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에 포함된 패키지는 mutool
다음과 같습니다.mupdf-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의 각 페이지를 올바르게 분할하지 않는 이유는 무엇입니까?
도움이 될 경우를 대비해 두 도구와 일부 수동 개입을 함께 사용하는 이전 답변은 다음과 같습니다.
내가 아는 한 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-권장 어쩌면 (Ubuntu에서는:texlive 글꼴 추천 ), 다음 드라이버 파일을 사용하십시오 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/
내가 당신이라면 다음과 같은 (셸) 스크립트를 작성하겠습니다.
- 파일 분할pdfsam: 1페이지 = 디스크에 1개 파일 (형식은 상관없습니다. ImageMagick이 아는 형식을 선택하세요. PS나 PDF만 있으면 됩니다.)
각 페이지마다,앞부분 자르기${PageNumber}A라는 파일에 넣으세요.
후반부를 잘라서 ${PageNumber}B라는 파일에 넣습니다.
1A.pdf, 1B.pdf, 2A.pdf, 2B.pdf 등을 얻을 수 있습니다.
- 이제 이를 다시 새로운 PDF로 모아보세요. 이를 수행하는 방법에는 여러 가지가 있습니다.