2016-04-06 10 views
0

對不起,我的英語, 我有創建文檔的代碼。在第一個三分之一位於矩形文本,表示標題。 我的代碼:帶文本,矩形和表格的Itextpdf文檔

private void createGPDFbutton_Click(object sender, EventArgs e) 
    { 
     string PDFcesta = AppDomain.CurrentDomain.BaseDirectory; 
     Document gdoc = new Document(iTextSharp.text.PageSize.A4, 42, 10, 42, 35); 
     //***** definice fontů ***** 
     //Nastavení fontu, aby to tisklo řádně česky 
     string ARIALUNI_TFF = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "ARIALUNI.TTF"); 
     string CONSOLA_TTF = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "consola.ttf"); 
     string COUR_TTF = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "cour.ttf"); 
     string COURBD_TTF = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "courbd.ttf"); // courier tučné 
     string TIMES_TTF = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "times.ttf"); 
     string TIMESBD_TTF = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "timesbd.ttf"); // courier tučné 
     //Create a base font object making sure to specify IDENTITY-H 
     BaseFont BF_ARIAL = BaseFont.CreateFont(ARIALUNI_TFF, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); 
     BaseFont BF_CONSOLAS = BaseFont.CreateFont(CONSOLA_TTF, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); 
     BaseFont BF_COURIER = BaseFont.CreateFont(COUR_TTF, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); 
     BaseFont BF_COURIER_BOLD = BaseFont.CreateFont(COURBD_TTF, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); 
     BaseFont BF_TIMES = BaseFont.CreateFont(TIMES_TTF, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); 
     BaseFont BF_TIMES_BOLD = BaseFont.CreateFont(TIMESBD_TTF, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); 
     //Create a specific font object 
     iTextSharp.text.Font f = new iTextSharp.text.Font(BF_ARIAL, 12, iTextSharp.text.Font.NORMAL); 
     iTextSharp.text.Font f1 = new iTextSharp.text.Font(BF_CONSOLAS, 10, iTextSharp.text.Font.NORMAL); 
     //***** konec fontů ***** 
     try 
     { 
      PdfWriter gwriter = PdfWriter.GetInstance(gdoc, new FileStream(PDFcesta + "graphicsPDF.pdf", FileMode.Create)); 
      gdoc.Open(); 
      PdfContentByte cb = gwriter.DirectContent; 
      cb.SaveState(); // uložení aktuálního nastavení grafiky 
      cb.SetColorStroke(new BaseColor(0,0,0)); 
      cb.SetColorFill(new BaseColor(255,192,203)); 
      cb.SetLineWidth(1.5f); 
      // Bottom left coordinates x & y, followed by width, height and radius of corners. 
      cb.RoundRectangle(48f, 600f, 495.833f, 192.4f, 5f); 
      cb.FillStroke(); 
      cb.SetLineWidth(0.5f); 
      cb.Rectangle((gdoc.PageSize.Width/2) - 35f, 630f,70f,10f); 
      cb.Stroke(); 
      cb.Rectangle((gdoc.PageSize.Width/2) - 35f, 640f, 70f, 10f); 
      cb.Stroke(); 
      //zápis textu 
      cb.BeginText(); 
      cb.SetColorFill(BaseColor.BLACK); 
      cb.SetFontAndSize(BF_TIMES_BOLD, 15f); 
      cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "VÝKAZ", gdoc.PageSize.Width/2, 753f, 0); 
      cb.SetFontAndSize(BF_TIMES_BOLD, 15f); 
      cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "ZISKU A ZTRÁTY", gdoc.PageSize.Width/2, 733f, 0); 
      cb.SetFontAndSize(BF_TIMES_BOLD, 5f); 
      cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "v plném rozsahu", gdoc.PageSize.Width/2, 713f, 0); 
      cb.SetFontAndSize(BF_TIMES_BOLD, 12f); 
      cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "31.12.2015", gdoc.PageSize.Width/2, 683f, 0); 
      cb.SetFontAndSize(BF_TIMES_BOLD, 7f); 
      cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "v tisících Kč", gdoc.PageSize.Width/2, 663f, 0); 
      cb.SetFontAndSize(BF_TIMES, 5f); 
      cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "IČO", gdoc.PageSize.Width/2, 643f, 0); 
      cb.SetFontAndSize(BF_TIMES_BOLD, 5f); 
      cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "00020711", gdoc.PageSize.Width/2, 633f, 0); 
      cb.EndText(); 
      //konec textu 
      cb.RestoreState(); // obnovení původního nastavení grafiky 
      // tabulka 


      // konec tabulky 
      gdoc.Close(); 
      System.Diagnostics.Process.Start(PDFcesta + "graphicsPDF.pdf"); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 


    } 

我需要這個矩形後插入的表格。 評論內容

// tabulka 

// konec tabulky 

如何解決這個問題?

+0

是不是有一個原因,你是在絕對位置添加所有文本,而不是使用'document.add()'或'ColumnText'?你的代碼看起來比需要的更復雜。 –

回答

0

您在絕對位置添加了很多文本行。您的最後一行文本添加在位置Y = 633.您現在想要在位於最後一行位置下方的絕對位置添加一個表格,例如位置X = 36,Y = 620。您希望表格居中,所以表格的寬度將是523;這是gdoc.PageSize.Width - 36(左邊距) - 36(右邊距)。

如何在官方文檔中對此進行說明。例如,請參閱問題How to add a table to the bottom of the last page?的回答(請瀏覽文檔並進行一些搜索,例如WriteSelectedRows() method)。

如果您已經創建了一個名爲PdfPTabletable,你需要這樣的事:

table.TotalWidth = 523; 
float y = table.writeSelectedRows(0, -1, 36, 620, writer.DirectContent); 

y值將是表的底部的位置。