当前位置: 首页 > 知识库问答 >
问题:

将PDFBox坐标转换为PDPage::ConvertToImage的像素坐标

相俊迈
2023-03-14

我正在使用PDFBox的PDPage::ConvertToImage在Java中显示PDF页面。我正试图基于页面中的cosobjects(即AcroForm字段)在PDF页面的图像上创建可点击的区域。问题是PDF似乎使用了一个完全不同的坐标系:

System.out.println(field.getDictionary().getItem(COSName.RECT));

收益率

COSArray{[COSFloat{149.04}, COSFloat{678.24}, COSInt{252}, COSFloat{697.68}]}

如果我要估计图像上字段矩形的实际尺寸,它将是40,40,50,10(x,y,宽度,高度)。这两者之间没有明显的相关性,我似乎找不到任何关于这一点的信息与谷歌。

如何确定PDPage的cosobects的像素位置?

共有1个答案

麹权
2023-03-14

pdf坐标系与图像中使用的坐标系没有太大区别。唯一的区别是:

  • y轴指向上,而不是下
  • 刻度很可能不同。

您可以使用以下公式将pdf坐标转换为图像坐标:

x_image = x_pdf * width_image / width_page
y_image = (height_pdf - y_pdf) * height_image / height_pdf
PDRectangle pageBounds = page.getMediaBox();

您可能错过了pdf中的数组和图像坐标估计值之间的相关性,因为pdf中的矩形表示为数组[x_left,y_bottom,x_right,y_top]

幸运的是,PDFBox提供了在比cos结构更高的级别上操作的类。利用这个优势,例如使用getRectangle()pdanNotation获得的pdRectangle,而不是访问从字段字典中提取的cosArray

 类似资料:
  • 问题内容: 我正在尝试将经纬度对转换为像素坐标。我发现了这种墨卡托投影,但我不理解代码。x_adj,y_adj变量是什么因素?当我在没有这些常量的情况下运行代码时,我的经/纬对就不在地图上,并且x和y像素坐标也不是我想要的。 问题答案: 这些变量从何而来 选择这些变量以使计算出的坐标与地图的背景图像匹配。如果知道地图的投影参数,则可以计算它们。但是我相信,它们很可能是通过反复试验而获得的。 如何计

  • 我正在尝试将lat/lon对转换为像素坐标。我找到了这个墨卡托投影,但我不懂代码。因子x_adj,y_adj变量是多少?当我运行没有这些常数的代码时,我的lat/lon对不在我的地图上,x和y像素坐标也不是我想要的。 来源:http://webdesignerwall.com/tutorials/interactive-world-javascript-map/comment-page-1?rep

  • 我正在尝试将球坐标转换为笛卡尔坐标,以绘制一个简单的三维金字塔。 下面是获取金字塔四个主要角的代码,具体取决于极角yrad和方位角xrad以及顶点坐标x和y: 方位角轴似乎工作正常,但问题是,在操纵极轴角时,当它们越过天顶或底部时,左右会互换,如图所示(选择顶部的mp4以更平滑地播放):http://gyazo.com/4a245713c232893960863cf4ea4186f6 怎么了?

  • 我试图将图像从极坐标转换为笛卡尔坐标,但在应用公式后,我得到了浮点坐标(r和teta),我不知道如何使用x和y的浮点来表示空间中的点。可能有一种方法可以将它们转换为整数,并仍然保留分布,但我不知道如何。我知道OpenCV中有像warpPolar这样的函数,但我想自己实现它。任何想法都会有帮助:) 这是我的代码:

  • 我是PDFBox(和PDF生成)的新手,很难生成自己的PDF。 我确实有以英寸/厘米为单位的某些坐标的文本,我需要将它们转换为PDFBox使用的单位。任何建议/实用程序都可以自动执行此操作吗? PDPageContentStream。moveTextPositionByAmount(x,y)对我来说毫无意义。

  • 我有一张以色列地图。 我需要创建一个获得两个双参数(经度和纬度)的函数,该函数应该在地图图像中的那个区域上画一个小圆圈。 我有以下关于地图的信息: null 截图: https://gyazo.com/5a19dece37ebace496c6b8d68eb9ec3c