2015-11-11 82 views
2

我想更改PDF坐标系,以便从左下角到左上角更改原点(0,0) - >。因此,例如,当我将文本写入x = 5 y = 10的位置时,它将被写入从左数起的10个点和从上数(而不是从下数)计数的10个点。更改PDF坐标系

我已阅读PDF specification,它谈及CropBox,旋转,坐标转换('cm'运算符)...但我无法做到这一点。

注意。在eps中,我使用翻译和缩放来做类似的事情:

% Rescaling and translate 
0 95<-(height of the page) translate 
1 -1 scale 

任何帮助将不胜感激!

+1

通常情况下,PDF是由应用程序创建的,然后反转y轴是在创建PDF之前执行计算的简单事情。这可能就是为什么它不在PDF参考中提到。所有的缩放和翻译都是用一个单一的矩阵来完成的,我想你最终也会把文本颠倒过来。 – usr2564301

回答

3

PDF不是一种编程语言,例如PostScript,但是与您在示例中使用的原理完全相同的原则也适用于此处。而不是通过不同的PostScript电话(“翻译”和“规模”),将设置一个转换矩阵

1 0 0 -1 0 95 cm 

这为X轴保持同样的效果,Y轴反转和坐标系的原点会发生偏移,与EPS示例中的情况完全相同。

您可以在页面的开头更改变换矩阵,也可以更改每个单独元素或元素组的变换矩阵。

请记住,“cm”操作符总是与现有的变换矩阵连接在一起,它不会设置为它。实际上有没有的方式到设置矩阵。

因此,而不是在几乎任何PDF文件,你会发现结构,如

q 
1 0 0 -1 0 95 cm 
... 
Q 

这会保存当前图形状态;改变矩阵,然后做你想要的任何操作,最后将矩阵替换为原始值。

另外,正如Jongware和mkl的评论所述;如果你像这样翻转坐标系,它可能会非常需要你翻转其他矩阵,如文本转换矩阵,以确保你绘制的物体正面朝上。

+2

请不要忘记,'1 0 0 -1 0 95'的变换矩阵可能需要一个'1 0 0 -1 0 0'文本矩阵。据说,'cm'需要6个独立的操作数,而不是数组操作数。 – mkl

+0

你是完全正确的,妥为纠正。 –

+0

谢谢,它解决了这个问题! –