【问题标题】:how to set width for PdfPCell in ItextSharp如何在 ItextSharp 中为 PdfPCell 设置宽度
【发布时间】:2012-11-14 20:38:44
【问题描述】:

我想为表格中的 PdfpCell 设置宽度,我想设计这个


我写这段代码

  PdfPCell cell;
            PdfGrid tableHeader;
            PdfGrid tmpTable;
            PdfGrid table = new PdfGrid(numColumns: 1) { WidthPercentage = 100, RunDirection = PdfWriter.RUN_DIRECTION_LTR, ExtendLastRow = false };

            string imagepath2 = HttpRuntime.AppDomainAppPath + "Header.JPG";
            cell = new PdfPCell() { Border = 0, RunDirection = PdfWriter.RUN_DIRECTION_RTL };
            cell.Image = iTextSharp.text.Image.GetInstance(imagepath2);
            table.AddCell(cell);


            tableHeader = new PdfGrid(numColumns: 10);
            tableHeader.RunDirection = PdfWriter.RUN_DIRECTION_LTR;

            tmpTable = new PdfGrid(numColumns: 1);
            tmpTable.TotalWidth = 10f;
            tmpTable.LockedWidth = true;
            cell = new PdfPCell() {Rotation =-90,VerticalAlignment =Element.ALIGN_MIDDLE, HorizontalAlignment =Element.ALIGN_CENTER, BorderWidth = 1};
            cell.Phrase = fontSelector.Process("SER. No");

            tmpTable.AddCell(cell);

            cell = new PdfPCell(tmpTable) { BorderWidth = 1, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
            tableHeader.AddCell(cell);

            ////////////////////////////////////////////////////////////
            tmpTable = new PdfGrid(numColumns: 1);
            cell = new PdfPCell() { Border = 0,  BorderWidthBottom = 1,VerticalAlignment =Element.ALIGN_MIDDLE, HorizontalAlignment =Element.ALIGN_CENTER };
            cell.Phrase = fontSelector.Process("TYPE OF SHIPPING");
            //
            tmpTable.AddCell(cell);


            cell = new PdfPCell() { Border = 0, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
            cell.Phrase = fontSelector.Process("AWB / BL NO.");
            tmpTable.AddCell(cell);

            cell = new PdfPCell(tmpTable) { BorderWidth = 1, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
            tableHeader.AddCell(cell);
            ///////////////////////////////////////////////////////////////

            tmpTable = new PdfGrid(numColumns: 1);
            cell = new PdfPCell() { Border = 0, BorderWidthBottom = 1, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
            cell.Phrase = fontSelector.Process("ORDER NO.");
            tmpTable.AddCell(cell);


            cell = new PdfPCell() { Border = 0, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
            cell.Phrase = fontSelector.Process("COMPLEX NAME");
            tmpTable.AddCell(cell);

            cell = new PdfPCell(tmpTable) { BorderWidth = 1, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
            tableHeader.AddCell(cell);
            ///////////////////////////////////////////////////////////////

            tmpTable = new PdfGrid(numColumns: 1);
            cell = new PdfPCell() { Border = 0, BorderWidthBottom = 1, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
            cell.Phrase = fontSelector.Process("QTY.");
            tmpTable.AddCell(cell);


            cell = new PdfPCell() { Border = 0, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
            cell.Phrase = fontSelector.Process("G.W Kgs.");
            tmpTable.AddCell(cell);

            cell = new PdfPCell(tmpTable) { BorderWidth = 1, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
            tableHeader.AddCell(cell);
            ///////////////////////////////////////////////////////////////
            tmpTable = new PdfGrid(numColumns: 1);
            cell = new PdfPCell() { Border = 0, BorderWidthBottom = 1, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
            cell.Phrase = fontSelector.Process("DISCHARGE PPORT");
            tmpTable.AddCell(cell);


            cell = new PdfPCell() { Border = 0, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
            cell.Phrase = fontSelector.Process("DESTINATON");
            tmpTable.AddCell(cell);

            cell = new PdfPCell(tmpTable) { BorderWidth = 1 };
            tableHeader.AddCell(cell);
            ///////////////////////////////////////////////////////////////
            cell = new PdfPCell() { BorderWidth = 1, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
            cell.Phrase = fontSelector.Process("DESCRIPTION OF GOODS");

            tableHeader.AddCell(cell);

            /////////////////////////////////////////////////////////////
            tmpTable = new PdfGrid(numColumns: 1);
            cell = new PdfPCell() { Border = 0, BorderWidthBottom = 1, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
            cell.Phrase = fontSelector.Process("LINE DOC. RECI. DATE");
            tmpTable.AddCell(cell);


            cell = new PdfPCell(new Phrase("")) { Border = 0, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
            cell.Phrase = fontSelector.Process("OWNER DOC. RECI. DATE");
            tmpTable.AddCell(cell);

            cell = new PdfPCell(tmpTable) { BorderWidth = 1 };
            tableHeader.AddCell(cell);
            ///////////////////////////////////////////////////////////////
            cell = new PdfPCell() { BorderWidth = 1, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
            cell.Phrase = fontSelector.Process("CLEARANCE DATE");

            tableHeader.AddCell(cell);

            ///////////////////////////////////////////////////////////

            cell = new PdfPCell() { BorderWidth = 1, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
            cell.Phrase = fontSelector.Process("CUSTOM PERMIT NO.");

            tableHeader.AddCell(cell);

            ///////////////////////////////////////////////////////////
            cell = new PdfPCell() { BorderWidth = 1, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
            cell.Phrase = fontSelector.Process("DISPATCH DATE");
            tableHeader.AddCell(cell);

            ///////////////////////////////////////////////////////////
            cell = new PdfPCell(tableHeader) { BorderWidth = 1, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };

            table.AddCell(cell);
            doc.Add(table);
            ///////////////////////////////////////////////////////////
            doc.Close();

但是这段代码创建了这个表

我想调整 SerNo 列的宽度,但是

但是我不知道如何调整单元格的宽度,请帮助我。

【问题讨论】:

  • 你为什么使用 PdfGrid 而不是 PdfPTable?目前尚不清楚您到底想做什么。有一个表,然后有一个 tableHeader,它们没有链接。 (???)
  • @Nick : 表头是嵌套表,在这个单元格中只是 RowNo 并且希望我很小并且宽度

标签: c# itextsharp pdfptable


【解决方案1】:

为什么不为此使用PdfPTable 对象? 创建一个固定宽度的表格,并使用一个浮点数组来设置列的宽度

PdfPTable table = new PdfPTable(10);
table.HorizontalAlignment = 0;
table.TotalWidth = 500f;
table.LockedWidth = true;
float[] widths = new float[] { 20f, 60f, 60f, 30f, 50f, 80f, 50f, 50f, 50f, 50f };
table.SetWidths(widths);

addCell(table, "SER.\nNO.", 2);

addCell(table, "TYPE OF SHIPPING", 1);
addCell(table, "ORDER NO.", 1);
addCell(table, "QTY.", 1);
addCell(table, "DISCHARGE PPORT", 1);

addCell(table, "DESCRIPTION OF GOODS", 2);

addCell(table, "LINE DOC. RECL DATE", 1);

addCell(table, "CLEARANCE DATE", 2);
addCell(table, "CUSTOM PERMIT NO.", 2);
addCell(table, "DISPATCH DATE", 2);

addCell(table, "AWB/BL NO.", 1);
addCell(table, "COMPLEX NAME", 1);
addCell(table, "G. W. Kgs.", 1);
addCell(table, "DESTINATION", 1);
addCell(table, "OWNER DOC. RECL DATE", 1);

....

private static void addCell(PdfPTable table, string text, int rowspan)
{
    BaseFont bfTimes = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, false);
    iTextSharp.text.Font times = new iTextSharp.text.Font(bfTimes, 6, iTextSharp.text.Font.NORMAL, iTextSharp.text.BaseColor.BLACK);

    PdfPCell cell = new PdfPCell(new Phrase(text, times));
    cell.Rowspan = rowspan;
    cell.HorizontalAlignment = PdfPCell.ALIGN_CENTER;
    cell.VerticalAlignment = PdfPCell.ALIGN_MIDDLE;
    table.AddCell(cell);
}

也看看this tutorial...

【讨论】:

  • 我已经用提供的示例更新了我的问题。这都是关于在桌子上设置宽度
  • 我喜欢这个,它更干净。您还可以更进一步,在方法中制作一种模板行。您可以使用AddRow(PdfPTable _t, DataRow _dr, bool _head) 之类的名称调用该方法。从那里一切都很容易。
  • @Nick.T:更好的是,我已经更新了我的代码示例,但只是针对每个单元格
  • 谁能帮助如何在.net中设置单元格/列的宽度?
【解决方案2】:

试试这样的

PdfPCell cell;
PdfPTable tableHeader;
PdfPTable tmpTable;
PdfPTable table = new PdfPTable(10) { WidthPercentage = 100, RunDirection = PdfWriter.RUN_DIRECTION_LTR, ExtendLastRow = false };

// row 1 / cell 1 (merge)
PdfPCell _c = new PdfPCell(new Phrase("SER. No")) { Rotation = -90, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER, BorderWidth = 1 };
_c.Rowspan = 2;

table.AddCell(_c);

// row 1 / cell 2
_c = new PdfPCell(new Phrase("TYPE OF SHIPPING")) { VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
table.AddCell(_c);

// row 1 / cell 3
_c = new PdfPCell(new Phrase("ORDER NO.")) { VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
table.AddCell(_c);

// row 1 / cell 4
_c = new PdfPCell(new Phrase("QTY.")) { VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
table.AddCell(_c);

// row 1 / cell 5
_c = new PdfPCell(new Phrase("DISCHARGE PPORT")) { VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
table.AddCell(_c);

// row 1 / cell 6 (merge)
_c = new PdfPCell(new Phrase("DESCRIPTION OF GOODS")) { VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
_c.Rowspan = 2;
table.AddCell(_c);

// row 1 / cell 7
_c = new PdfPCell(new Phrase("LINE DOC. RECI. DATE")) { VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
table.AddCell(_c);

// row 1 / cell 8 (merge)
_c = new PdfPCell(new Phrase("OWNER DOC. RECI. DATE")) { VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
_c.Rowspan = 2;
table.AddCell(_c);

// row 1 / cell 9 (merge)
_c = new PdfPCell(new Phrase("CLEARANCE DATE")) { VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
_c.Rowspan = 2;
table.AddCell(_c);

// row 1 / cell 10 (merge)
_c = new PdfPCell(new Phrase("CUSTOM PERMIT NO.")) { VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
_c.Rowspan = 2;
table.AddCell(_c);


// row 2 / cell 2
_c = new PdfPCell(new Phrase("AWB / BL NO.")) { VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
table.AddCell(_c);

// row 2 / cell 3
_c = new PdfPCell(new Phrase("COMPLEX NAME")) { VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
table.AddCell(_c);

// row 2 / cell 4
_c = new PdfPCell(new Phrase("G.W Kgs.")) { VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
table.AddCell(_c);

// row 2 / cell 5
_c = new PdfPCell(new Phrase("DESTINATON")) { VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
table.AddCell(_c);

// row 2 / cell 7
_c = new PdfPCell(new Phrase("OWNER DOC. RECI. DATE")) { VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
table.AddCell(_c);

_doc.Add(table);
///////////////////////////////////////////////////////////
_doc.Close();

您可能需要稍微重新调整宽度和边框,但这是一次性的。

【讨论】:

    【解决方案3】:

    试试这个代码,我认为它更优化。

    HeaderRow 用于自动重复每个新页面的表头

            BaseFont bfTimes = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, false);
            iTextSharp.text.Font times = new iTextSharp.text.Font(bfTimes, 6, iTextSharp.text.Font.NORMAL, iTextSharp.text.BaseColor.BLACK);
    
            PdfPTable table = new PdfPTable(10) { HorizontalAlignment = Element.ALIGN_CENTER, WidthPercentage = 100, HeaderRows = 2 };
            table.SetWidths(new float[] { 2f, 6f, 6f, 3f, 5f, 8f, 5f, 5f, 5f, 5f });
            table.AddCell(new PdfPCell(new Phrase("SER.\nNO.", times)) { Rowspan = 2, GrayFill = 0.95f });
            table.AddCell(new PdfPCell(new Phrase("TYPE OF SHIPPING", times)) { GrayFill = 0.95f });
            table.AddCell(new PdfPCell(new Phrase("ORDER NO.", times)) { GrayFill = 0.95f });
            table.AddCell(new PdfPCell(new Phrase("QTY.", times)) { GrayFill = 0.95f });
            table.AddCell(new PdfPCell(new Phrase("DISCHARGE PPORT", times)) { GrayFill = 0.95f });
            table.AddCell(new PdfPCell(new Phrase("DESCRIPTION OF GOODS", times)) { Rowspan = 2, GrayFill = 0.95f });
            table.AddCell(new PdfPCell(new Phrase("LINE DOC. RECL DATE", times)) { GrayFill = 0.95f });
            table.AddCell(new PdfPCell(new Phrase("CLEARANCE DATE", times)) { Rowspan = 2, GrayFill = 0.95f });
            table.AddCell(new PdfPCell(new Phrase("CUSTOM PERMIT NO.", times)) { Rowspan = 2, GrayFill = 0.95f });
            table.AddCell(new PdfPCell(new Phrase("DISPATCH DATE", times)) { Rowspan = 2, GrayFill = 0.95f });
            table.AddCell(new PdfPCell(new Phrase("AWB/BL NO.", times)) { GrayFill = 0.95f });
            table.AddCell(new PdfPCell(new Phrase("COMPLEX NAME", times)) { GrayFill = 0.95f });
            table.AddCell(new PdfPCell(new Phrase("G. W. Kgs.", times)) { GrayFill = 0.95f });
            table.AddCell(new PdfPCell(new Phrase("DESTINATION", times)) { GrayFill = 0.95f });
            table.AddCell(new PdfPCell(new Phrase("OWNER DOC. RECL DATE", times)) { GrayFill = 0.95f });
    

    【讨论】:

      【解决方案4】:

      aca definis los anchos

       float[] anchoDeColumnas= new float[] {10f, 20f, 30f, 10f};
      

      aca se los insertas a la tabla que tiene las columnas

      table.setWidths(anchoDeColumnas);
      

      【讨论】:

        猜你喜欢
        • 2012-03-01
        • 2010-12-02
        • 2013-11-18
        • 2015-04-27
        • 2014-02-10
        • 1970-01-01
        • 1970-01-01
        • 2014-10-06
        • 1970-01-01
        相关资源
        最近更新 更多