试图理解 PDF 中的裁剪逻辑
Trying to understand clipping logic in PDF
我在 PDF 中的压缩流中有以下说明:
1 g
/GS1 gs
0 792 m
0 792 l
f
q
1 i
0 792 612 -792 re
0 792 m
W n
0 792.06 612 -792 re
W n
- 将颜色设置为灰色。
- 加载一些外部词典信息
- 在
0
792
中开始子路径
- 在
0
中追加点 792
- 填充路径....为什么要填充 1 个灰色像素?
- 保存图形堆栈
- 将平滑度设置为 1
- 开始一个
0
792
612
-792
矩形子路径
- 启动一个
0
792
子路径....为什么要覆盖以前的矩形路径?
- 使
0
792
子路径成为剪切路径并删除当前路径。
- 开始一个
0
792.06
612
-792
矩形。
- 用之前的裁剪路径裁剪之前的矩形
0
792
?
我遇到的问题是我没有找到裁剪如何工作的好例子。你剪哪条路?如果你之前没有剪辑路径,你剪辑什么?
谢谢!
首先,您的疑惑是对的,您展示的摘录中的很多内容毫无意义。
例如您的项目 3..5 涉及
0 792 m
0 792 l
f
PDF 规范对填充路径的说明如下:
If a subpath is degenerate (consists entirely of one or more points at the same coordinates), the subpath shall be considered to enclose the single device pixel lying under that point; the result is device-dependent and not generally useful.
(ISO 32000-2,第 8.5.3.3 节 — 填充)
你对
的解读
0 792 612 -792 re
0 792 m
W n
不过,您的项目 8..10 不正确。特别是你假设最后一行到
Make the 0 792 subpath the clipping path and remove the current path.
实际上 0 792 m
子路径被忽略,只有 0 792 612 -792 re
矩形与当前剪辑路径相交!
根据规范,剪辑路径相交的工作方式类似于填充
Subclause 8.5.3.3, "Filling" defines what is inside a path as well as stating rules for closing paths and for degenerate paths. For a given path definition, the same area that would be filled by the f operator is the area that would be used for a clip.
(ISO 32000-2,第 8.5.4 节 — 剪切路径运算符)
填充会掉落悬空 0 792 m
。
Any subpaths that are open shall be implicitly closed before being filled, except that if the last subpath in the path is a single-point open subpath (specified by a trailing m operator), it shall be disregarded and not considered to be part of the path.
(ISO 32000-2,第 8.5.3.3 节 — 填充)
因此您对
的解释
0 792.06 612 -792 re
W n
在您的项目 11 和 12 中
Clip the previous rectangle with the previous clipping path 0 792?
略有偏差:实际上这个矩形剪辑了之前的剪辑路径,最后被另一个几乎相同的矩形剪辑了。但这几乎没有比您最初的假设更有意义。
关于你的明确问题
Which path do you clip against? What do you clip against if you didn't have a clipping path before?
这里的规范说:
The initial clipping path shall include the entire page.
(ISO 32000-2,第 8.5.4 节 — 剪切路径运算符)
我在 PDF 中的压缩流中有以下说明:
1 g
/GS1 gs
0 792 m
0 792 l
f
q
1 i
0 792 612 -792 re
0 792 m
W n
0 792.06 612 -792 re
W n
- 将颜色设置为灰色。
- 加载一些外部词典信息
- 在
0
792
中开始子路径
- 在
0
中追加点792
- 填充路径....为什么要填充 1 个灰色像素?
- 保存图形堆栈
- 将平滑度设置为 1
- 开始一个
0
792
612
-792
矩形子路径 - 启动一个
0
792
子路径....为什么要覆盖以前的矩形路径? - 使
0
792
子路径成为剪切路径并删除当前路径。 - 开始一个
0
792.06
612
-792
矩形。 - 用之前的裁剪路径裁剪之前的矩形
0
792
?
我遇到的问题是我没有找到裁剪如何工作的好例子。你剪哪条路?如果你之前没有剪辑路径,你剪辑什么?
谢谢!
首先,您的疑惑是对的,您展示的摘录中的很多内容毫无意义。
例如您的项目 3..5 涉及
0 792 m
0 792 l
f
PDF 规范对填充路径的说明如下:
If a subpath is degenerate (consists entirely of one or more points at the same coordinates), the subpath shall be considered to enclose the single device pixel lying under that point; the result is device-dependent and not generally useful.
(ISO 32000-2,第 8.5.3.3 节 — 填充)
你对
的解读0 792 612 -792 re
0 792 m
W n
不过,您的项目 8..10 不正确。特别是你假设最后一行到
Make the 0 792 subpath the clipping path and remove the current path.
实际上 0 792 m
子路径被忽略,只有 0 792 612 -792 re
矩形与当前剪辑路径相交!
根据规范,剪辑路径相交的工作方式类似于填充
Subclause 8.5.3.3, "Filling" defines what is inside a path as well as stating rules for closing paths and for degenerate paths. For a given path definition, the same area that would be filled by the f operator is the area that would be used for a clip.
(ISO 32000-2,第 8.5.4 节 — 剪切路径运算符)
填充会掉落悬空 0 792 m
。
Any subpaths that are open shall be implicitly closed before being filled, except that if the last subpath in the path is a single-point open subpath (specified by a trailing m operator), it shall be disregarded and not considered to be part of the path.
(ISO 32000-2,第 8.5.3.3 节 — 填充)
因此您对
的解释0 792.06 612 -792 re
W n
在您的项目 11 和 12 中
Clip the previous rectangle with the previous clipping path 0 792?
略有偏差:实际上这个矩形剪辑了之前的剪辑路径,最后被另一个几乎相同的矩形剪辑了。但这几乎没有比您最初的假设更有意义。
关于你的明确问题
Which path do you clip against? What do you clip against if you didn't have a clipping path before?
这里的规范说:
The initial clipping path shall include the entire page.
(ISO 32000-2,第 8.5.4 节 — 剪切路径运算符)