使用ITextSharp在PDF表单字段中的文本上写入图像

使用ITextSharp在PDF表单字段中的文本上写入图像,itextsharp,Itextsharp,当我试图在文本字段中写入图像时,图像被写在文本后面。它适用于普通文本和图像,但不适用于表单字段。我想把图像写在文字上,覆盖后面的文字 void OldMethod() { string path = @"C:\Users\"; string OutLocation = path + "New.pdf"; string Old = path + "Old.pdf"; PdfReader reader1 = new PdfReader(Old); us

当我试图在文本字段中写入图像时,图像被写在文本后面。它适用于普通文本和图像,但不适用于表单字段。我想把图像写在文字上,覆盖后面的文字

void OldMethod()
{
    string path = @"C:\Users\";

    string OutLocation = path + "New.pdf";

    string Old = path + "Old.pdf";

    PdfReader reader1 = new PdfReader(Old);

    using (FileStream fs = new FileStream(OutLocation, FileMode.Create, FileAccess.Write, FileShare.None))
    {
        using (PdfStamper stamper = new PdfStamper(reader1, fs))
        {
            int pageCount1 = reader1.NumberOfPages;

            //Create a new layer
            for (int i = 1; i <= pageCount1; i++)
            {
                iTextSharp.text.Rectangle rect = reader1.GetPageSize(i);     

                PdfContentByte cb = stamper.GetOverContent(i);

                AcroFields Fields = stamper.AcroFields;

                cb.SetFontAndSize(BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED), 50);       

                Fields.SetField("Price", @"1323423345");

                Fields.SetFieldProperty("Price", "TEXTCOLOR", BaseColor.RED, null);

                string Img = path + "red_slash.jpg";

                iTextSharp.text.Image jpeg = Image.GetInstance(System.Drawing.Image.FromFile(Img), ImageFormat.Jpeg);

                float width = 100;

                float height = 200;

                jpeg.ScaleToFit(width, height); 

                jpeg.SetAbsolutePosition(210, 315);

                cb.AddImage(jpeg);             
            }             
        }
    }
}
void OldMethod()
{
字符串路径=@“C:\Users\”;
字符串OutLocation=path+“New.pdf”;
字符串Old=path+“Old.pdf”;
PdfReader reader1=新PdfReader(旧);
使用(FileStream fs=newfilestream(OutLocation,FileMode.Create,FileAccess.Write,FileShare.None))
{
使用(PdfStamper压模=新PdfStamper(读取器1,fs))
{
int pageCount1=读取器1.NumberOfPages;
//创建一个新层

对于(int i=1;i您到目前为止尝试了什么??尝试时-请说明您做了什么以及在哪些方面不起作用。问题确实不清楚。它至少应该有一个简短的代码示例,因为没有人知道文本字段的性质。它是一个缩写字段吗?在这种情况下,添加到内容流的所有内容都将是coveRedby it:注释总是覆盖页面的内容(PDF规范中就是这样定义的)。现在我们看到了我同意@BrunoLowagie的代码,这是100%试图将内容“放在”注释前面,这是不可能的。请参见mkl的答案,这里有一些选项:嗨,Chris Haas。谢谢你的回答。这对我帮助很大