web-dev-qa-db-ja.com

iTextSharpで表の境界線を非表示にする

ITextSharpを使用してテーブルの境界線を非表示にするにはどうすればよいですか。次のコードを使用してファイルを生成しています。

var document = new Document(PageSize.A4, 50, 50, 25, 25);

// Create a new PdfWriter object, specifying the output stream
var output = new MemoryStream();
var writer = PdfWriter.GetInstance(document, output);

document.Open();
PdfPTable table = new PdfPTable(3);
var bodyFont = FontFactory.GetFont("Arial", 10, Font.NORMAL);
PdfPCell cell = new PdfPCell(new Phrase("Header spanning 3 columns"));
cell.Colspan = 3;
cell.HorizontalAlignment = 1; //0=Left, 1=Centre, 2=Right
table.AddCell(cell);
Font arial = FontFactory.GetFont("Arial", 6, BaseColor.BLUE);
cell = new PdfPCell(new Phrase("Font test is here ", arial));
cell.PaddingLeft = 5f;
cell.Colspan = 1;
table.AddCell(cell);
cell = new PdfPCell(new Phrase("XYX"));
cell.Colspan = 2;
table.AddCell(cell);
cell = new PdfPCell(new Phrase("Hello World"));
cell.PaddingLeft = 5f;
cell.Colspan = 1;
table.AddCell(cell);
cell = new PdfPCell(new Phrase("XYX"));
cell.Colspan = 2;
table.AddCell(cell);



table.SpacingBefore = 5f;
document.Add(table);
document.Close();

Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "attachment;filename=Receipt-test.pdf");
Response.BinaryWrite(output.ToArray());

個々のセルに境界線を指定しないでください。または、テーブル自体に境界線を指定できません。

ありがとうございました

36
SharpCoder

Martijnによる回答を支持しましたが、説明を追加します。

ITextではセルのみが境界線を持ちます。テーブルには境界線がありません。デフォルトのセルの境界線を_NO_BORDER_に設定するというMartijnの提案は正しい:

_table.DefaultCell.Border = Rectangle.NO_BORDER;
_

ただし、質問で提供されているコードスニペットでは機能しません。デフォルトセルのプロパティは、iTextがPdfPCellインスタンスを暗黙的に作成する必要がある場合にのみ使用されます(たとえば、Phraseをパラメーターとして渡すaddCell()メソッドを使用する場合) 。

@Brown_Dynamiteが提供するコードスニペットでは、PdfPCellオブジェクトが明示的に作成されます。つまり、これらの各セルの境界線を_NO_BORDER_に設定する必要があります。

通常、セルを作成するファクトリクラスを作成します。そうすれば、テーブルを作成するクラスのコードの量を大幅に減らすことができます。

67
Bruno Lowagie

これはトリックを行う必要があります:

table.DefaultCell.Border = Rectangle.NO_BORDER; 

または

table.borderwidth= 0;
9
Martijn van Put

まず、すべてのセルの境界線を0に設定し、すべてのセルをテーブルに割り当てた後、pdfptableの外側の境界線のみに次のコードを使用できます。

        PdfPCell cell = new PdfPCell();
        cell.AddElement(t);
        cell.BorderWidthBottom=1f;
        cell.BorderWidthLeft=1f;
        cell.BorderWidthTop=1f;
        cell.BorderWidthRight = 1f;
        PdfPTable t1 = new PdfPTable(1);
        t1.AddCell(cell);

ここで、1つのセルにテーブルを追加して境界線を設定し、そのセルを別のテーブルに再度追加して、要件に従って使用できます。

8
Jom George

PdfPTableが別のPdfPTable内にネストされている場合、ネストされたテーブルにはテーブルの境界線が表示されます。テーブルの境界線を取り除く唯一の方法は、ネストされたPdfPTableをメインのPdfPTableのPdfPCellに入れ、そのセルの境界線の幅を0に設定することです。

iTextSharp.text.pdf.PdfPTable table = new iTextSharp.text.pdf.PdfPTable(1); //<-- Main table
table.TotalWidth = 540f;
table.LockedWidth = true;
float[] widths = new float[] { 540f };
table.SetWidths(widths);
table.HorizontalAlignment = 1; //0=Left, 1=Centre, 2=Right
table.SpacingAfter = 10;

PdfPTable bodyTable = new PdfPTable(1); //<--Nested Table
bodyTable.TotalWidth = 540f;
bodyTable.LockedWidth = true;
float[] bodyWidths = new float[] { 540f };
bodyTable.SetWidths(bodyWidths);
bodyTable.HorizontalAlignment = 0;
bodyTable.SpacingAfter = 10;
bodyTable.DefaultCell.Border = iTextSharp.text.Rectangle.NO_BORDER;

var para1 = new Paragraph("This is a long paragraph", blackNormal);
para1.SetLeading(3f, 1f);
PdfPCell bodyCell1 = new PdfPCell();
bodyCell1.AddElement(para1);
bodyCell1.Border = 0;
bodyTable.AddCell(bodyCell1);

iTextSharp.text.pdf.PdfPCell cellBody = new iTextSharp.text.pdf.PdfPCell(bodyTable);
cellBody.BorderWidth = 0; //<--- This is what sets the border for the nested table
table.AddCell(cellBody);

これを理解するのに長い時間がかかりました。それは今私のために働いています。

4
David Lee
PdfPTable table = new PdfPTable(4);
table.TotalWidth = 400f;
table.LockedWidth = true;
PdfPCell header = new PdfPCell(new Phrase("Header"));
header.Colspan = 4;
table.AddCell(header);
table.AddCell("Cell 1");
table.AddCell("Cell 2");
table.AddCell("Cell 3");
table.AddCell("Cell 4");
PdfPTable nested = new PdfPTable(1);
nested.AddCell("Nested Row 1");
nested.AddCell("Nested Row 2");
nested.AddCell("Nested Row 3");
PdfPCell nesthousing = new PdfPCell(nested);
nesthousing.Padding = 0f;
table.AddCell(nesthousing);
PdfPCell bottom = new PdfPCell(new Phrase("bottom"));
bottom.Colspan = 3;
table.AddCell(bottom);
doc.Add(table);

PdfPTable table = new PdfPTable(3);
table.TotalWidth = 144f;
table.LockedWidth = true;
table.HorizontalAlignment = 0;
PdfPCell left = new PdfPCell(new Paragraph("Rotated"));
left.Rotation = 90;
table.AddCell(left);
PdfPCell middle = new PdfPCell(new Paragraph("Rotated"));
middle.Rotation = -90;
table.AddCell(middle);
table.AddCell("Not Rotated");
doc.Add(table);

チェック このリンク pls

3

このコードを試してください

 yourtable.DefaultCell.Border = 0;
0
farhan farhan