itext绝对定位文本

Jac*_*ack 22 .net java itext itextsharp

在itext中我有一个块/短语/段落(我不介意哪个),我想在页面上的其他位置定位,例如300 x 200.我该怎么做?

Jac*_*ack 27

最后我写了自己的方法来做到这一点.

private void PlaceChunck(String text, int x, int y) {
        PdfContentByte cb = writer.DirectContent;
        BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
        cb.SaveState();
        cb.BeginText();
        cb.MoveText(x, y);
        cb.SetFontAndSize(bf, 12);
        cb.ShowText(text);
        cb.EndText();
        cb.RestoreState();
    }
Run Code Online (Sandbox Code Playgroud)

  • @BrunoLowagie感谢这本书,但我完全不喜欢你的方法.如果您有更好的解决方案,可以将其发布在SO上,如果您不喜欢这个问题,可以将其下载.你没有做过.此外,这可能不是最好的方法,但我没有时间阅读完整的书,这个答案为我提供了一个可行的解决方案来创建我的例子.一天只有24小时,你不应该指望人们在工作时阅读书籍. (6认同)
  • 我不会拒绝这个答案,但我不喜欢它.问题是:我如何定位块,短语,段落.正确答案是:使用ColumnText.您可以使用showTextAligned()方法(仅适用于Phrase对象),或者如果需要支持除短语之外的换行符和/或对象,则可以使用ColumnText实例和go()方法. (5认同)
  • @BrunoLowagie - 那么完整答案呢?看到正确方法的解释会很有帮助. (2认同)

aar*_*ell 17

这是一个包含所有正确的套管和try/catch块的版本:

  private static void absText(String text, int x, int y) {
    try {
      PdfContentByte cb = writer.getDirectContent();
      BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
      cb.saveState();
      cb.beginText();
      cb.moveText(x, y);
      cb.setFontAndSize(bf, 12);
      cb.showText(text);
      cb.endText();
      cb.restoreState();
    } catch (DocumentException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
Run Code Online (Sandbox Code Playgroud)