tk2*_*013 2 asp.net itextsharp tridion tridion-2011 tridion-core-services
我需要用另一个单词替换现有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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如我的iText in Action一书中所述,您无法同时读取文件并写入文件.想想Word是如何工作的:您无法打开Word文档并直接写入它.Word始终创建一个临时文件,将更改写入它,然后用它替换原始文件,然后丢弃临时文件.
你也能做到:
PdfReader,PdfStamper,当你完成后,要么:
byte[],PdfReader用这个来创造byte[],和PdfStamper.第二个选项更危险,因为如果您执行导致异常的操作,您将丢失原始文件PdfStamper.
| 归档时间: |
|
| 查看次数: |
3391 次 |
| 最近记录: |