Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Itext Sharp将PDF与acrofields合并_C#_Asp.net Mvc_Pdf_Itextsharp_Itext - Fatal编程技术网

C# Itext Sharp将PDF与acrofields合并

C# Itext Sharp将PDF与acrofields合并,c#,asp.net-mvc,pdf,itextsharp,itext,C#,Asp.net Mvc,Pdf,Itextsharp,Itext,我正在使用itext sharp用值填充模板上的表单字段 我使用 这是我用来将值放入pdf模板的代码 private static byte[] GeneratePdf(Dictionary<String, String> formKeys, String pdfPath) { var templatePath = System.Web.HttpContext.Current.Server.MapPath(pdfPath); var read

我正在使用itext sharp用值填充模板上的表单字段

我使用

这是我用来将值放入pdf模板的代码

 private static byte[] GeneratePdf(Dictionary<String, String> formKeys, String pdfPath)
    {
        var templatePath = System.Web.HttpContext.Current.Server.MapPath(pdfPath);
        var reader = new PdfReader(templatePath);
        var outStream = new MemoryStream();
        var stamper = new PdfStamper(reader, outStream);

        var form = stamper.AcroFields;
        var fieldKeys = form.Fields.Keys;

        // "Flatten" the form so it wont be editable/usable anymore  
      //  stamper.FormFlattening = true;

        foreach (KeyValuePair<String, String> pair in formKeys)
        {
            if (fieldKeys.Any(f => f == pair.Key))
            {
                form.SetField(pair.Key, pair.Value);
                form.SetFieldProperty(pair.Key, "setfflags", PdfFormField.FF_READ_ONLY, null);
            }
        }
        stamper.Close();
        reader.Close();

        return outStream.ToArray();
    }

我仍然得到相同的结果

多亏了

我所要做的就是通过添加一行来修改GeneratePdf函数:

form.GenerateAppearances = true;
以下是最终结果:

private static byte[] GeneratePdf(Dictionary<String, String> formKeys, String pdfPath)
    {
        var templatePath = System.Web.HttpContext.Current.Server.MapPath(pdfPath);
        var reader = new PdfReader(templatePath);
        var outStream = new MemoryStream();
        var stamper = new PdfStamper(reader, outStream);

        var form = stamper.AcroFields;
        form.GenerateAppearances = true; //Added this line, fixed my problem
        var fieldKeys = form.Fields.Keys;

        foreach (KeyValuePair<String, String> pair in formKeys)
        {
            if (fieldKeys.Any(f => f == pair.Key))
            {
                form.SetField(pair.Key, pair.Value);
            }
        }
        stamper.Close();
        reader.Close();

        return flattenPdf(outStream.ToArray());
    }
private static byte[]GeneratePdf(字典formKeys,字符串pdfPath)
{
var templatePath=System.Web.HttpContext.Current.Server.MapPath(pdfPath);
var reader=新的PdfReader(templatePath);
var outStream=新内存流();
var压模=新PdfStamper(读卡器,分流);
var form=stamper.AcroFields;
form.generateApearances=true;//添加了此行,修复了我的问题
var fieldKeys=form.Fields.Keys;
foreach(formKeys中的KeyValuePair对)
{
if(fieldkey.Any(f=>f==pair.Key))
{
form.SetField(pair.Key,pair.Value);
}
}
压模关闭();
reader.Close();
返回平面PDF(outStream.ToArray());
}

pdf与我的问题中的相同。

现在我想使用-该代码丢弃所有表单元素来合并多个pdf文件。最好使用iTextSharp通过iText合并示例。我不知道为什么我的字段在展平时不可见,即使我不使用合并。-在单独的过程中进行表单填充和展平,即第一次读取、填充表单元素、写入、再次读取、展平、写入。@mkl,谢谢,我将尝试一下,看看是否可以works@mkl,我将我的代码添加到我的问题中,我使用这些代码首先编写、关闭、重新打开和展开。Ok。因此,它是那些
/true
文件之一。哦,好吧。
private static byte[] GeneratePdf(Dictionary<String, String> formKeys, String pdfPath)
    {
        var templatePath = System.Web.HttpContext.Current.Server.MapPath(pdfPath);
        var reader = new PdfReader(templatePath);
        var outStream = new MemoryStream();
        var stamper = new PdfStamper(reader, outStream);

        var form = stamper.AcroFields;
        form.GenerateAppearances = true; //Added this line, fixed my problem
        var fieldKeys = form.Fields.Keys;

        foreach (KeyValuePair<String, String> pair in formKeys)
        {
            if (fieldKeys.Any(f => f == pair.Key))
            {
                form.SetField(pair.Key, pair.Value);
            }
        }
        stamper.Close();
        reader.Close();

        return flattenPdf(outStream.ToArray());
    }