2016-07-07 84 views
1

我有一个奇怪的问题与iText & PdfTemplate。iText PdfTemplate字体大小问题

我正在使用PdfTemplate &图像将总页码打印到页脚。 我创建一个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,则模板中的文本会变小。 这里一些图像

when font size is 6f

when font size is 8f

when font size is 9f

when font size if 10f

when font size if 14f

(在该顺序的图像,字体大小:1207米,8F,9F,10F, 14f,“第1页”是否rmal文本以及“of”后的数字随模板而变)

正如您可以看到9f字体大小的模板文本略小于普通文本,但在10f后两个文本相同。

我搜索了PdfTemplate和Elements之间是否存在一些关于字体大小的规则,但没有发现任何内容。

任何帮助是appretiated!

谢谢!

+0

不幸的是,您的代码不容易重现问题,因为您使用了许多未知的方法,并且您不明白如何将内容添加到页面。我会假设你的问题的原因是由于这些不知名的代码段的一些怪癖。 – mkl

+0

虽然是一个很大的变化,难道你不能只是转向在你的PDF上做两遍?第一遍打印PDF,第二遍打印页码?它真的简化了一些事情。参见[第三代码块](http://stackoverflow.com/a/9845722/231316) –

+0

嗨!我无法通过两遍,因为我不知道总页数到底在哪里。 PDF是从模板(XML)生成的,并且totalPages可以在任何地方(甚至在文档正文中)。 @mkl:我无法粘贴整个生成器代码,因为它大约有2000行,但这些“未知”方法没有什么特别之处,可能是这样的吗? CreatorHelper.getCurrentFont(rec.getFontContext()); – user1536873

回答

0

对不起复活旧文章: 这是相对于不一致的字体大小的页码[第1页1]删除段落获得平等的字体大小,我没有工作的

OP的评论(在类似的图像缩放问题上)。

参考this post here显示出现了什么问题。

但是: 第一PDF(无模板)包含 字体 “格”(ANSI编码) “嵌入子集”。这是使用字体的正确方法。 第二PDF然而,包含: - 乔治亚(ANSI)的嵌入式子集 - 乔治亚(CID /身份-H)的嵌入式子集 - 格鲁吉亚不嵌入(ANSI) - 格鲁吉亚粗体未嵌入(ANSI)

两个第一字体都OK,但以下两种字体是没有 嵌入式,我ADOBE READER不得不寻找我的 操作系统中的字体格鲁吉亚。

希望这会有所帮助:)

P.S.向模板添加内容时,可以在添加短语时设置字体,以允许模板的内容具有独立字体。