[英]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.