动态PDF行样机

时间:2014-06-26 15:36:55

标签: c# asp.net pdf itextsharp dynamicpdf

我有一个小问题,答案可能非常明显和简单,但我想我在搜索互联网上找不到答案,所以我再次来找你们。

我用c#在asp.net中动态生成PDF文件,现在我只是为它做基础。它产生的一件事是一个表格,其中应该显示购物车内容(是的,我正在谈论发票),我试​​图给表格一些模型,但模拟上层行将与其余行不同。 (定义列的标题(数量,标题,单价,折扣和总计)

这里有一些代码(这是我第一次这么做,所以不要对我大吼大叫xD)

PdfPCell Quantity = new PdfPCell(new Phrase("Quantity"));
PdfPCell Title = new PdfPCell(new Phrase("Title"));
PdfPCell UniPr = new PdfPCell(new Phrase("Unit Price"));
PdfPCell Disc = new PdfPCell(new Phrase("Discount"));
PdfPCell Total = new PdfPCell(new Phrase("Total"));
PdfPCell[] cartheaderc = { Quantity, Title, UniPr, Disc, Total };
PdfPRow cartheader = new PdfPRow(cartheaderc);

所以我已经尝试过这种方式然后说:

PdfPRow.BackgroundColor = new BaseColor(255,0,0);

由于这适用于细胞,我认为这可能有意义,但显然它没有。当我把每个细胞分开时,我可能会这样做,但应该有一个更简单的方法,对吗?

这是一个问题,但遗憾的是,我还有一个问题(尽管愚蠢10倍,容易10倍)。我想要使​​用的颜色是#c5c5c5,但它并不想识别颜色代码。

以下是ItextSharp使用的系统列表(这与Visual Studio和SQLserver的标准系统不同,不,我不想在可能的情况下添加更多系统):

using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;

1 个答案:

答案 0 :(得分:0)

你有两个问题:

  1. 您正在使用PdfPRow,但您不应该这样做。 PdfPRow类仅供内部使用。您应该在PdfPCell级别工作。如果要为完整行着色,可以使用PdfPTableEvent来完成。例如,参见alternating.pdf中的彩色行。它们在AlternatingBackground桌面活动中着色。
  2. 您在创建颜色#c5c5c5时遇到困难。十六进制值C5等于197,因此您要创建以下颜色对象:new BaseColor(197, 197, 197);
  3. 您的主要错误是您通过添加PdfPRow个对象数组来创建PdfPCell。你从哪里获得灵感?如果你找到一个写这样一个例子的人,请告诉我,如果他在附近,我会亲自打他; - )

    表格是这样创建的:

    PdfPTable table = new PdfPTable(5);
    PdfPCell Quantity = new PdfPCell(new Phrase("Quantity"));
    table.AddCell(Quantity);
    PdfPCell Title = new PdfPCell(new Phrase("Title"));
    table.AddCell(Title);
    PdfPCell UniPr = new PdfPCell(new Phrase("Unit Price"));
    table.AddCell(UniPr);
    PdfPCell Disc = new PdfPCell(new Phrase("Discount"));
    table.AddCell(Disc);
    PdfPCell Total = new PdfPCell(new Phrase("Total"));
    table.AddCell(Total);
    

    有一种更简单的方法可以做到这一点。这种更简单的方法还允许您为每个单元格定义背景颜色:

    PdfPTable table = new PdfPTable(5);
    table.DefaultCell.BackgroundColor = new BaseColor(197, 197, 197);
    table.AddCell("Quantity");
    table.AddCell("Title");
    table.AddCell("Unit Price");
    table.AddCell("Discount");
    table.AddCell("Total");
    

    AddCell()方法将字符串包装在Phrase内。使用此PdfPCell创建Phrase,并将您为DefaultCell定义的所有属性应用于该单元格。这样,您可以确保所有单元格具有相同的背景颜色(或边框,或...)。显然,如果您自己创建DefaultCell个实例,则会忽略PdfPCell的属性。