0

指定された X、Y の場所にある既存の PDF に、指定されたテキストを挿入したいと考えています。

私はそれにiTextSharp(4.1.6.0)を使用しています

指定された場所に画像がない場合にのみ、指定された位置にテキストが挿入されます

入力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 に答える