【发布时间】:2016-07-07 11:18:02
【问题描述】:
我对 iText 和 PdfTemplate 有一个奇怪的问题。
我正在使用 PdfTemplate & Image 将总页码打印到页脚。 我创建一个 PdfTemplate,从模板创建一个图像并将图像放入一个块中,然后将该块添加到表/短语/段落中,无论父组件是什么。
PdfTemplate tmp = PdfTemplate.createTemplate(writer, 20, 10);
Image img = null;
try
{
img = Image.getInstance(tmp);
}
catch (BadElementException e)
{
}
return new Chunk(img, 0, 0);
然后将返回的这个块添加到页面中(例如,添加到短语中)。将创建的 PdfTemplate 保存到列表中以供以后获取。
然后在pageEventHelper(onCloseDocument)中,我在ColumnText的帮助下用总页码填充模板,像这样:
PdfTemplateRecord rec = pagenums.get(i);
PdfTemplate tmp = rec.getTemplate();
Font font = CreatorHelper.getCurrentFont(rec.getFontContext());
if (font == null)
{
font = new Font(defaultFont, 8f);
}
ColumnText columnText = new ColumnText(tmp);
columnText.setSimpleColumn(new Phrase(Integer.toString(pagenum), font), 0, -tmp.getHeight(), tmp.getWidth(), 0, 0, Element.ALIGN_LEFT);
columnText.setUseAscender(false);
try
{
columnText.go();
}
catch (DocumentException e)
{
log.error("Failed to render total page number", e);
}
除了两件事之外,一切都很好:
1.) 如果您仔细检查 setSimpleColumn,我必须将 Y 位置设置为 -tmp.getHeight()(例如 -10)而不是 0。如果我将 Y 设置为 0,则仅绘制文本在线上...可能我在添加图像时弄乱了一些东西,但不知道
2.) 我的字体大小有问题。奇怪,但如果字体大小大于 10f,则普通文本和模板中的文本是相同的。但是,如果字体大小低于 10f,则模板中的文本会变小。 这里有一些图像
(图片按此顺序,字体大小:6f、8f、9f、10f、14f,“第1页”为普通文本,“的”后面的数字是模板自带的)
如您所见,使用 9f 字体大小时,模板文本比普通文本略小,但在 10f 之后,两个文本完全相同。
我搜索了 PdfTemplate 和 Elements 之间是否有关于字体大小的规则,但没有找到任何东西。
感谢任何帮助!
谢谢!
【问题讨论】:
-
不幸的是,您的代码不允许重现该问题,因为您使用了许多未知方法,而且您如何将内容添加到页面也不清楚。我认为您的问题的原因是由于那些未知代码的一些怪癖。
-
虽然变化很大,但您不能切换到在 PDF 上进行两次传递吗?第一遍制作PDF,第二遍放页码?它确实简化了事情。见third block of code here
-
嗨!我不能分两次完成,因为我不知道 totalPages 到底来自哪里。 PDF 是从模板 (XML) 生成的,totalPages 可能无处不在(甚至在文档正文中)。 @mkl:好吧,我无法粘贴整个生成器代码,因为它大约有 2000 行,但是那些“未知”方法并没有什么特别之处,您可能对此感兴趣吗? CreatorHelper.getCurrentFont(rec.getFontContext());
-
“我无法粘贴整个生成器代码,因为它大约有 2000 行” - 解决此类问题的一个好方法通常是将代码减少到尽可能少重现问题。这通常会使一个可能的错误突出显示...... “你可能关心这个吗?CreatorHelper.getCurrentFont(rec.getFontContext());” - 是的,特别是那个。可能该方法有时会返回大小错误的字体。
-
好吧,我不能减少代码,但可以创建简单的模板,它不使用整个 2000 行代码(我所做的)。我检查了调试器,有问题的方法确实返回了具有适当大小、样式和类型的适当字体。由于此问题仅发生在 PdfCell 中,因此我查看了在 PdfCell 中添加值的代码。元素被添加到一个段落中,我删除了段落,突然之间所有的字体大小都相等了。不知道,为什么段落在文本和图像(从模板创建)之间产生了差异。可能是一些图像缩放..