itextpdf を使用して pdf の正当化されたテストに下線を引こうとしていますが、バグを発見したと思います。回避策が本当に必要です。
メーリング リストで説明されているように getBaseline() を呼び出すと、下線がテキストの末尾を超えて次の列まで伸びます。
float lx = renderInfos.get(i).getBaseline().getStartPoint().get(0);
float rx = renderInfos.get(i).getBaseline().getEndPoint().get(0);
元のpdfは出版社のウェブサイトからダウンロードできます
ありがとう!
私が試した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();