这是我为强调PDF中的文本而编写的代码 . 此方法采用PDDocument对象,页码,矩形点(x,y,w,h),颜色和透明度 .
public PDDocument highlightText(PDDocument document, Integer pageNo,Float[] rectPoints, Color color, Float transparency) throws Exception{
/* highlighttext() takes document, page no and rectangle points[x,y,width,height] */
try
{
PDPage page = document.getPage(pageNo);
PDExtendedGraphicsState extendedGraphicsState = new PDExtendedGraphicsState();
// Set the transparency/opacity
extendedGraphicsState.setNonStrokingAlphaConstant(transparency);
try(PDPageContentStream contents = new PDPageContentStream(document, page,AppendMode.APPEND,true)){
//use graphic state
contents.setGraphicsStateParameters(extendedGraphicsState);
contents.setNonStrokingColor(color);
//Rectangle points(x,y,w,h) - takes top left corner as (0,0) origin
contents.addRect(rectPoints[0], rectPoints[1], rectPoints[2], rectPoints[3]);
contents.fill();
}
} catch(Exception e) {
e.printStackTrace();
throw new Exception(e.getMessage());
}
return document;
}
Question: 这里的问题是矩形点(尤其是Y坐标)对于我使用Microsoft Word文档创建的PDF(使用导出),要绘制一个框,我给出了点[0,500,100,100],然后考虑到Origin绘制了矩形在 BOTTOM-LEFT 角落 . 好的,那很好,对!
对于我使用谷歌浏览器创建的PDF(使用ctrl p,另存为文件),要绘制一个方框,我给出了点[0,500,100,100],现在矩形是在与Y轴完全相反的方向绘制的(考虑到原点位于 TOP-LEFT 角) . 我现在完全糊涂了,addRect()如何获得积分 . 我如何解决这个问题,如果我提供任何类型的PDF,它需要任何一个位置作为Origin左下角或左上角?