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

时间:2015-08-20 22:54:42

标签: java pdf coordinates pdfbox

我使用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,宽度,高度)。两者之间没有明显的相关性,我似乎无法在Google上找到有关此信息。

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

1 个答案:

答案 0 :(得分:3)

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结构。使用此优势并使用例如PDRectangle您使用PDAnnotation来自getRectangle(),而不是访问您从字段词典中提取的COSArray