gpt4 book ai didi

java - 使用 IText API 将页码添加到具有不同页面大小的合并 PDF

转载 作者:行者123 更新时间:2023-12-01 09:43:24 25 4
gpt4 key购买 nike

我正在尝试使用页面右上角的 Itext 将页码添加到合并的 PDF 文件中,但我的 pdf 内容大小不同,在尝试打印页面大小时合并 PDF 后,我得到的大小大致相同(每个页面上的高度和宽度),但由于内容大小差异,我看不到页码。请参阅下面用于合并 PDF 和添加页码的代码和 pdf 附件。

public class PageNumber {

public static void main(String[] args) {
PageNumber number = new PageNumber();
try {
String DOC_ONE_PATH = "C:/Users/Admin/Downloads/codedetailsforartwork/elebill.pdf";
String DOC_TWO_PATH = "C:/Users/Admin/Downloads/codedetailsforartwork/PP-P0109916.pdf";
String DOC_THREE_PATH = "C:/Users/Admin/Downloads/codedetailsforartwork/result.pdf";
String[] files = { DOC_ONE_PATH, DOC_TWO_PATH };
Document document = new Document();
PdfCopy copy = new PdfCopy(document, new FileOutputStream(DOC_THREE_PATH));
document.open();
PdfReader reader;
int n;
for (int i = 0; i < files.length; i++) {
reader = new PdfReader(files[i]);
n = reader.getNumberOfPages();
for (int page = 0; page < n; ) {
copy.addPage(copy.getImportedPage(reader, ++page));
}
copy.freeReader(reader);
reader.close();
}
// step 5
document.close();
number.manipulatePdf(
"C:/Users/Admin/Downloads/codedetailsforartwork/result.pdf",
"C:/Users/Admin/Downloads/codedetailsforartwork/PP-P0109916_1.pdf");
} catch (IOException | DocumentException | APIException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static void manipulatePdf(String src, String dest)
throws IOException, DocumentException, APIException {
PdfReader reader = new PdfReader(src);
int n = reader.getNumberOfPages();
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
PdfContentByte pagecontent;
for (int i = 0; i < n;) {
pagecontent = stamper.getOverContent(++i);
System.out.println(i);
com.itextpdf.text.Rectangle pageSize = reader.getPageSize(i);
pageSize.normalize();
float height = pageSize.getHeight();
float width = pageSize.getWidth();
System.out.println(width + " " + height);
ColumnText.showTextAligned(pagecontent, Element.ALIGN_CENTER,
new Phrase(String.format("page %d of %d", i, n)),
width - 200, height-85, 0);
}
stamper.close();
reader.close();
}
}

PDF files Zip

最佳答案

@Bruno 的答案解释和/或引用答案,并解释了当前问题的所有相关事实。

简而言之,OP代码的两个问题是:

  • 他使用reader.getPageSize(i);虽然这确实返回页面大小,但 PDF 查看器不会显示整个页面大小,而仅显示其上的裁剪框。因此,OP应该使用reader.getCropBox(i)来代替。根据 PDF 规范,“裁剪框定义了显示或打印时页面内容应被裁剪(裁剪)的区域。...默认值是页面的媒体框。”
  • 他使用 pageSize.getWidth()pageSize.getHeight() 来确定右上角,但应该使用 pageSize.getRight() > 和 pageSize.getTop() 代替。定义 PDF 坐标系的框的原点可能不在其左下角。

关于java - 使用 IText API 将页码添加到具有不同页面大小的合并 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38275029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com