0

语境

我从事动态 PDF 生成已经有一段时间了,我遇到了我的最终要求。唉,这是一场噩梦。我正在使用iText库,版本 2.1.7。

我基本上是在尝试获得像顶行这样的格式(我只是在油漆中模拟了它)。其他行是它目前的样子,但我在让它们正确排列时遇到了一些真正的麻烦!

在此处输入图像描述

代码

用于生成每个颜色编码块的代码在这里:

        String currentPrice = p.getPrice();
        String timeStr = p.getTime();         
        Chunk price = new Chunk(currentPrice);
        Chunk time = (Chunk) generatePdfElement("Timestamp", timeStr);

        if (priceDbl > lastPrice) {
             // set color to blue.
             price.setBackground(WebColors.getRGBColor("#7777FF"));
             time.setBackground(WebColors.getRGBColor("#7777FF"));
        } else if (priceDbl < lastPrice) {
             // set to red.
             price.setBackground(WebColors.getRGBColor("#FF0000"));
             time.setBackground(WebColors.getRGBColor("#FF0000"));
        }

        Paragraph pricePara = new Paragraph();
        pricePara.add(price);
        pricePara.add(generateBreakLine());
        pricePara.add(time);
        pricePara.add(generateBreakLine());
        // Add the new price data to the list of all the prices for this cell.
        allPrices.add(pricePara);

allPrices然后将其添加到段落并放入单元格中:

    Paragraph pricesCellValue = new Paragraph();
    pricesCellValue.addAll(allPrices);
    PdfPCell pricesCell = new PdfPCell(pricesCellValue);
    pricesCell.setBackgroundColor(WebColors.getRGBColor(getRowStr()));
    selectionsTable.addCell(pricesCell);
    // Add each cell to the table to create the row.

我尝试过的方法

我尝试了显而易见的方法,即从每个Chunk. 这不起作用,它只是看起来完全一样,虽然每个Chunk更接近。

我也尝试将 from 更改ParagraphPhrase,这意味着代码如下所示:

  Phrase pricePara = new Phrase();
  pricePara.add(price);
  pricePara.add(generateBreakLine());
  pricePara.add(time);
  //pricePara.add(generateBreakLine());
  // Add the new price data to the list of all the prices for this cell.
  allPrices.add(pricePara);

结果是这样的:

在此处输入图像描述

所以现在我的想法很新鲜!有没有其他人有任何建议,或者在这方面对 iText 有一些经验?

编辑

为清楚起见,generateBreakLine()生成一个新的空Paragraph对象。

4

1 回答 1

0

我在最后一个单元格中使用了嵌套PdfPTable,以格式化每个Phrase. 像梦一样工作!

于 2013-08-08T14:58:10.137 回答