为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

HUH函数 2019-11-03 08:04:10
我需要用另一个单词替换现有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();                }            }        }
查看完整描述

2 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

如我的《iText in Action》一书中所述,您不能同时读取和写入文件。想一想Word的工作原理:您无法打开Word文档并直接对其进行写入。Word总是创建一个临时文件,将更改写入其中,然后用它替换原始文件,然后丢弃该临时文件。


你也能做到:


阅读与原来的文件PdfReader,

为创建一个临时文件PdfStamper,完成后,

用临时文件替换原始文件。

要么:


将原始文件读入byte[],

创建PdfReader与此byte[],和

将原始文件的路径用于PdfStamper。

第二种选择更为危险,因为如果您执行某些操作会导致中的异常,则您将丢失原始文件PdfStamper。



查看完整回答
反对 回复 2019-11-04
?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

我遵循了您的第一种方法,并使用压模创建了一个临时文件,该文件后来用于替换原始文件。但是,由于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'被拒绝。请帮助.

查看完整回答
反对 回复 2019-11-04
  • 2 回答
  • 0 关注
  • 339 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信