Ghostscript로 PDF 파일 다루기
Windows 에서는 gswin32.exe 일 것으로 생각된다.
1. PDF 파일에서 일부 페이지만 추출하여 새로운 PDF 파일 만들기
gs -dNOPAUSE -dBATCH -sOutputFile="output.pdf" -dFirstPage=3 -dLastPage=4 -sDEVICE=pdfwrite "input.pdf"
- 입력파일 : input.pdf
- 출력파일 : output.pdf (-sOutputFile="output.pdf")
- 시작페이지 : 3 (-dFirstPage=3)
- 마지막페이지 : 4 (-dLastPage=4)
2. 여러개의 PDF 파일을 1개의 PDF 파일로 만들기(PDF 합치기)
gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE="output.pdf" -dBATCH input-001.pdf input-002.pdf input-003.pdf input-004.pdf input-005.pdf
- 입력파일 : input-001.pdf ~ input-005.pdf
- 출력파일 : output.pdf (-sOUTPUTFILE="output.pdf")
3. 여러개의 JPEG 파일을 1개의 PDF 파일로 만들기
gs -dBATCH -dNOPAUSE -sPAPERSIZE=a4 -sDEVICE=pdfwrite -o output.pdf viewjpeg.ps \ -c "(input-001.jpg) viewJPEG showpage \ (input-002.jpg) viewJPEG showpage \ (input-003.jpg) viewJPEG showpage \ (input-004.jpg) viewJPEG showpage \ (input-005.jpg) viewJPEG showpage"
- 입력파일 : input-001.jpg ~ input-005.jpg
- 출력파일 : output.pdf (-o output.pdf)
-sPAPERSIZE= 의 기본 값은 "letter" 이므로 대한민국에서 많이 사용되는 "a4" 로 한다.
Paper sizes known to Ghostscript 를 참조한다.
PAPERSIZE 대신 넓이와 높이를 지정할 수도 있다.
-dDEVICEWIDTHPOINTS=595 -dDEVICEHEIGHTPOINTS=842
넓이와 높이의 단위는 "Points" 인데, "Points" = 인치 * 72 이므로, mm 를 "Points" 로 환산하는 것은 Math.round((mm값 / 25.4) * 72) 이 된다.
4. PDF 파일을 흑백(Gray Scale)으로 변경하기
gs \ -dNOPAUSE \ -dBATCH \ -sOutputFile="output.pdf" \ -dProcessColorModel=/DeviceGray \ -dColorConversionStrategy=/Gray \ -sDEVICE=pdfwrite \ "input.pdf" \
- 입력파일 : input.pdf
- 출력파일 : output.pdf (-sOutputFile="output.pdf")
5. PDF 파일을 여러개의 JPEG 파일로 변환하기
gs -dBATCH -dNOPAUSE -sDEVICE=jpeg -sOutputFile=output-%03d.jpg -r300x300 -f input.pdf
- 입력파일 : input.pdf (-f input.pdf)
- 출력파일 : input-001.jpg ~ input-00X.jpg (-sOutputFile=output-%03d.jpg)
6. 관련 명령어
6.1. gdal로 tiff를 pdf로 변환
gdal_translate -of pdf input.tif output.pdf
6.2. ImageMagick 으로 (여러개의) tiff를 pdf로 변환
convert -limit memory 0 -limit map 0 *.tif -compress jpeg -quality 100 output.pdf
7. Apache PDFBox 를 이용해서 pdf 파일 다루기
시스템에 java 가 설치되어 있다면, Apache PDFBox® 에서 pdfbox-app-3.0.6.jar 파일을 다운로드 한다.
PDFBox 는 gui 는 아니지만, Command-Line Tools 을 제공한다.
PDF 파일 병합은 다음과 같다.
java -jar pdfbox-app-3.0.6.jar merge -o="d:\output.pdf" -i="d:\input_001.pdf" -i="d:\input_002.pdf"
d:\input_001.pdf 과 d:\input_002.pdf 파일을 합쳐서
d:\output.pdf 파일을 만든다.
PDF 파일에서 일부 페이지만 떼어내서 새로운 PDF 를 만드는 것은 다음과 같다.
java -jar pdfbox-app-3.0.6.jar split --input="d:\input.pdf" -outputPrefix="d:\input" -startPage=3 -endPage=4
결과파일은
d:\input-001.pdf 가 된다.
추가적인 사용법은 다음을 참조한다.
cmd 나 powershell 같은 cli 환경에서 사용하는 것이 다소간의 불편함이 있을 수 있지만, 배치 파일로 만들어서 사용하면 그럭저럭 쓸만하다.
Windows 에서 .js 배치 파일로 만든다면, 메모장에서는 ANSI, jEdit 에서는 EUC-KR 로 저장한다.
Windows 에서 js 파일을 이용한 PDF 병합의 예는 다음과 같다.
var folder = "D:\\"; var outputFile = "output.pdf"; var inputFiles = new Array(); inputFiles.push("input_001.pdf"); inputFiles.push("input_001.pdf"); inputFiles.push("input_003.pdf"); var command = "java"; var args = " -jar pdfbox-app-3.0.6.jar"; args += " merge"; args += " -o=\"" + folder + outputFile + "\""; for(var i = 0; i < inputFiles.length; i++) { args += " -i=\"" + folder + inputFiles[i] + "\""; } var wsh = new ActiveXObject("WScript.Shell"); wsh.Run(command + " " + args);