我的代码已经破坏了5.5.4更新。我已经在内部确认它适用于之前的3个版本......
添加元素会导致空指针异常
reader = new PdfReader('Users/Me/Documents/a.pdf')
stamper = new PdfStamper(reader, new FileOutputStream('some_file'))
cb = stamper.getOverContent(1)
ct = new ColumnText(cb)
ct.setSimpleColumn(120f, 48f, 200f, 600f)
pz = new Paragraph ( new Phrase (20, 'Hello World!', f) )
ct.addElement(pz)
ct.go()
stamper.close()
reader.close()
约翰
伟大的新书顺便布鲁诺......
UPDATE 我之前确实错过了一些代码,我试图在更长的代码中隔离问题 这个版本对我来说确实存在问题:
bf = BaseFont.createFont(BaseFont.HELVETICA_BOLD, 'Cp1252', BaseFont.EMBEDDED)
f = new Font(bf, 13)
reader = new PdfReader(src')
stamper = new PdfStamper(reader, new FileOutputStream(dest))
cb = stamper.getOverContent(1)
ct = new ColumnText(cb)
ct.setSimpleColumn(120f, 48f, 200f, 600f)
pz = new Paragraph ( 'Hello World!' )
ct.addElement(pz)
ct.go()
stamper.close()
reader.close()
ct.addText(chunk)工作但5.5.4中没有addElement(),5.5.1 - 5.5.3
答案 0 :(得分:0)
您的代码示例不完整。例如:它错过了你试图添加额外单词的PDF(我采用了一个简单的"Hello World" pdf)并且它错过了一些定义,例如f
变量的声明(我采用了默认值)字体,这是Helvetica,12pt)。
当我填写你在问题中留下的空白时,我最终得到the following code:
public void manipulatePdf(String src, String dest) throws IOException, DocumentException {
PdfReader reader = new PdfReader(src);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
PdfContentByte cb = stamper.getOverContent(1);
ColumnText ct = new ColumnText(cb);
ct.setSimpleColumn(120f, 48f, 200f, 600f);
Font f = new Font();
Paragraph pz = new Paragraph(new Phrase(20, "Hello World!", f));
ct.addElement(pz);
ct.go();
stamper.close();
reader.close();
}
此代码生成PDF colum_text_phrase.pdf,该文档现在显示“Hello World!”字样。两次,一次是因为这些单词已经存在于原始文档中,一次是因为我们使用您问题中的改编代码添加了这些单词。
换句话说:我无法重现您报告的问题,因此您的问题无法回答。
请注意,我不明白这一行:
Paragraph pz = new Paragraph(new Phrase(20, "Hello World!", f));
为什么要创建Phrase
然后将其包装在Paragraph
内?
为什么不使用Phrase
或Paragraph
?例如:
Paragraph pz = new Paragraph(20, "Hello World!", f);
修改强>
根据您的修改,我调整了ColumnTextPhrase示例。我仍然无法重现问题,而不是使用:
pz = new Paragraph ( 'Hello World!' )
(这是你写的),也不是使用:
pz = new Paragraph ( 'Hello World!', f )
(这可能是你想写的)。
修改强>
使用您在评论中分享的文件,我能够重现该问题。我也理解为什么会出现问题:你有一个标记为PDF的文件。现在您要添加未标记的内容。较旧的iText版本允许您进行这种不体面的操作,最新的iText版本显然会阻止您做一些违背“好品味”的事情。我会把它传递给开发人员,以确定这是否是故意的。