본문 바로가기

프로그래밍/미분류

[SO번역] CUPS 를 이용해 "Print to PDF" 필터 또는 백엔드를 프로그래밍하는 방법

반응형

https://stackoverflow.com/questions/11192396/programming-a-filter-backend-to-print-to-pdf-with-cups-from-any-mac-os-x-appli/11194723#11194723

 

답변 :

이렇게 해 보자 :

  • 임의의 프린터 드라이버로 프린트큐를 하나 만든다. (프린터 드라이버로는 PostScript driver/PPD 를 사용하길 권장한다. PostScript PPD 파일에는 *cupsFilter: ... 와 같은 라인이 없다.)
  • 우선은 2dir 이라는 CUPS의 예시용 백엔드를 사용한다. 이건 KDE Printing Developer Tools Wiki 에서 복사해 올 수 있다. 가져올 때 파일의 line ending 을 확인하자.
  • 프린트큐를 만드는 명령은 다음과 같다.
       
        lpadmin  -p pdfqueue  -v 2dir:/tmp/pdfqueue  -E  -P /path/to/postscript-printer.ppd
       
       2dir 백엔드는 이제 모든 출력을 /tmp/pdfqueue 디렉토리 아래에 저장할 것이다. 인쇄작업은 서로다른 이름을 갖게 된다. 각각의 결과는 일단은 포스트스크립트 파일이다.
  • /etc/cups/ppd/ 에 있는 이 프린터큐가 사용하는 PPD 를 찾아보자. 이름은 pdfqueue.ppd 다.
  • PPD 파일의 되도록 앞부분에 다음 라인을 추가한다.

       *cupsFilter: "application/pdf 0 -"

      (*cupsFilter 라인의 맨 앞에 공백이 없어야 한다.) 이 라인은 cupsd 에게 PDF를 만들어내는 필터체인을 알려준다. 마지막의 - 가 백엔드를 거쳐 프린터로 보내기 전의 필터의 이름이고, - 필터는 특별한 의미를 가지는데, 입력을 그대로 출력으로 보내는 역할만 한다. (패쓰쓰루 필터)
  • CUPS 스케쥴러를 재시작한다.

       sudo launchctl unload /System/Library/LaunchDaemons/org.cups.cupsd.plist
       sudo launchctl load /System/Library/LaunchDaemons/org.cups.cupsd.plist
     
  • 이제 pdfqueue 는 해당 큐로 인쇄된 모든 인쇄작업을 /tmp/pdfqueue/*.pdf 에 PDF 형식으로 저장하게 된다.
  • 2dir 백엔드 스크립트를 공부해 보라. 간단한 배시스크립트이고, 코멘트도 잘 달려 있다.
  • 2dir 을 수정해서 원하는대로 pdf 를 조작하여 그 결과를 /tmp/pdfqueue/*.pdf 에 저장하면 된다.
728x90