0

我想在提供的 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
4

1 回答 1

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
于 2012-06-14T10:14:21.343 回答