'pypdf'에 해당되는 글 1건

  1. 2013.10.23 두쪽 PDF를 한쪽 단위로 나누기.



책읽기에 재미를 붙이 큰 아이의  생일 선물로 킨들 화이트페이퍼를 구입했다.

그동안 가지고 있던 PDF파일들을 킨들에 넣어주려 했는데, 아뿔사. 아이가 읽을 수 있는 PDF 파일들 대부분이 두쪽이 한장, 즉 왼쪽과 오른쪽으로 나뉘어지는 구조였다.

랜드스케이프모드에서 읽어보려고 했는데 글자가 너무 작았다.  결국  PDF를 반으로 나누어 하나의 파일로 만들어줄 도구가 필요했다. 이래저래 알아보다가 크랙을 하거나 쉐어웨어를 사용하기 보다는 그냥 직접 파이썬으로 작은 스크립트를 만들어 사용하기로 했다.


뭐 도움이 될까 해서 스크립트를 공개해둔다.

사실 가장 중요한 PDF파일 핸들링은 파이썬으로 작성된 pyPDF 모듈을 설치하여 사용하였다.

PyPdf : http://pybrary.net/pyPdf/


불필요한 페이지를 삭제하는 스크립트도 작성했지만, 나중에 좀 더 수정을 해봐야 겠다.


import copy
import sys
from os import path
from pyPdf import PdfFileWriter, PdfFileReader

def devidePages(filepath) :
	dirname  = path.dirname(filepath)
	filename = path.splitext(path.basename(filepath))[0]
	inPdf = PdfFileReader(file(filepath, "rb"))
	outPdf = PdfFileWriter()
	for page in [inPdf.getPage(i) for i in range(0, inPdf.getNumPages())] :
		rpage = copy.copy(page)
		(w, h) = page.mediaBox.upperRight
		page.mediaBox.upperRight = (w/2, h)
		rpage.mediaBox.upperLeft = (w/2, h)
		outPdf.addPage(page)
		outPdf.addPage(rpage)

	outStream = file(path.join(dirname, filename + "_out.pdf"), "wb")
	outPdf.write(outStream)
	outStream.close()

if __name__ == "__main__":
	if len(sys.argv) != 2 :
		print "Usage : " + path.basename(sys.argv[0]) + " [input pdf filepath]"
	else :
		if path.isfile(sys.argv[1]) :
			devidePages(sys.argv[1])
		else :
			print " Error : " + sys.argv[1] + " is not found."
Posted by NeoZest