如何使用iTextSharp写入pdf文档

时间:2012-05-23 09:29:16

标签: .net itextsharp

我想在提供的X,Y位置将现有pdf插入给定文本。

我正在使用iTextSharp(4.1.6.0)

我接受位置(插入文本)和要插入的值,在 datagridview 控件中,仅当指定的位置具有插入时,文本才会插入到指定的位置没有图像。

内容未插入输入pdf中包含图像的位置。

是否有任何不同的方法可以将文本添加到现有的pdf中,以便在指定的位置插入文本,而不管图像是否存在。

请在下面找到我的代码:

for (int i = 0; i < reader.NumberOfPages; i++)
        {
            document.NewPage();

            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                gridColumn = Convert.ToInt32(row.Cells[2].Value);
                if (gridColumn == i + 1)
                {
                    //document.NewPage();
                    BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
                    cb.SetColorFill(iTextSharp.text.Color.BLACK);
                    cb.SetFontAndSize(bf, 8);

                    text = "" + row.Cells[3].Value;
                    cb.BeginText();
                    cb.ShowTextAligned(2, text, Convert.ToSingle(row.Cells[0].Value), Convert.ToSingle(row.Cells[1].Value), 0);
                    cb.EndText();

                    page = writer.GetImportedPage(reader, Convert.ToInt32(row.Cells[2].Value));

                    cb.AddTemplate(page, 0, 0);


                }
                else
                {
                    page = writer.GetImportedPage(reader, i + 1);
                    cb.AddTemplate(page, 0, 0);

                }

           }//end foreach

      }//end for i

1 个答案:

答案 0 :(得分:1)

我通过使用PdfContentByte的SetTextRenderingMode(PdfContentByte.TEXT_RENDER_MODE_FILL)解决了这个问题。
   我在PDF上插入自己的文本时使用了writer.DirectContent,否则我使用了writer.DirectContentUnder

在下面找到我修改过的代码:

for (int i = 0; i < reader.NumberOfPages; i++)
{
     document.NewPage();
     log.Debug("Creating new page in the document..");
     bool wasPageImported = false;

     foreach (DataGridViewRow row in dataGridView1.Rows)
     {
           gridColumn = Convert.ToInt32(row.Cells[2].Value);
           if (gridColumn == i + 1)
           {
               //DirectContent for writing text to PDF
                PdfContentByte cb = writer.DirectContent;

                if (!wasPageImported)
               {
                    page = writer.GetImportedPage(reader,       Convert.ToInt32(row.Cells[2].Value));
                    cb.AddTemplate(page, 0, 0);
                    wasPageImported = true;
                }
                    BaseFont bf = BaseFont.CreateFont(BaseFont.COURIER, BaseFont.CP1250, BaseFont.NOT_EMBEDDED);
             //The text rendering mode causes entered text to appear above backround
                                 cb.SetTextRenderingMode(PdfContentByte.TEXT_RENDER_MODE_FILL);

               cb.SetColorFill(iTextSharp.text.Color.BLACK);
               int fontSize = -1;
               if (row.Cells[4].Value.ToString() == "" || row.Cells[4].Value == null)
               {
                   fontSize = 12;
               }
               else
              {
                   fontSize = Convert.ToInt32(row.Cells[4].Value);
               }

               cb.SetFontAndSize(bf, fontSize);

               text = "" + row.Cells[3].Value;
               cb.BeginText();
               cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, text, Convert.ToSingle(row.Cells[0].Value), Convert.ToSingle(row.Cells[1].Value), 0);
               cb.EndText();

         }
        else
       {
            //DirectContentUnder if not writing any text to PDF
              PdfContentByte cb = writer.DirectContentUnder;
              page = writer.GetImportedPage(reader, i + 1);
              cb.AddTemplate(page, 0, 0);
        }

 }//end foreach

}//end for int i