超链接边界框的 Itext PDF 收缩问题未收缩

Itext PDF Shrink issue with hyperlink bounding box is not getting Shrinked

我正在使用 PDF 缩小然后加水印,同样我正在使用 itextpdf-5.5。1.jar。这是我用来缩小 PDF 的代码。在代码中 xPercentage 和 xPercentage 值是 0.9f。当我缩小包含内容 table 的 PDF 时,页面上的内容正在正确缩小。当我转到内容的 table 时,超链接的边界框放错了位置。我注意到原始和收缩输出文档的边界框大小相同。如何根据内容缩小超链接的边界框?

public  void shrinkPDF(String strFilePath , String strFileName) throws Exception{
PdfReader reader = new PdfReader(strFilePath+"//"+strFileName);
PdfStamper stamper = new PdfStamper(reader, new 
FileOutputStream(strFilePath+"//Shrink_"+strFileName));
int n = reader.getNumberOfPages();
Map mpPDFLayer = stamper.getPdfLayers();
    for (int p = 1; p <= n; p++) {
        float offsetX = (reader.getPageSize(p).getWidth() * (1 - xPercentage)) / 2;
        float offsetY = (reader.getPageSize(p).getHeight() * (1 - yPercentage)) / 2;
        stamper.getUnderContent(p).setLiteral(
                    String.format("\nq %s 0 0 %s %s %s cm\nq\n",
                    xPercentage, yPercentage, offsetX, offsetY));

        stamper.getOverContent(p).setLiteral("\nQ\nQ\n");
    }   
stamper.close();
reader.close();
}

您的代码仅收缩内容,但不会相应地移动和收缩注释。所以你还需要做的是遍历每个页面的注释并缩小它们。

这尤其意味着您必须缩小并移动 Rect 注释矩形。但是,根据相应注释的性质,它们中还有其他坐标值,例如QuadPoints 在 link 的情况下或直线的 L 端点坐标。


顺便说一句,您的内容收缩代码对用户 space 坐标系的原点进行了假设;它似乎假设原点位于裁剪框的左下角,并且裁剪框和媒体框重合。