如何在不创建新PDF的情况下更新PDF?

我需要用另一个单词替换现有PDF AcroField中的一个单词。我正在使用iTEXTSHARP的PDFStamper做同样的事情,并且工作正常。但是,这样做需要创建一个新的PDF,我希望所做的更改能够反映在现有PDF本身中。如果我将目标文件名设置为与原始文件名相同,则不会反映任何更改。我是iTextSharp的新手,我在做错什么吗?请帮助..我正在提供我正在使用的代码段


  private void ListFieldNames(string s)

    {

        try

        {

            string pdfTemplate = @"z:\TEMP\PDF\PassportApplicationForm_Main_English_V1.0.pdf";

            string newFile = @"z:\TEMP\PDF\PassportApplicationForm_Main_English_V1.0.pdf";

            PdfReader pdfReader = new PdfReader(pdfTemplate);


            for (int page = 1; page <= pdfReader.NumberOfPages; page++)

            {

                PdfReader reader = new PdfReader((string)pdfTemplate);

                using (PdfStamper stamper = new PdfStamper(reader, new FileStream(newFile, FileMode.Create, FileAccess.ReadWrite)))

                {

                    AcroFields form = stamper.AcroFields;

                    var fieldKeys = form.Fields.Keys;

                    foreach (string fieldKey in fieldKeys)

                    {

                        //Replace Address Form field with my custom data

                        if (fieldKey.Contains("Address"))

                        {

                            form.SetField(fieldKey, s);

                        }    

                    }

                    stamper.FormFlattening = true;

                    stamper.Close();


                }


            }

        }



HUH函数
浏览 340回答 2
2回答

慕容708150

如我的《iText in Action》一书中所述,您不能同时读取和写入文件。想一想Word的工作原理:您无法打开Word文档并直接对其进行写入。Word总是创建一个临时文件,将更改写入其中,然后用它替换原始文件,然后丢弃该临时文件。你也能做到:阅读与原来的文件PdfReader,为创建一个临时文件PdfStamper,完成后,用临时文件替换原始文件。要么:将原始文件读入byte[],创建PdfReader与此byte[],和将原始文件的路径用于PdfStamper。第二种选择更为危险,因为如果您执行某些操作会导致中的异常,则您将丢失原始文件PdfStamper。

翻翻过去那场雪

我遵循了您的第一种方法,并使用压模创建了一个临时文件,该文件后来用于替换原始文件。但是,由于PDF是从SDL Tridion发布并存储在Tridion文件系统中的,因此我们无法对原始文件进行任何更改-编辑/删除它。Evrytime我尝试删除原始错误,并给出以下错误:e:\ Web \ Compliance \ NonPCI \ SDL \ wwwroot \ xyzrights \ updatePdf.aspx:line 150访问路径'E:\ Web \ Compliance \ NonPCI \ SDL \ wwwroot \ xyzrights \ Images \ ListPrograming_Part1_AcroForm.pdf'被拒绝。请帮助.
打开App,查看更多内容
随时随地看视频慕课网APP