我想创建一个 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"));
我得到一个例外
线程“main”中出现异常 ExceptionConverter:java.io.IOException:文档没有页面。
如果没有注释,则没有例外,但它不会添加页眉和页脚。任何线索都将受到高度赞赏。
问候,
蒂娜
enter code here
Yep.
您正在尝试使用以下命令修改现有 PDFPdfWriter
,当你应该使用PdfStamper
.
使用压模添加文本比使用压模添加文本要简单得多PdfWriter
and a Document
.
你需要创建一个ColumnText
对象,并得到一个PdfContentByte
通过致电myStamper.getOverContent(pageNum)
.
您将段落/块/等添加到ColumnText
,并将其传递给PdfContentByte
(以及一些位置参数)来绘制文本。
或者,您可以使用文本(以及其他任何内容)创建单独的 PDF,然后使用PdfStamper
& PdfImportedPage
导入这些页面并将它们写入现有页面之上。 PDF 页面背景是透明的,直到您在其上绘制某些内容为止,因此文本(和内容)将显示在现有页面的顶部。这明显效率较低,因为第二个文档必须转换为 PDF 语法中的字节数组(如果您使用的是ByteArrayOutputStream
而不是写入文件,这会更慢),再次解析,然后添加到原始文档并第二次写出。
值得付出一点额外的努力来使用ColumnText
.
您还需要直接编写页眉和页脚PdfContentByte
打电话,但你必须在你的范围内这样做PdfPageEvent
,所以这些更改应该非常简单。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)