2012-05-04 2 views
6

인쇄를 위해 Ghostscript를 사용하여 PDF 문서를 PCL로 변환합니다. 최근에 인쇄하기 전에 모든 페이지를 세로로 회전해야한다는 추가 요구 사항이 있습니다. Ghostscript를 사용하여 명령과 포스트 스크립트 기능을 사용하는 방법을 발견했습니다. rotate612x792.psGhostscript 페이지 회전

%! Rotate Pages 
<< /Policies << /PageSize 5 >> 
    /PageSize [612 792] 
    /InputAttributes currentpagedevice 
    /InputAttributes get mark exch {1 index /Priority eq not {pop << /PageSize [612 792] >>} if } forall >> 
    >> setpagedevice 

문제의

"C:\Program Files (x86)\gs\bin\gswin32c.exe" "-dNOPAUSE" "-dNOPROMPT" "-dBATCH" "-sDEVICE=pxlmono" "-Ic:\Program Files (x86)\gs\fonts\;c:\Program Files (x86)\gs\lib\;c:\Program Files (x86)\gs\lib\;" "-r300" "-sOutputFile=C:\EXPORTFILE_e542e04f-5e84-4c8e-9b41-55480cd5ec52.cache" "rotate612x792.ps" "C:\EXPORTFILE_3a5de9da-d9ca-4562-8cb6-10fb8715385a.cache" 

내용이 기능 문자의 크기를 가진 모든 페이지 크기를 대체한다는 것입니다. 내 서류가 때때로 합법적이거나 A4입니다. 가로 세로 크기를 초상화와 바꾸기 위해이 함수를 수정하려고 시도했지만 작동중인 포스트 스크립트를 생성 할 수 없었습니다. 다음 의사 코드와 동일한 포스트 스크립트를 생성하려면 올바른 방향으로 지적해야합니다.

for(each page) 
{ 
    if(PageSize == [792 612]) 
     PageSize = [612 792]; 
} 

나는 회전 페이지의 비 고스트 가지 방법이 있다는 것을 알고,하지만 난 얻을 수 있다면이 내 프로세스에 잘 맞는 것 작동하고 성능이 저하되지 않습니다. 당신이 그것으로 많은 작업을 수행 할 수 있도록 Sample1.pdf

답변

2

실용적인 해결책을 찾았습니다. 내가 바라던만큼 다재다능하지는 않지만 모든 요구 사항을 충족시킵니다.

다음 포스트 스크립트 스크립트는 A4, Letter 및 Legal 문서를 세로로 회전합니다. 다른 페이지 크기를 수행하려면 최소 및 최대 크기를 조정하십시오.

%!PS 
    % Sequence to set up for a single page size, auto fit all pages. 
    % Autorotate A4 Letter and Legal page sizes to Portrait 
    << /Policies << /PageSize 3 >> 
    /InputAttributes currentpagedevice /InputAttributes get %current dict 
    dup { pop 1 index exch undef } forall % remove all page sizes 
    dup 0 << /PageSize [ 595 0 612 99999 ] >> put % [ min-w min-h max-w max-h ] 
    >> setpagedevice 

이 포스트 스크립트 스크립트는 A4, Letter 및 Legal 문서를 가로 방향으로 회전합니다. 유일한 차이점은 최소/최대 페이지 크기 값입니다.

%!PS 
    % Sequence to set up for a single page size, auto fit all pages. 
    % Autorotate A4 Letter and Legal page sizes to Landscape 
    << /Policies << /PageSize 3 >> 
    /InputAttributes currentpagedevice /InputAttributes get %current dict 
    dup { pop 1 index exch undef } forall % remove all page sizes 
    dup 0 << /PageSize [ 0 595 99999 612 ] >> put % [ min-w min-h max-w max-h ] 
    >> setpagedevice 

이 솔루션은 내가 hylafax 프로젝트의 소스 코드에있는 auto-rotate.ps 파일을 기반으로합니다. 이 프로젝트는 BSD에 따라 라이선스가 부여 된 것으로 보입니다.

4

포스트 스크립트, 프로그래밍 언어입니다 : 여기

내 PDF 파일 중 하나의 샘플입니다. 여기서해야 할 일은 페이지 크기를 요청하는 동작을 재정의하는 것입니다. 페이지 크기와 내용은 포스트 스크립트에서 분리되어, 그래서 당신은 두 가지 수행해야합니다)

1 세로

2)에 풍경에서 미디어 요청을 변경하여 페이지

간단한의 내용을 회전 이 작업을 수행하는 방법은 'setpagedevice'연산자를 다시 정의하는 것입니다. 다음은 예이다 : 페이지 크기가 변경되는 경우, 그것은 새 크기를 취득하고, 표시 보이면

/oldsetpagedevice /setpagedevice load def %% copy original definition 

/setpagedevice { 
    dup /PageSize known {     %% Do we have a page size redefinition ? 
    dup /PageSize get      %% get the array if so 
    aload pop        %% get elements remove array copy 
    gt {         %% is width > height ? 
     dup /PageSize get aload    %% get size array, put content on stack 
     3 1 roll       %% roll stack to put array at back 
     exch        %% swap width and height 
     3 -1 roll       %% bring array back to front of stack 
     astore        %% put swapped elements into array 
     /PageSize exch      %% put key on stack and swap with value 
     2 index        %% copy the original dict 
     3 1 roll       %% move dict to back of stack 
     put         %% put new page size array in dict 
     90 rotate       %% rotate content 90 degrees anti-clockwise 
    } if 
    } if 
    oldsetpagedevice      %% call the original definition 
} bind def 

이 확인 구성 변경은, 볼 경우 폭> 높이 (프리의 간단한 정의). 이것이 사실이라면 폭과 높이를 바꾸어 요청을 변경 한 다음 페이지 내용을 90도 회전합니다.

당신은 당신의 자신의 작업을하기 전에 해당 파일을 실행 한 후 (예를 들어 prolog.ps) 파일에 위의 내용을 퍼팅에 의해 고스트 스크립트로 이것을 사용할 수 있습니다

GS을 ...... 작업을하면 prolog.ps. ps

필자는이 도구를 사용하지 않았으므로이 도구를 시도했지만 가로 파일은 사용하지 않았습니다. 또한 이것을 막을 수있는 포스트 스크립트 프로그램을 만들 수도 있습니다.

+0

이 스크립트를 시도했지만 오류가 발생하지 않았지만 페이지를 회전시키지 않았습니다. 다음은 입력 PDF 파일의 샘플입니다. [https://docs.google.com/open?id=0B2LzHaZ9pUynWXc2X0J3M0RvN28](https://docs.google.com/open?id=0B2LzHaZ9pUynWXc2X0J3M0RvN28) – Zig158