簡體   English   中英

如何獲取pdf文件每一頁的尺寸

[英]How to get dimensions of each page of a pdf file

在pdf文件每頁的中心添加水印時,我遇到了問題。

到目前為止我嘗試過的是:

      PdfStamper inputPdfStamper = null;
                try {
                    PdfReader inputPdfReader = new PdfReader(new FileInputStream(input));
                    inputPdfStamper = new PdfStamper(inputPdfReader, new FileOutputStream(input));
                    Font font = new Font(fontFamily, fontSize, fontStyle, color);
                    for (int pageNumber = 1 ;pageNumber <=inputPdfStamper.getReader().getNumberOfPages() ; pageNumber++){
                        if(isWatermarkAbove){                           
                      ColumnText.showTextAligned(inputPdfStamper.getOverContent(pageNumber), Element.ALIGN_CENTER, new Phrase(watermark, font),  inputPdfReader.getPageSize(pageNumber).getRight()/2, inputPdfReader.getPageSize(pageNumber).getTop()/2, 45);
     // Updated Code 
    // ColumnText.showTextAligned(inputPdfStamper.getUnderContent(pageNumber), Element.ALIGN_CENTER, new Phrase(watermark, font), inputPdfReader.getCropBox(pageNumber).getLeft()/2, inputPdfReader.getCropBox(pageNumber).getBottom()/2, 45);
                        }else{
                            ColumnText.showTextAligned(inputPdfStamper.getUnderContent(pageNumber), Element.ALIGN_CENTER, new Phrase(watermark, font), inputPdfReader.getPageSize(pageNumber).getRight()/2, inputPdfReader.getPageSize(pageNumber).getTop()/2, 45);
                        }
                    }
                    inputPdfStamper.close();
                } catch (Exception e){
                    throw new RuntimeException(e);
                }finally {
                    if (inputPdfStamper!=null) {
                        try {
                            inputPdfStamper.close();
                        } catch (Exception e) {
                            throw new RuntimeException(e);
                        }
                    }
                }

問題:

上面的代碼適用於所有頁面都具有相同尺寸(高度和寬度)的pdf文件。 但是,當我提供不同尺寸的pdf頁面時,水印放置在不同的位置,而不是在中心。

我所知道的:

ColumnText.showTextAligned(inputPdfStamper.getUnderContent(pageNumber), Element.ALIGN_CENTER, new Phrase(watermark, font), inputPdfReader.getPageSize(pageNumber).getRight()/2, inputPdfReader.getPageSize(pageNumber).getTop()/2, 45)

在調試並評估了上面的代碼后,對於尺寸不同的pdf頁面,我得到的頁面大小值相同。

inputPdfReader.getPageSize(pageNumber).getRight()

為pdf的所有頁面提供相同的頁面大小值。 並且inputPdfReader.getPageSize(pageNumber).getTop()為所有尺寸不同(寬度和寬度)的頁面提供相同的值

題 :

如何獲取不同尺寸的pdf文件每頁的頁面大小

這不是iText問題。 這是一個數學問題。

如果您有一個代表矩形左下角的坐標(x1,y1)和一個代表矩形右上角的坐標(x2,y2),則可以像這樣計算矩形中間的坐標這個:

((x1 + x2) / 2, (y1 + y2) / 2)

如果您不了解此公式,請考慮以下問題:

矩形的寬度為(x2-x1)。

寬度的一半等於(x2-x1)/ 2。

您需要獲得中間的坐標是x1 +(x2-x1)/ 2

或:x1-x2 / 2-x1 / 2

或x1 / 2 + x2 / 2

或(x1 + x2)/ 2

在代碼示例中,您嘗試過:

inputPdfReader.getCropBox(pageNumber).getLeft()/2
inputPdfReader.getPageSize(pageNumber).getRight()/2

這對應於:

x1 / 2
x2 / 2

這沒有任何意義! 這是您需要的:

Rectangle crop = inpitPdfReader.getCropBox(pageNumber);
float x = (crop.getLeft() + crop.getRight()) / 2;
float y = (crop.getBottom() + crop.getTop()) / 2;

您的問題不符合與iText相關的問題。 這是基礎數學

顯然:如果crop等於null ,則沒有裁剪框,​​您需要使用媒體框的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM