PDF и PostScript - разные вещи, и мне не ясно, что вы используете в качестве входных данных.Если его PDF, то вы в принципе не можете изменить ширину линий.Если вы используете PostScript, то в определенных пределах вы можете.
Первое, на что следует обратить внимание, - это то, что программы PostScript вполне могут (и не совсем редко) намеренно отрицают тот тип переопределения операторов, который вы выполняетеизменить цвет.Программа может явно загружать операторы непосредственно из systemdict, что будет обходить ваше переопределение операторов.Ваши определения будут сохранены в userdict (потому что вы не указали никакой другой словарь).Вы не можете переопределить определения в systemdict, потому что это только для чтения.Вы можете использовать -dWRITESYSTEMDICT, но я настоятельно рекомендую вам этого не делать, потому что это огромная дыра в безопасности.
Причина, по которой ваше переопределение setlinewidth не работает, почти наверняка связана с тем, что PostScriptПрограмма будет выполнять что-то вроде 0 setlinewidth
.Это определяется в PostScript как рисование самой узкой из возможных линий на устройстве, обычно шириной в один пиксель.
Рассматривая два ваших примера;
Умножение 0 на 10 приводит к ... нулю!Что не меняет ширину линии.Обратите внимание, что вы также выполнили сохранение, но не восстановление, что расточительно.Вам не нужно сохранять.
Во втором примере вы оставили исходный параметр в стеке, поэтому потенциально испортили выполнение программы, и вы фактически не изменили графическое состояние, потому что вы 'Т называется система setlinewidth.Что также оставляет 10 в стеке.
Что-то вроде:
%% Grab a copy of the current setlinewidth
%%
/system_setlinewidth /setlinewidth load def
%% Define a version of setlinewidth which expands hairlines
%%
/setlinewidth {
dup %% copy the linewidth parameter
0 eq %% Test if its zero, defined as a hairline (consumes the copy)
{
pop 10 %% discard the linewidth and replace it with 10
}
system_setlinewidth %% Still need to actually execute the setlinewidth
} bind def
Возможно, будет работать.Обратите внимание, что я не проверял это.Что касается файлов, если вы не можете вставить их сюда, поместите их где-нибудь в открытый доступ (например, DropBox) и укажите URL в вопросе.Для дальнейшего использования.
Вопрос полностью актуален как для Ghostscript, так и для PostScript, поскольку он затрагивает вопрос программирования на PostScript.Это не по теме для 'monchrome', 'cmd', 'batch-file' и (возможно) PDF.
Нет способа применить этот трюк к файлу PDF с помощью Ghostscript, и то же самоепотенциальная проблема применима;Линии нулевой ширины определяются как волоски и всегда имеют ширину в один пиксель, независимо от разрешения устройства.Если вы можете, вы должны порекомендовать людям, создающим эти файлы, что они этого не делают, если у них нет очень веских причин!