这是我为强调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左下角或左上角?