如何对齐块左右两侧

时间:2017-12-04 14:14:13

标签: itext

我想对齐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);

这使我的结果here the my output右侧Chunk格式不正确。

但我希望对齐required result 你能帮我么。

2 个答案:

答案 0 :(得分:1)

正确的方法是使用iText 7.阅读构建基块教程的chapter 3,了解如何创建如下所示的PDF:

enter image description here

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

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年的书&#34; iText in Action - Second Edition&#34;中所述,您创建了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中使用标签。

答案 1 :(得分:0)

这对我有用:

class Test {
private:
    static int count;
    static Test* arr;
public:
    int num;

    Test() {}

    Test(int val) : num(val) {
        arr[count] = *this;
        count++;
    }

    ~Test() {
        delete[] arr;
    }

    void print() {
        for (int a = 0; a <= count - 1; a++) {
            std::cout << arr[a].num << std::endl;
        }
    }
};

int Test::count = 0;
Test* Test::arr = new Test[2];

int main(int argc, char** argv) {
    Test t1(10);
    Test t2(20);
    t2.print();
    return 0;
}