【问题标题】:iText PdfTemplate font size issueiText PdfTemplate 字体大小问题
【发布时间】: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 中添加值的代码。元素被添加到一个段落中,我删除了段落,突然之间所有的字体大小都相等了。不知道,为什么段落在文本和图像(从模板创建)之间产生了差异。可能是一些图像缩放..

标签: fonts size itext


【解决方案1】:

抱歉恢复旧帖: 这与页码不一致的字体大小有关 [Page 1 of 1]

OP 删除段落以获得相同字体大小的评论对我不起作用(在类似的图像缩放问题上)。

参考this post here 表明可能出了什么问题。

但是: 第一个 PDF(没有模板)包含一个“嵌入的子集” 字体“Georgia”(Ansi 编码)。这是使用字体的正确方法。 然而,第二个 PDF 包含: - Georgia (Ansi) 的嵌入式子集 - 格鲁吉亚的嵌入子集(CID / Identity-H) - 格鲁吉亚未嵌入(Ansi) - Georgia-Bold 未嵌入 (Ansi)

前两种字体都可以,后面两种字体不行 嵌入,我的 Adob​​e Reader 必须在我的 操作系统。

希望这会有所帮助:)

附:向模板添加内容时,可以在添加Phrase的同时设置字体,使模板的内容具有独立的字体。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    • 2023-03-07
    • 2021-06-13
    • 1970-01-01
    • 2021-08-22
    • 2011-03-28
    • 2013-05-05
    相关资源
    最近更新 更多