当使用绝对定位(我猜是在PdfContentByte
中?)将对象放置到pdf页面上时,它位于从左下角开始的坐标系中。
我想用从左上角开始的方式来翻转坐标。在向页面添加任何内容之前,我会做翻转操作。
我试过用这个
cb.concatCTM(1f, 0f, 0f, -1f, 0f, PageSize.A4.getHeight());
但是后来添加的对象被翻转了(我不想发生的事情)。
发布于 2013-08-07 07:14:36
在需要将坐标系的原点位于左上角的情况下,使用简单的数学来更改坐标是自定义的。为此目的使用不同的CTM是更复杂的,并可能导致各种副作用,因为你已经经历过自己。例如:旋转CTM也会旋转内容(文本可以颠倒,镜像,.)。
为什么不简单地使用重新计算坐标的方法。例如:希望从页面顶部计数坐标(10,10),然后使用transform(pagesize,y),其中转换方法定义如下:
public float transform(Rectangle pagesize, float y) {
return pagesize.top() - y;
}
这样你就可以做如下的事情:
float x = 50;
float y = transform(pagesize, 50);
table.writeSelectedRows(0, 10, x, y, canvas);
就我个人而言,我认为不尊重ISO-32000-1中定义的坐标系统是个坏主意,因为你更喜欢使用一个奇怪的坐标系,在这个坐标系中增加Y值而不是向上(这是非常违反直觉的),但是如果你坚持这样做,你就不应该篡改CTM,除非你的PDF fu真的很大。
发布于 2013-08-07 07:19:40
应用于PDF坐标系的任何转换不仅改变了提供页面上某个点的坐标的方式,而且还改变了PDF查看器提取对象的坐标系。例如。
(http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/PDF32000_2008.pdf中的公共转换8.3.3节)
如果以某种方式翻转坐标,系统从左上角开始,因此,您也可以翻转所绘制的对象。在文本对象的情况下,您可以通过文本矩阵在原地翻转,在本地撤消翻转。
不过,这意味着很麻烦。如果把原点放在左上角,页面上有负的y坐标就足够了,我建议你只翻译坐标系。
发布于 2015-03-31 07:27:05
首先:原谅我的英语。我是西班牙人xD
这是我的解决方案:
我在找同样的东西。我想在左上角有个起点。
嗯,你不能改变它,但你可以做另一件事。
如果您想要每一页的高度,您必须从PdfReader类中获取该页的裁剪框。
因此,例如,如果您想在左上角得到"y = 60“的垂直位置,就必须这样做:
PdfReader reader = new PdfReader("yourFile.pdf");
Float y = reader.getCropBox(pageNumber).getHeight()-60;
在有不同页面高度的pdf文档的情况下,这是非常有用的。
https://stackoverflow.com/questions/18090025
复制相似问题