2013-07-24 2 views
1

Мне нужно нарисовать логотип в существующие pdf-файлы в верхнем левом углу. В настоящее время я жестко закодировал позицию y в постскриптуме. Мне нужно изменить позицию y в соответствии с текущим размером страницы используемого pdf-файла. Как и логотип, мне также нужно рисовать прямоугольник. там также я жестко закодировал параметры.Постскриптум: рисовать логотип в верхнем левом углу в любом размере страницы

My Script ---

<< 
    /PageSize [595 842] 
    /EndPage { 
     exch pop 2 lt { 
      gsave 
       20 720 translate  
       40 40 scale   
       77     
       81     
       8      
       [77 0 0 -81 0 81]  
       (Logo.jpg) (r) file /DCTDecode filter 
       false     
       3     
       colorimage 
      grestore 
      gsave   
       newpath 10 10 60 820 rectstroke 
       /_WM_str (Office of XXXX,XXXX) def 
       /Helvetica [40 0 0 40 0 0] selectfont 
       /DeviceRGB setcolorspace 
       0.96 0.96 0.96 setcolor 
       currentpagedevice/PageSize get aload pop 
       2 div exch 12 div exch translate 90 rotate 
       newpath 
       _WM_str stringwidth pop 2 div neg 0 moveto 
       _WM_str show     
      grestore 
      true 
     } { false } ifelse 
    }bind 
>>setpagedevice 

Используя следующую команду, я создал файл вывода.

гс -q -sDEVICE = pdfwrite -dBATCH -dNOSAFER -dNOPAUSE -sOutputFile = output.pdf -dPDFFitPage -dAutoRotatePages =/None -f test.ps 1001.pdf

Я не нужно знать, как размещать логотип в верхнем левом углу и рисовать прямоугольник снизу вверх вокруг логотипа, как тиснение?

Пример:

image

ответ

2

Вы можете извлечь текущий размер носителя из словаря страница устройства:

currentpagedevice/PageSize получить

, который дает вам ширину и высоту СМИ , и вы можете рассчитать, где находится верхний левый угол.

Макет части, которую вы добавляете, зависит от вас, но вы должны иметь возможность использовать ширину и высоту, чтобы рассчитать соответствующий масштабный коэффициент, а также выяснить, куда будут идти остальные части вашей графики.

%! 
<< 
    /PageSize [595 842] 
    /EndPage { 
     exch pop 2 lt { 
      currentpagedevice /PageSize get %% stack has array [width height] 
      0 0 moveto      %% start at bottom left 
      dup 1 get      %% copy array, get height 
      0 exch lineto     %% line to top left 
      dup 0 get      %% copy array get width 
      10 div cvi 0 rlineto    %% horizontal line from top left, 1/10th of width 
      1 get       %% get height from array 
      neg 0 exch rlineto    %% vertical line to bottom of page 
      closepath      %% close path to origin 
      0.5 setgray stroke 
      true 
     } { false } ifelse 
    }bind 
>>setpagedevice 
+0

Спасибо за ваш ответ sir. Я пробовал, как вы сказали, но у меня есть исключение, когда вы запускаете скрипт через gs. Не могли бы вы написать небольшой пример, как написать некоторый контент из левого верхнего угла на разных страницах? –

+0

Это не работает, потому что я написал штамп на наборе существующих PDF разных размеров. Из-за того, что это тиснение сделано в существующем файле разного размера, я не могу писать в общий размер. Мне нужно записать в формат A4, а затем существующий файл должен быть визуализирован поверх существующего файла, так как могут быть отсканированы и несколько файлов. –

+0

В примере кода используется текущий размер носителя, что бы это ни было, поэтому я не понимаю, в чем проблема. В любом случае, вам решать, какую работу вы хотите получить, не в последнюю очередь потому, что в какой-то момент вы точно не указали свою цель. – KenS

Смежные вопросы