문제

다음과 같이 순차적으로 이름이 지정된 일련의 PDF가 있습니다.

  • 01_foo.pdf
  • 02_바.pdf
  • 03_baz.pdf
  • 등.

Ruby를 사용하면 이러한 항목을 순서대로 유지하면서 하나의 큰 PDF로 결합할 수 있습니까?작업을 수행하는 데 필요한 보석을 설치하는 데 신경 쓰지 않습니다.

Ruby에서는 이것이 불가능하다면 다른 언어는 어떻습니까?가능하다면 상업적인 구성 요소는 없습니다.


업데이트: Jason Navarrete의 제안 완벽한 솔루션을 제공합니다.

결합해야 하는 PDF 파일을 다음과 함께 디렉토리에 배치합니다. pdftk (또는 pdftk가 PATH에 있는지 확인하세요) 다음 스크립트를 실행하세요:

pdfs = Dir["[0-9][0-9]_*"].sort.join(" ")
`pdftk #{pdfs} output combined.pdf`

아니면 명령줄에서 한 줄로 수행할 수도 있습니다.

ruby -e '`pdftk #{Dir["[0-9][0-9]_*"].sort.join(" ")} output combined.pdf`'

훌륭한 제안 Jason, 완벽한 솔루션입니다. 감사합니다. 그에게 찬성 투표를 해주세요.

도움이 되었습니까?

해결책

루비토크 게시물은 다음을 사용하도록 제안합니다. pdftk PDF를 병합하는 툴킷.

전화하는 것이 상대적으로 간단해야합니다. pdftk 외부 프로세스로 병합을 처리하도록 합니다. PDF::작가 달성하고자 하는 것은 단순한 추가뿐이므로 과잉일 수 있습니다.

다른 팁

PostScript로 변환한 후 다시 되돌리면 이 작업을 수행할 수 있습니다.PostScript 파일은 간단하게 연결할 수 있습니다.예를 들어, 다음은 Ghostscript 도구 ps2pdf 및 pdf2ps를 사용하는 Bash 스크립트입니다.

#!/bin/bash
for file in 01_foo.pdf 02_bar.pdf 03_baz.pdf; do
    pdf2ps $file - >> temp.ps
done

ps2pdf temp.ps output.pdf
rm temp.ps

나는 Ruby에 익숙하지 않지만 거의 확실하게 몇 가지 기능이 있습니다(라고 불릴 수도 있음). system() (그저 추측)) 주어진 명령줄을 호출합니다.

플랫폼에 고스트스크립트가 있는 경우 다음 명령을 실행하고 실행하세요.

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=finished.pdf <소스 PDF 파일>

나는 pdftk 솔루션을 시도했지만 SnowLeopard와 Tiger 모두에서 문제가 있었습니다.Tiger에 설치하면 실제로 내 시스템이 혼란에 빠졌고 스크립트/서버를 실행할 수 없게 되었습니다. 다행스럽게도 이 시스템은 웹 개발에서 은퇴한 시스템입니다.

그 후 다른 옵션을 찾았습니다.-PDF에 가입하세요.전혀 고통스럽지 않고 빠르게 설치되었으며 완벽하게 작동했습니다.

또한 GhostScript를 사용해 보았으나 처참하게 실패했습니다(글꼴을 읽을 수 없었고 결국 이미지만 있는 PDF만 남았습니다).

하지만 이 문제에 대한 해결책을 찾고 있다면 JoinPDF를 사용해 보세요.

내 생각엔 Ruby에는 그런 도구가 없다고 생각합니다.ImageMagick과 Cairo를 확인해 보세요.ImageMagick은 여러 그림/문서를 함께 바인딩하는 데 사용할 수 있지만 PDF 사례에 대해서는 잘 모르겠습니다.

그렇다면 이런 종류의 작업을 수행할 수 있는 Windows 도구(상용)가 분명히 있습니다.

나는 카이로를 직접 사용한다. 생성 PDF.PDF가 귀하로부터 온다면 아마도 그것이 해결책이 될 것입니다(여러 페이지를 지원합니다).행운을 빌어요!

GhostScript(GNU 라이센스)를 사용하는 PDFCreator(VB, 내가 착각한 것이 아니라면 다른 언어로 유사한 코드를 구현하는 것이기 때문에 문제가 되지 않음)의 코드를 살펴보는 것이 좋습니다.아니면 GhostScript 자체를 직접 살펴보세요.원하는 작업을 수행할 수 있는 GhostPDF라는 외관 레이어도 있습니다.

VB로 GhostScript를 제어할 수 있다면 C로도 제어할 수 있습니다. 즉, Ruby로도 제어할 수 있습니다.

Ruby에는 이 작업을 수행할 수 있는 외부 프로그램을 호출할 수 있는 IO.popen도 있습니다.

실제 애플리케이션에서 이를 수행하는 Ruby 코드는 아마도 매우 느릴 것입니다.나는 그 일을 수행하기 위해 유닉스 도구를 찾으려고 노력할 것입니다.이는 Mac OS X 사용의 장점 중 하나입니다. 매우 빠른 PDF 기능이 내장되어 있습니다.차선책은 아마도 유닉스 도구일 것이다.

사실 저는 rtex로 어느 정도 성공을 거두었습니다.당신이 보면 여기 당신은 그것에 대한 몇 가지 정보를 찾을 수 있습니다.이것은 제가 사용해 본 어떤 Ruby 라이브러리보다 훨씬 빠르며 Latex에는 다른 소스에서 PDF 데이터를 가져오는 기능이 있다고 확신합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top