【发布时间】:2016-06-24 03:54:16
【问题描述】:
我对 PDF 中的当前转换矩阵 (CTM) 有一些困惑。对于this PDF 中的第 5 页,我检查了令牌流 (http://pastebin.com/k6g4BGih),它显示了在curve (c) 命令将转换矩阵设置为COSInt{10},COSInt{0},COSInt{0},COSInt{10},COSInt{0},COSInt{0} 之前的最后一个cm 操作。完整输出在http://pastebin.com/9XaPQQm9。
接下来,我使用以下代码集从同一页面中提取直线和曲线命令,遵循 related SO question 中提供的代码 @mkl
- 主类:http://pastebin.com/htiULanR
-
助手类:
一个。扩展
PDFGraphicsStreamEngine的类:http://pastebin.com/zL2p75hab.
Path:http://pastebin.com/d3vXCgnCc。
Subpath:http://pastebin.com/CxunHPiZd。
Segment:http://pastebin.com/XP1Dby6Ue。
Rectangle:http://pastebin.com/fNtHNtwsf。
Line:http://pastebin.com/042cgZBpg.
Curve:http://pastebin.com/wXbXZdqE
在该代码中,我在 curveTo() 方法中使用 getGraphicsState().getCurrentTransformationMatrix() 打印了 CTM,该方法被 PDFGraphicsStreamEngine 类覆盖。这将 CTM 显示为 [0.1,0.0,0.0,0.1,0.0,0.0]。所以我的问题是:
这两个CTM不应该一样吗?
这两个 CTM 都具有缩放操作:第一个缩放系数为 10,第二个缩放系数为 0.1。如果我忽略缩放,我可以创建看起来非常接近原始 PDF 的an SVG。但我很困惑为什么会发生这种情况。我是否需要考虑
all transformation matrices before the path而不是最后一个?
【问题讨论】:
-
是的,除非被“Q”重置,否则它们会相互连接。顺便说一句,您知道 PDFDebugger 工具吗?
-
不,没听说过。你能指出来吗?
-
只需从下载页面下载 debugger-app。它将以颜色和缩进向您显示内容流,这可能会简化理解。缩放 10 然后 0.1 显然缩放到 1。
-
@TilmanHausherr 感谢您指出这一点。这是一个真正的节省时间。