2012-05-17 3 views
2

내 질문에 잘못된 트리를 짖고있을 수도 있으므로 문제에 대한 철저한 설명을하려고합니다.-sDEVICE가 이미지 형식 인 경우 여러 페이지를 % printer %에 인쇄 하시겠습니까?

우리는 XML 파일을 받아 PDF를 생성하는 Windows 서비스를 가지고 있습니다. 그런 다음 생성 된 PDF를 -sOutputFile="%printer%" 매개 변수를 사용하여 Ghostscript로 출력 한 다음 XML 파일의 데이터를 기반으로 네트워크 프린터 중 하나의 이름을 출력합니다.

우리는 이전에 -sDEVICE=mswinpr2을 사용 했었지만이 크기는 약 70-80MB 크기의 인쇄 명령을 생성하는 것이 었습니다. 이것은 우리가 로컬 네트워크에있을 때 특히 도움이되지 않았습니다. 이제 여러 사이트에 대한 중앙 인쇄 서버가 생겼으므로 이러한 PDF 파일의 인쇄 시간은 이러한 불합리한 파일 크기를 고려할 때 천문학적이되었습니다.

이 파일을 사용하여 생성되고 있었다 :

" -sDEVICE=mswinpr2 -sPAPERSIZE=a4" _ 
& " -dBATCH -dNOPAUSE -dSAFER -dNoCancel" _ 
& " -sOutputFile=""%printer%" & [somePrinter] & """" 

다음 고스트 스크립트 명령을 사용하여, PNG 파일로 답을 내가 고스트 스크립트의 설정으로 주위를 연주하고 내가 찾은 거라고 생각 :

" -sDEVICE=png16m -r600x600 -sPAPERSIZE=a4" _ 
& " -dBATCH -dNOPAUSE -dSAFER -dNoCancel -dQUIET" _ 
& " -sOutputFile=""%printer%" & [somePrinter] & """" 

을 이것은 단일 페이지의 경우 잘 작동하여 단일 페이지 문서의 경우 약 150kb의 데이터 만 생성하지만 여러 페이지의 경우 첫 페이지 만 인쇄됩니다. 필자는 프린터 대신 파일로 출력하여 일부 테스트를 수행했으며 일부 종류의 이상한 다중 페이지 PNG가 만들어지고있는 것으로 밝혀졌으며 프린터가 혼란스러워지고 있다고 생각합니다.

실제 질문 : 여기

내 유일한 실제 제약 내가 사용자 상호 작용없이, 작은 파일 크기와 직접 프린터로 PDF 입력으로 파일 및 출력을 필요가있다.

아이디어가 부족하기 때문에 달성 할 수있는 GhostScript 설정 (또는 GhostScript 대신)을 추천 해 줄 수 있습니까?

+0

가능한 경우 실제 프린터 용 다른 드라이버 (큰 파일 크기는 드라이버 문제 일 수 있음)? 그 외에도 [PDFCreator] (http://sourceforge.net/projects/pdfcreator/files/latest/download)에 시도해 볼 수 있지만 이미 PDF 파일을 만들었지 만 사용자 상호 작용없이 인쇄 할 수 있습니다. – drcelus

+0

나는 그것을 시도해야 할 것 같아요. 프린터의 한 특정 모델에 테스트 인쇄물을 보냈습니다. 한 페이지 인쇄물로 다른 모델을 시험해 보았는데 수백 페이지의 횡설수설이 시작되었습니다. PNG 인쇄를 지원하지 않는다고 생각합니다 : ( – Frosty840

답변

2

mswinpr2 장치는 Windows 인쇄 시스템을 사용하여 다양한 프린터를 다룰 수 있습니다. 들어오는 파일을 비트 맵으로 렌더링하고, 비트 맵을 프린터 장치 컨텍스트에 블리딩 한 다음 프린터 컨텍스트에 프린터로 인쇄하도록 지시합니다. 분명히 고해상도 풀 컬러 페이지는 상당히 큰 비트 맵을 생성 할 수 있습니다. A4 페이지 @ 600dpi, CMYK 색상은 약 130Mb (8.26 * 600 * 11.69 * 600 * 4)입니다.

그래서 항상 프린터에 비트 맵을 보냅니다. 물론 이것은 커질 수 있습니다. 프린터는 종종 일 수있는 인쇄 언어를 이해하지만 출력을 작게 만들지 만 프린터에 대한 Ghostscript의 '알기'와 올바른 결과물 생성이 필요합니다. mswinpr2의 장점은 OS를 활용하여 무거운 짐을 덜어내는 것입니다. 단점은 항상 비트 맵을 생성하지만 적어도 Windows에서 지원하는 모든 프린터로 인쇄 할 수 있다는 것입니다.

당신이 발견 한대로 대부분의 프린터가 PNG를 이해하고 원래의 프린터 데이터로 들어오는 데이터를 처리한다는 점에서 당신의 첫 번째 프린터는 운이 좋았던 것 같습니다. 이 효과는 무엇이든 가능하지만 유용한 인쇄물을 생성 할 가능성은 거의 없습니다.

만약 당신이 다음 (PCL 파일은 아마 여전히 거대 할 것이다) 그 언어 중 하나에 당신의 PDF 파일을 변환하는 적절한 고스트 장치를 사용하여, 주어진 프린터가 PCL 또는 포스트 스크립트 지원하는 것을 알고있다.

투명성을 포함하는 PDF 파일은 PDF의 투명성 개념을 지원하는 다른 인쇄 언어가 없으므로 적어도 부분적으로는 비트 맵으로 변환해야합니다.

나는 너 자신을 발견했다. Psswrite를 사용하는 대신 ps2write를 사용하는 것이 더 빠르며 더 작은 출력을 생성 할 것을 권장합니다. 또한 pswrite 장치는 더 이상 사용되지 않으며 더 이상 지원되지 않습니다.

프린터에 적합한 해상도를 설정해야 할 수도 있습니다. ps2write는 페이지의 영역을 비트 맵 (예 : PDF 투명성)으로 렌더링하기 위해 때때로 사용하고 해상도 매개 변수를 사용하여 만들 이미지의 해상도를 결정합니다. 기본값은 720dpi이며 거의 모든 장치에서 잘 인쇄됩니다. 그러나 대부분의 장치에는 너무 길고 일부 조건에서는 큰 비트 맵을 다시 생성합니다 (카이로 제작 PDF 파일은 모든 페이지의 전체 부분을 투명하게 선언하므로 특히이 문제가 발생합니다)

+0

감사합니다. 솔루션으로 결정했을 때보 다 더 많은 정보를 얻었 기 때문에 대답했습니다. 장래의 독자들에게, [장치] (http://ghostscript.com/doc/current/Devices.htm) GS 문서의 페이지에서 자세한 내용을 보려면 [ps2ps2] (http://ghostscript.com/doc/current/Ps2ps2.htm) 페이지로 이동합니다 ps2write. 왜 나를 구글은 실제 "ps2write"페이지에 대한 링크를 찾을 수없는 이해를 뒤로 검색했다. – Frosty840

1

궁극적 인 해결책은 -sDEVICE=png16m -r600x600 대신 -sDEVICE=pswrite을 사용하는 것이 었습니다.

이 출력은 PostScript이며 모든 프린터에서 해석 할 수 있습니다.

슬프게도 대답은 아니지만 그럼에도 불구하고 해결책입니다.