>

내가 여기에 코드를해야합니까 나는 오류 메시지를 받고 계속 : 문서가 어떤 페이지가 없습니다. 또한 테이블 너비와 구를 설정했지만 여전히 오류 메시지가 발생했습니다. 나는 지금 완전히 나왔지만 다른 경우를 검색하려고 시도했지만 테이블 너비를 설정할 때 문제를 해결하려고했습니다. 내가 놓친 것이 있습니까? 도움을 주시면 감사하겠습니다. 감사합니다!

private void printPDF(object sender, EventArgs e)
    {            
            Document docu = new Document(PageSize.LETTER);
            PdfWriter writer = PdfWriter.GetInstance(docu, new FileStream("C:\\Report\\" + empno + ".pdf", FileMode.Create));
            Phrase phrase = null;
            PdfPCell cell = null;
            PdfPTable table = null;
            BaseColor color = null;
            docu.Open();
            //Header Table
            table = new PdfPTable(2);
            table.TotalWidth = 500f;
            table.LockedWidth = true;
            table.SetWidths(new float[] { 0.3f, 0.7f });
            //Company Name and Address
            phrase = new Phrase();
            phrase.Add(new Chunk("Company Name\n\n", FontFactory.GetFont("Arial", 16, iTextSharp.text.Font.BOLD, BaseColor.ORANGE)));
            phrase.Add(new Chunk("Company Address", FontFactory.GetFont("Arial", 8, iTextSharp.text.Font.NORMAL, BaseColor.BLACK)));
            cell = PhraseCell(phrase, PdfPCell.ALIGN_LEFT);
            cell.VerticalAlignment = PdfPCell.ALIGN_TOP;
            table.AddCell(cell);
            docu.Add(table);
            docu.Close();
    }
private static PdfPCell PhraseCell(Phrase phrase, int align)
    {
        PdfPCell cell = new PdfPCell(phrase);
        cell.BorderColor = BaseColor.WHITE;
        cell.VerticalAlignment = PdfPCell.ALIGN_TOP;
        cell.HorizontalAlignment = align;
        cell.PaddingBottom = 2f;
        cell.PaddingTop = 0f;
        return cell;
    }


  • 답변 # 1

    나는 간단히 살펴 있었다 당신이 table = new PdfPTable(2); 지정된대로 그런 말 것  행당 2 개의 셀이 표에 표시되지만첫 번째 행에 하나의 셀만 제공 한 것입니다. 하나의 셀만 제공 했으므로 테이블 정의가 완료되지 않았으므로 렌더링 할 행이 없습니다.

    이제 코드를 변경하고 2 개의 셀을 제공하면

    phrase = new Phrase();
    phrase.Add(new Chunk("Company Name\n\n", FontFactory.GetFont("Arial", 16, iTextSharp.text.Font.BOLD, BaseColor.ORANGE)));
    phrase.Add(new Chunk("Company Address", FontFactory.GetFont("Arial", 8, iTextSharp.text.Font.NORMAL, BaseColor.BLACK)));
    cell = PhraseCell(phrase, PdfPCell.ALIGN_LEFT);
    cell.VerticalAlignment = PdfPCell.ALIGN_TOP;
    table.AddCell(cell);
    //yes this is just duplicating content but proves the point
    cell = PhraseCell(phrase, PdfPCell.ALIGN_LEFT);
    cell.VerticalAlignment = PdfPCell.ALIGN_TOP;
    table.AddCell(cell);
    
    docu.Add(table);
    docu.Close();
    
    

    이제 두 개의 셀이 있고 테이블 정의를 완료 할 수 있으므로 제대로 작동합니다. 3 개의 셀을 추가하려고하면 테이블 정의를 완료하지 않아 3 번째 셀이 렌더링되지 않습니다.

    테이블에 셀을 추가 할 때 셀을 테이블에 가로로 추가하면 테이블이 열 정의에 따라 행으로 렌더링됩니다. 즉, 2 열 테이블에서 세포는

    cell 1    | Row 1 Cell 1 
    cell 2    | Row 1 Cell 2
    cell 3    | Row 2 Cell 1
    cell 4    | Row 2 Cell 2
    
    

    이제이 진술

    table = new PdfPTable(2);
    table.TotalWidth = 500f;
    table.LockedWidth = true;
    table.SetWidths(new float[] { 0.3f, 0.7f });
    
    

    와 동일합니다 :

    table = new PdfPTable(new float[] { 0.3f, 0.7f });
    table.TotalWidth = 500f;
    table.LockedWidth = true;
    
    

    생성자에 2 개의 열 너비를 지정하면 테이블에 2 개의 열 사양이 지정됩니다.

    전체 예제로 아래 코드를 참조하십시오 :

    private void printPDF(object sender, EventArgs e)
    {
        string path = "D:\\Test\\" + Guid.NewGuid().ToString() + ".pdf";
        using (var fileStream = new FileStream(path, FileMode.Create))
        {
            Document docu = new Document(PageSize.LETTER);
            PdfWriter writer = PdfWriter.GetInstance(docu, fileStream);
            docu.Open();
            //Header Table
            var table = new PdfPTable(new float[] { 0.3f, 0.7f });
            table.TotalWidth = 500f;
            //company name
            var phrase = new Phrase("Company Name", FontFactory.GetFont("Arial", 16, iTextSharp.text.Font.BOLD, BaseColor.ORANGE));
            var cell = PhraseCell(phrase, PdfPCell.ALIGN_LEFT);
            table.AddCell(cell);
            phrase = new Phrase("My test company", FontFactory.GetFont("Arial", 16, iTextSharp.text.Font.BOLD, BaseColor.ORANGE));
            cell = PhraseCell(phrase, PdfPCell.ALIGN_LEFT);
            table.AddCell(cell);
            //company address
            phrase = new Phrase("Company Address", FontFactory.GetFont("Arial", 8, iTextSharp.text.Font.NORMAL, BaseColor.BLACK));
            cell = PhraseCell(phrase, PdfPCell.ALIGN_LEFT);
            table.AddCell(cell);
            phrase = new Phrase("123 Main Street, Your City.", FontFactory.GetFont("Arial", 8, iTextSharp.text.Font.NORMAL, BaseColor.BLACK));
            cell = PhraseCell(phrase, PdfPCell.ALIGN_LEFT);
            table.AddCell(cell);
            docu.Add(table);
            docu.Close();
            writer.Close();
        }
    }
    private static PdfPCell PhraseCell(Phrase phrase, int align)
    {
        PdfPCell cell = new PdfPCell(phrase);
        cell.BorderColor = BaseColor.WHITE;
        cell.VerticalAlignment = PdfPCell.ALIGN_TOP;
        cell.HorizontalAlignment = align;
        cell.PaddingBottom = 2f;
        cell.PaddingTop = 0f;
        return cell;
    }
    
    

  • 이전 이 간단한 C 프로그램이 왜 끊어 집니까?
  • 다음 작업 공간 삭제에서 Jenkins TFS 플러그인을 중지하는 방법