Неверный доступ при попытке переопределить переменную - PullRequest
1 голос
/ 24 апреля 2020

Я пытаюсь обновить переменную из BeginPage. Когда я пытаюсь переопределить его, я получаю:

invalidAccess

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

Здесь я пытаюсь сделать rotate каждую even страницу 180 градусов Я думал, что определение PageCounter будет сохранено в userdict, что даст мне доступ для чтения / записи, но я предполагаю, что это не так.

Любая помощь будет принята с благодарностью.

<<
    /PageCounter 1 def
    /BeginPage
    {
        PageCounter 2 mod 0 eq {100 100 translate 180 rotate} if
        /PageCounter PageCounter 1 add def
    }
>> setpagedevice

Ответы [ 2 ]

2 голосов
/ 25 апреля 2020

Это как можно ближе к тому моменту, когда все изменится и исчезнет с моим тестовым pdf. Я подозреваю, что они могут отличаться. Я засыпаю. Я вытаскиваю операнд из стека и использую вместо этого / PageCount. Помните, что на начальной странице количество меньше на 1. Я рад, что у вас есть другое решение.

%!
<<
/BeginPage { pop currentpagedevice /PageCount get 2 mod 1 eq{ 45 rotate 300 -300 translate}if }
>> setpagedevice

РЕДАКТИРОВАТЬ: Это работает с ghostscript. Я, наконец, победил функцию автоповорота, но также подумал, что / Tumble должен работать. У меня просто симплексный принтер, поэтому не используйте настройки дуплекса / переворачивания. Поэтому мне интересно, будет ли это работать для вашего типа дистиллятора или принтера:

%!
<<
/BeginPage {
pop currentpagedevice /PageCount get 2 mod 1 eq{
180 rotate -612 -792 translate
}if }
>> setpagedevice

<< /AutoRotatePages /None >> setpagedevice
2 голосов
/ 24 апреля 2020

Старое решение

Хорошо, после того, как вы еще больше заглянули в Красную / Синюю книгу, похоже, что я нашел решение (которое при тестировании работало должным образом).

<<
    userdict begin /PageCounter 1 def
    /BeginPage
    {
        PageCounter 2 mod 0 eq {100 100 translate 180 rotate} if
        userdict begin /PageCounter PageCounter 1 add def
    }
>> setpagedevice

Новое решение

Таким образом, указанное выше решение сработало, но заставило синтаксический анализатор postscript обработать sh при обработке нескольких заданий. Кроме того, я использовал явную переменную для отслеживания того, на какой странице я находился, но BeginPage вызывается с количеством страниц уже в стеке.

Число страниц использует zero based indexing, что означает первый страница будет 0, вторая будет 1 и так далее. Для этого я добавляю 1 к числу страниц.

<<
    % Make sure this is defined at the start of setpagedevice
    /BeginPage
    {
        1 add 2 mod 0 eq { 100 100 translate 180 rotate } if
    } bind
>> setpagedevice
...