gpt4 book ai didi

java - 调整文档大小后,新内容具有相同的大小。如何在 ByteArrayOutputStream 中保存新的大小?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:30:39 24 4
gpt4 key购买 nike

我对文件大小有疑问。我传递垂直方向 (595.0x842.0) pdf 并将方向 pdf 更改为水平方向 (842.0x595.0) 但是当我将 ByteArrayOutputStream 作为 ByteArray 返回并尝试阅读此 ByteArray 我得到垂直方向 (595.0 x842.0) 而不是水平 (842.0x595.0)

为了编写新内容,我使用 PdfWriter 并发送具有新大小的 DocumentByteArrayOutputStream 作为第二个参数。

PdfReader reader = new PdfReader(pdf.getFile());
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
Document document = new Document(PageSize.A4.rotate(), 0, 0, 0, 0);
PdfWriter writer = PdfWriter.getInstance(document, outputStream);

我希望输出水平(842.0x595.0)而不是(595.0x842.0)

我需要这段代码中的这个维度:

PdfReader reader = new PdfReader(pdf.getFile());
int n = reader.getNumberOfPages();
PdfStamper stamper = new PdfStamper(reader,outputStream);
PdfContentByte pageContent;
for (int i = 0; i < n;) {
pageContent = stamper.getOverContent(++i);
System.out.println(reader.getPageSize(i));
ColumnText.showTextAligned(pageContent, Element.ALIGN_RIGHT,
new Phrase(String.format("page %s of %s", i, n)),
reader.getPageSize(i).getWidth()- 20, 20, 0);
}

此变量 pdf.getFile() 是来自先前代码的 ByteArray(ByteArrayOutputStream )。我希望页码在右下角(x 点 842),但实际是 595。为了更好地理解,我发送了屏幕截图。

enter image description here

最佳答案

您使用 PdfReader 方法 getPageSize 但您应该使用 getPageSizeWithRotation,即您应该替换

System.out.println(reader.getPageSize(i));
ColumnText.showTextAligned(pageContent, Element.ALIGN_RIGHT,
new Phrase(String.format("page %s of %s", i, n)),
reader.getPageSize(i).getWidth()- 20, 20, 0);

通过

System.out.println(reader.getPageSizeWithRotation(i));
ColumnText.showTextAligned(pageContent, Element.ALIGN_RIGHT,
new Phrase(String.format("page %s of %s", i, n)),
reader.getPageSizeWithRotation(i).getWidth()- 20, 20, 0);

背景

页面有两个属性负责最终显示的页面尺寸:MediaBoxRotate。 (让我们暂时忽略裁剪框和所有其他也存在的框。)

因此,可以通过两种概念上不同的方式创建横向 A4 页面,作为 0°(或 180°)旋转的 842x595 媒体框或作为 90°(或 270°)旋转的 595x842 媒体框。

如果您使用 PageSize.A4.rotate() 实例化一个 Document,iText 使用后一种方式。 (如果您使用 new RectangleReadOnly(842,595) 实例化它,iText 会使用前一种方式。)

PdfReader.getPageSize 仅检查媒体框。因此,它为具有 595x842 媒体框和 90° 旋转的 PDF 页面返回一个宽度为 595 的矩形。

PdfReader.getPageSizeWithRotation 还检查​​页面旋转。因此,它会为具有 595x842 媒体框和 90° 旋转的 PDF 页面返回一个宽度为 842 的矩形。

关于java - 调整文档大小后,新内容具有相同的大小。如何在 ByteArrayOutputStream 中保存新的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56965809/

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