首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在iText中翻转坐标系?

如何在iText中翻转坐标系?
EN

Stack Overflow用户
提问于 2013-08-06 20:39:33
回答 4查看 3.4K关注 0票数 1

当使用绝对定位(我猜是在PdfContentByte中?)将对象放置到pdf页面上时,它位于从左下角开始的坐标系中。

我想用从左上角开始的方式来翻转坐标。在向页面添加任何内容之前,我会做翻转操作。

我试过用这个

cb.concatCTM(1f, 0f, 0f, -1f, 0f, PageSize.A4.getHeight());

但是后来添加的对象被翻转了(我不想发生的事情)。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-08-07 07:14:36

在需要将坐标系的原点位于左上角的情况下,使用简单的数学来更改坐标是自定义的。为此目的使用不同的CTM是更复杂的,并可能导致各种副作用,因为你已经经历过自己。例如:旋转CTM也会旋转内容(文本可以颠倒,镜像,.)。

为什么不简单地使用重新计算坐标的方法。例如:希望从页面顶部计数坐标(10,10),然后使用transform(pagesize,y),其中转换方法定义如下:

代码语言:javascript
运行
复制
public float transform(Rectangle pagesize, float y) {
    return pagesize.top() - y;
}

这样你就可以做如下的事情:

代码语言:javascript
运行
复制
float x = 50;
float y = transform(pagesize, 50);
table.writeSelectedRows(0, 10, x, y, canvas);

就我个人而言,我认为不尊重ISO-32000-1中定义的坐标系统是个坏主意,因为你更喜欢使用一个奇怪的坐标系,在这个坐标系中增加Y值而不是向上(这是非常违反直觉的),但是如果你坚持这样做,你就不应该篡改CTM,除非你的PDF fu真的很大。

票数 2
EN

Stack Overflow用户

发布于 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坐标就足够了,我建议你只翻译坐标系。

票数 3
EN

Stack Overflow用户

发布于 2015-03-31 07:27:05

首先:原谅我的英语。我是西班牙人xD

这是我的解决方案:

我在找同样的东西。我想在左上角有个起点。

嗯,你不能改变它,但你可以做另一件事。

如果您想要每一页的高度,您必须从PdfReader类中获取该页的裁剪框。

因此,例如,如果您想在左上角得到"y = 60“的垂直位置,就必须这样做:

代码语言:javascript
运行
复制
PdfReader reader = new PdfReader("yourFile.pdf");
Float y = reader.getCropBox(pageNumber).getHeight()-60;  

在有不同页面高度的pdf文档的情况下,这是非常有用的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18090025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档