短语在 ColumnText 中的 iText 位置
iText placement of Phrase within ColumnText
所以我正在处理这样一种情况,我在 ColumnText 中添加了一个短语 object。
黑色标题是 iText 将 Phrase 文本放置在 ColumnText 中的位置。粉红色的标题是所需的位置。
private void addText(PdfContentByte contentByte, PdfReader threePagesReader, Project project, CoverTemplate coverTemplate)
throws DocumentException {
ColumnText columnText = new ColumnText(contentByte);
// This only affects the space between Phrases, not the space between the top of the
//ColumnText and the first Phrase
int extraParagraphSpace = 12;
columnText.setExtraParagraphSpace(extraParagraphSpace);
Phrase mainTitle = new Phrase(project.getTitle(),buildCoverFont(coverTemplate.getFontSizeLine1()));
columnText.addText(mainTitle);
... <other code that is not pertinent to this question>
//these values are calculated from values that will place this columnText onto the PDF
//template
columnText.setSimpleColumn(llx, lly, urx, ury);
columnText.go();
private Font buildCoverFont(float fontSize) {
Font font = FontFactory.getFont(FONT_ARIAL, BaseFont.WINANSI, BaseFont.EMBEDDED, fontSize, Font.NORMAL, CMYK_BLACK);
BaseFont baseFont = font.getBaseFont();
if (baseFont != null) {
baseFont.setSubset(false); // fully embedded as per requirements
}
return font;
}
我能做些什么来告诉 iText 不要在最高字形的顶部(在本例中为 D 和 Z)和 ColumnText 框的顶部之间放置任何 space?
我试着查看 BaseFont.getAscension() 以查看是否有任何可用值,但它最终还是 0。
请看一下ColumnTextAscender例子:
在这两种情况下,我都画了一个红色矩形:
rect.setBorder(Rectangle.BOX);
rect.setBorderWidth(0.5f);
rect.setBorderColor(BaseColor.RED);
PdfContentByte cb = writer.getDirectContent();
cb.rectangle(rect);
在左侧,您会看到按照您的方式添加的文本。在这种情况下,iText 将添加额外的 space,通常称为 leading。在右侧,您会看到按照您想要添加的方式添加的文本。在这种情况下,我们已经告诉 ColumnText
它需要使用字体的 Ascender 值:
Phrase p = new Phrase("This text is added at the top of the column.");
ColumnText ct = new ColumnText(cb);
ct.setSimpleColumn(rect);
ct.setUseAscender(true);
ct.addText(p);
ct.go();
现在文本的顶部触及矩形的边框。
所以我正在处理这样一种情况,我在 ColumnText 中添加了一个短语 object。
黑色标题是 iText 将 Phrase 文本放置在 ColumnText 中的位置。粉红色的标题是所需的位置。
private void addText(PdfContentByte contentByte, PdfReader threePagesReader, Project project, CoverTemplate coverTemplate)
throws DocumentException {
ColumnText columnText = new ColumnText(contentByte);
// This only affects the space between Phrases, not the space between the top of the
//ColumnText and the first Phrase
int extraParagraphSpace = 12;
columnText.setExtraParagraphSpace(extraParagraphSpace);
Phrase mainTitle = new Phrase(project.getTitle(),buildCoverFont(coverTemplate.getFontSizeLine1()));
columnText.addText(mainTitle);
... <other code that is not pertinent to this question>
//these values are calculated from values that will place this columnText onto the PDF
//template
columnText.setSimpleColumn(llx, lly, urx, ury);
columnText.go();
private Font buildCoverFont(float fontSize) {
Font font = FontFactory.getFont(FONT_ARIAL, BaseFont.WINANSI, BaseFont.EMBEDDED, fontSize, Font.NORMAL, CMYK_BLACK);
BaseFont baseFont = font.getBaseFont();
if (baseFont != null) {
baseFont.setSubset(false); // fully embedded as per requirements
}
return font;
}
我能做些什么来告诉 iText 不要在最高字形的顶部(在本例中为 D 和 Z)和 ColumnText 框的顶部之间放置任何 space?
我试着查看 BaseFont.getAscension() 以查看是否有任何可用值,但它最终还是 0。
请看一下ColumnTextAscender例子:
在这两种情况下,我都画了一个红色矩形:
rect.setBorder(Rectangle.BOX);
rect.setBorderWidth(0.5f);
rect.setBorderColor(BaseColor.RED);
PdfContentByte cb = writer.getDirectContent();
cb.rectangle(rect);
在左侧,您会看到按照您的方式添加的文本。在这种情况下,iText 将添加额外的 space,通常称为 leading。在右侧,您会看到按照您想要添加的方式添加的文本。在这种情况下,我们已经告诉 ColumnText
它需要使用字体的 Ascender 值:
Phrase p = new Phrase("This text is added at the top of the column.");
ColumnText ct = new ColumnText(cb);
ct.setSimpleColumn(rect);
ct.setUseAscender(true);
ct.addText(p);
ct.go();
现在文本的顶部触及矩形的边框。