2009-09-22 10 views
2

win32print 모듈을 사용하여 PDF 문서를 인쇄하려고합니다. 분명히이 모듈은 PCL 또는 원시 텍스트 만 허용 할 수 있습니다. 그 맞습니까?python의 win32print 모듈로 PDF 문서를 인쇄 하시겠습니까?

그렇다면 PDF 문서를 PCL로 변환 할 수있는 모듈이 있습니까?

필자는 ShellExecute를 사용할 것을 고려했다. 그러나 이는 기본 프린터로만 인쇄 할 수 있기 때문에 옵션이 아닙니다. 다양한 네트워크를 통해 서버의 다양한 프린터로 인쇄해야합니다. 당신의 도움에 대한

감사합니다, 피트

답변

9

이 작업을 수행하기 위해 Ghostscript을 사용했습니다. Ghostscript에 의존하는 명령 행 도구 gsprint이 있습니다.

PDF 형식으로 인쇄하려면 Acrobat을 설치하지 않아도됩니다. 그래서, 나는이 예제에서 내 PATH 변수에 추가 한

win32api.ShellExecute(0, 'open', 'gsprint.exe', '-printer "\\\\' + self.server + '\\' + self.printer_name + '" ' + file, '.', 0) 

참고 : 파이썬에서

gsprint -printer \\server\printer "test.pdf" 

: 명령 행에서

: 여기

은 예입니다 실행 파일을 호출 할 때 전체 경로를 포함 할 필요는 없습니다.

단 하나의 단점이 있습니다. 이 코드는 GPL로 라이센스되어 있으므로 상용 소프트웨어에는별로 유용하지 않습니다. 이 사람을 도움이

희망, 피트

+2

그렇게하면 Ghostscript가 PCL/Postscript와 같이 프린터가 지원하는 모든 언어로 출력 할 수 있습니다. 그 결과 출력 파일을 열어 필요에 따라 용지함 선택 등을위한 명령을 삽입 할 수 있습니다. –

+0

7.06/7.07과 같은 Ghostscript의 이전 버전을 사용하는 경우 라이센스 문제를 해결할 수있는 GNU 라이센스가 있다고 생각합니다. –

+2

GPL이 꼭 불리하지는 않습니다. ;) –

0

은 내가 특별히 win32print가 작동하도록하는 방법을 잘 모르겠지만, 다른 옵션의 몇 가지가있을 수 있습니다. Reportlab은 Python에서 PDF를 작성할 때 자주 언급됩니다. 이미 접근 방식에 투자하고 있다면 PyX 또는 pypsg을 사용하여 포스트 스크립트 파일을 생성 한 다음이를 win32print에 제공하면됩니다.

+0

이미 PDF를 만들 때 ReportLab을 사용하고 있습니다. 이제 인쇄해야합니다. – slypete

3

나는 이미 win32api.ShellExecute 접근 방식을 사용하고 기본이 아닌 프린터로 인쇄 할 필요했다. 내가 해결할 수있는 가장 좋은 방법은 일시적으로 기본 프린터를 변경하는 것이 었습니다. 인쇄를하기 전에 현재 기본 프린터가 무엇인지 저장하고 변경 한 다음 인쇄 후에 다시 설정합니다. 뭔가 같이 :

tempprinter = "\\\\server01\\printer01" 
currentprinter = win32print.GetDefaultPrinter() 

win32print.SetDefaultPrinter(tempprinter) 
win32api.ShellExecute(0, "print", filename, None, ".", 0) 
win32print.SetDefaultPrinter(currentprinter) 

나는 꽤의 주장하지 않을거야,하지만 근무하고 그것은 나를 내 다른 코드의 손길이 닿지 않은 떠날 수.

관련 문제