使用5.5.4添加元素时iText失败

时间:2015-01-16 17:45:23

标签: itext

我的代码已经破坏了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

1 个答案:

答案 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内? 为什么不使用PhraseParagraph?例如:

Paragraph pz = new Paragraph(20, "Hello World!", f);

修改

根据您的修改,我调整了ColumnTextPhrase示例。我仍然无法重现问题,而不是使用:

pz = new Paragraph ( 'Hello World!' )

(这是你写的),也不是使用:

pz = new Paragraph ( 'Hello World!', f )

(这可能是你想写的)。

修改

使用您在评论中分享的文件,我能够重现该问题。我也理解为什么会出现问题:你有一个标记为PDF的文件。现在您要添加未标记的内容。较旧的iText版本允许您进行这种不体面的操作,最新的iText版本显然会阻止您做一些违背“好品味”的事情。我会把它传递给开发人员,以确定这是否是故意的。