【问题标题】:How to align a Chunk Left and Right Side如何对齐块的左侧和右侧
【发布时间】:2017-12-04 14:14:12
【问题描述】:

我想对齐Chunk 左侧和右侧。此外,每个Chunk 都有不同的格式,您可以在图像中看到。

我试试下面的代码:

Chunk invoiceid = new Chunk("Invoice ID: ", font9BoldDARK_GRAY);
Chunk invoiceidvalue = new Chunk("value from database", font10NoramlBlack);
Chunk inoicdate = new Chunk("Invoice Date: ", font9BoldDARK_GRAY);
Chunk inoicedatevalue = new Chunk(new SimpleDateFormat("MMMM dd yyyy").format(new Date()), font10NoramlBlack);// get From database

    Paragraph invoiceParagraph = new Paragraph();
    invoiceParagraph.setTabSettings(new TabSettings(325f));
    invoiceParagraph.add(invoiceid);
    invoiceParagraph.add(invoiceidvalue);

    invoiceParagraph1.add(Chunk.TABBING);

    invoiceParagraph1.add(inoicdate1);
    invoiceParagraph1.add(inoicedatevalue1);
    invoiceParagraph1.setAlignment(Element.ALIGN_JUSTIFIED);
    pdfdocument.add(invoiceParagraph1);

这给了我结果 右侧 Chunk 格式不正确。

但我想对齐 你能帮我么。

【问题讨论】:

  • 您是否故意使用旧版本的 iText?还是您不知道 iText 7 大约在一年半前发布?
  • 另外,如果您坚持使用 iText 5,为什么不阅读 iText 5 文档的chapter 2 中有关制表符和分隔符的部分?您显示的结果完全按照您在代码中的要求进行操作!您希望在325 位置有一个选项卡,这就是文本开始的地方。这让你的问题很尴尬。对我来说,这听起来像是:我正在尝试添加一个像这样的1 + 1,但我得到的结果是2,我希望结果是3。这是一个奇怪的问题,不是吗?

标签: itext


【解决方案1】:

执行此操作的正确方法是使用 iText 7。阅读构建块教程的chapter 3,了解如何创建如下所示的 PDF:

实现这一点的代码非常简单:

public void createPdf(String dest) throws IOException {
    // create a low-level document
    PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
    // create a high-level document
    Document document = new Document(pdf);
    // create a TabStop array
    List<TabStop> tabstops = new ArrayList<TabStop>();
    // don't forget to make a tab stop that aligns to the right
    tabstops.add(new TabStop(325, TabAlignment.RIGHT));
    // add paragraphs with Tab objects to the high-level document
    document.add(new Paragraph().addTabStops(tabstops)
            .add("Text to the left").add(new Tab()).add("Text to the right"));
    document.add(new Paragraph().addTabStops(tabstops)
            .add("ABCD").add(new Tab()).add("EFGH"));
    document.add(new Paragraph().addTabStops(tabstops)
            .add("01234").add(new Tab()).add("56789"));
    document.add(new Paragraph().addTabStops(tabstops)
            .add("iText 5 is old").add(new Tab()).add("iText 7 is new"));
    // close the document
    document.close();
}

在你说我不认识那个代码之前,让我告诉你你是对的:iText 被完全重写了。代码现在更易于创建,更易于阅读。

更新:您使用的是旧版 iText 5,免费用户不再支持(仅限付费客户)。正如 2009 年的《iText in Action - Second Edition》一书中所述,您创建了 glue,如下所示:

Chunk glue = new Chunk(new VerticalPositionMark())

然后你在Paragraph 中使用了这种胶水,如下所示:

Paragraph p = new Paragraph();
p.add("Text to the left");
p.add(glue);
p.add("Text to the right");

这样,您确实可以避免在 iText 5 中使用标签。

【讨论】:

  • 感谢您的回答..我正在使用 5.5.12 itext 版本..正如您所说 iText 5 不是免费的,我也阅读了有关 AGPL 的信息
  • itext 7 是免费的吗?或者应该可以使用 iText 2.1.7 (java) 它是在 MPL / LGPL 下发布的
  • 我也使用Chunk glue = new Chunk(new VerticalPositionMark())而不是TAB来解决我的问题
  • 我只想在页面上创建 pdf 仅此而已..这就是为什么我要问我应该使用哪个版本,所以它对我来说是免费的
  • 请阅读博文How can I use iText for free? iText 5 之前的版本can not be used。您是否可以免费使用 iText 5 或 7 并不取决于版本,而是取决于您如何使用它。例如:您不能在您分发给客户的闭源专有软件中使用任何版本。
【解决方案2】:

这对我有用:

Paragraph p = new Paragraph("some Text");
p.setAlignment(Element.ALIGN_RIGHT);

【讨论】:

    猜你喜欢
    • 2012-01-24
    • 2012-06-19
    • 1970-01-01
    • 2016-07-11
    • 2022-08-23
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    • 2022-01-19
    相关资源
    最近更新 更多