gpt4 book ai didi

itext - PdfWriter 和事件

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

我想创建一个 PdfWriter 对象并为页眉和页脚设置事件。问题是如果我创建一个新的 PDF,它会起作用。但我的问题是我已经在输出流中有一个 PDF。请在下面找到我的示例代码。

Document document = new Document();
try {
// step 2:
FileInputStream is = new FileInputStream("D://2.pdf");
int nRead;
byte[] data = new byte[16384];
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
while ((nRead = is.read(data, 0, data.length)) != -1) {
buffer.write(data, 0, nRead);
}

buffer.flush();
PdfWriter writer = PdfWriter.getInstance(document,buffer);
writer.setViewerPreferences(PdfWriter.PageLayoutTwoColumnLeft);
writer.setPageEvent(new DossierPortalUtil());

document.setMargins(36, 36, 54, 72);
// step 3:
document.open();

document.add( new Chunk("testing"));

} catch (Exception de) {
de.printStackTrace();
}
finally{
document.close();
}

如果我注释行

document.add( new Chunk("testing"));

我得到一个异常

Exception in thread "main" ExceptionConverter: java.io.IOException: The document has no pages.

没有注释没有异常(exception),但它不添加页眉和页脚。非常感谢任何线索。

问候,蒂娜

enter code here

最佳答案

是的。

当您应该使用 PdfStamper 时,您正在尝试使用 PdfWriter 修改现有 PDF。

与使用 PdfWriterDocument 相比,使用压模添加文本要简单得多。

您需要创建一个ColumnText 对象,并通过调用myStamper.getOverContent(pageNum) 获取一个PdfContentByte

您将段落/ block /等添加到 ColumnText,并将其传递给 PdfContentByte(以及一些位置参数)以绘制文本。

或者,您可以用您的文本(和其他任何内容)创建一个单独的 PDF,然后使用 PdfStamper & PdfImportedPage 导入这些页面并将它们写在现有的。 PDF 页面背景是透明的,直到您在其上绘制内容,因此文本(和内容)将出现在现有页面的顶部。这明显效率较低,因为第二个文档必须转换为 PDF 语法中的字节数组(如果您使用 ByteArrayOutputStream 而不是写入文件,这会更慢),再次解析,然后添加到原始文档并第二次写出。

使用 ColumnText 是值得的。

您还需要使用 PdfContentByte 调用直接编写页眉和页脚,但您必须已经在 PdfPageEvent 中执行此操作,因此这些更改应该相当大简单。

关于itext - PdfWriter 和事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4070809/

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