我试图用 itextpdf 在 pdf 中强调合理的测试,我想我发现了一个错误,我真的很想解决这个问题。
当我按照邮件列表中的描述调用 getBaseline() 时,下划线会远远超出文本末尾,进入下一列。
float lx = renderInfos.get(i).getBaseline().getStartPoint().get(0);
float rx = renderInfos.get(i).getBaseline().getEndPoint().get(0);
谢谢!
我在我尝试过的所有版本的 itextpdf 上都看到了这一点,从4.1.0
最新的5.5.0
.
将下划线代码与我无法共享的其他专有代码分开需要一些努力。如果你认为这会有所帮助,我可以做到。
如果这是一个错误,是否有我可以记录的问题跟踪器?
PS(mkl):这里有一个简短的代码片段来重现该问题:
PdfReader reader = new PdfReader(...);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(...));
for (int page = 1; page <= reader.getNumberOfPages(); page++)
{
final List<TextRenderInfo> infos = new ArrayList<TextRenderInfo>();
PdfTextExtractor.getTextFromPage(reader, page, new TextExtractionStrategy()
{
public void renderText(TextRenderInfo renderInfo)
{
infos.add(renderInfo);
}
public void renderImage(ImageRenderInfo renderInfo) { }
public void endTextBlock() { }
public void beginTextBlock() { }
public String getResultantText() { return "";}
});
PdfContentByte content = stamper.getOverContent(page);
for (TextRenderInfo info : infos)
{
float lx = info.getBaseline().getStartPoint().get(0);
float rx = info.getBaseline().getEndPoint().get(0);
float y = info.getBaseline().getEndPoint().get(1);
content.moveTo(lx, y);
content.lineTo(rx, y);
content.stroke();
}
}
stamper.close();