我有许多后记(.eps)格式的图形(图表),我希望用这些图形加厚。
我找到了以下代码,但输出文件没有什么不同。我想知道我做错了什么。
代码:
<div class="tab_area"><a href="#" class="tab">Tab 1</a></div>
现在从命令行执行此操作,我使用命令(filename是ps_thicken,并具有适当的权限):
# get list of all arguments
set args = ($*)
# if not enough arguments, complain.
if ($#args < 2) then
echo "Usage: ps_thicken ps_file factor"
echo "Thickens all lines in a PostScript file by changing the linewidth macro."
echo "Result goes to standard output."
exit 1
endif
sed -e "s/^\/lw {\(.*\) div setlinewidth/\/lw {$2 mul \1 div setlinewidth/" $1
我认为应该使所有东西都厚10倍,但它不会改变任何东西。
任何帮助都会非常感激,我对shell脚本很新!
答案 0 :(得分:2)
PostScript是一种编程语言,因此无法以这种自动方式进行更改。至少没有编写PostScript程序就可以了!
请注意,线宽不是“宏”(PostScript没有宏)其运算符。您为sed发布的代码(如果我记得sed足够好)是寻找/ lw的定义并将其替换为修改后的版本。问题是/ lw是特定PostScript程序中的函数声明。大多数PostScript程序都没有(或使用)一个名为'lw'的函数。
将PostScript程序代码添加到以下内容会更好:
/oldsetlinewidth /linewidth load def
/setlinewidth {2 div oldsetlinewidth} bind def
这将定义(在当前字典中)一个名为'setlinewidth'的函数。现在,如果以下程序在创建自己的函数时只使用setlinewdith的当前定义,它将使用上面重新定义的函数。在这种情况下,这会产生将所有线宽除以2的效果。显然要增加宽度,你会使用2 mul而不是2 div。
请注意,这绝不是万无一失的,它完全可以让PostScript程序从systemdict显式加载setlinewidth的定义,并且不能替换它(至少不容易),因为systemdict是只读的。
然而,EPS程序不大可能会引发这样的伎俩,所以这应该对你有用。
[基于评论]
嗯,你的意思是'未能导入'到应用程序或其他东西?
如果您将EPS加载到应用程序中,那么只需将该代码放在其前面就会破坏它。 EPS(与PostScript不同)需要遵循一些规则,因此要成功修改它,您必须遵循它们。这包括跳过任何EPS预览。
这不是一项微不足道的练习。您最好的选择可能是通过Ghostscript运行文件,您可以通过利用PostScript解释器来完成工作。
从文件中的2行PostScript开始,然后使用eps2write设备运行要通过Ghostscript“修改”的EPS文件。这将产生一个新的EPS,其中的变化是'烘焙'。
例如(假设线宽修改代码在'lw.ps'中):
gs -sDEVICE=eps2write -o out.eps lw.ps file.eps
但请注意,由此产生的EPS是一个完全重写的程序,与原始程序无关。特别是任何预览缩略图都将丢失。