如何使用带有C#的iTextSharp编辑PDF文件中的命名目标?

时间:2014-08-04 09:17:07

标签: c# itextsharp itext

在这里,我想使用带有iTextSharp.dll的C#编辑PDF文件中已存在的命名目标。

这里我展示的是PS脚本示例。

OLD:

[/Dest /bmkaff1 /View [/FitR 59 516 435 504] /DEST pdfmark

更新

[/Dest /bmkaff1 /View [/XYZ 59 516 0] /DEST pdfmark

PDF字典截图:

enter image description here

原始PDF文件

enter image description here

更新了PDF文件

enter image description here

注意:

通过更新PS文件生成更新的PDF文件

1 个答案:

答案 0 :(得分:2)

我的问题得到了解决方案。

首先,我使用GetNamedDestination()方法读取namded destionation,然后检查条件,然后编辑指定的目标值。

这是我的C#代码:

string pdfFilePath = @"D:\Raja\Testing\AuthorQuery\xxx.pdf";
string dPDFFile = @"D:\Raja\Testing\AuthorQuery\YYY.pdf";

PdfReader pdfR = new PdfReader(pdfFilePath);
Dictionary<object, PdfObject> nDest = new Dictionary<object, PdfObject>();

nDest = pdfR.GetNamedDestination();

List<object> nDesColl = new List<object>();

nDesColl.Clear();

foreach (KeyValuePair<object, PdfObject> sEntry in nDest)
{
    PdfArray pArr = (PdfArray)sEntry.Value;
    if(pArr.ArrayList.Count== 6)
    {
        if (pArr[1].ToString() == "/FitR")
        {
nDesColl.Add(sEntry.Key);
        }
    }
}

if (nDesColl.Count > 0)
{
    foreach (object keyVal in nDesColl)
    {
        PdfNumber pNo = new PdfNumber(0);
        PdfArray pArr = (PdfArray)nDest[keyVal];
        pArr[1] = PdfName.XYZ;
        pArr[4] = (PdfObject)pNo;
        pArr.ArrayList.RemoveAt(5);
        PdfObject fVal = (PdfObject)pArr;
        nDest[keyVal] = fVal;
    }
}

using (PdfStamper stamper = new PdfStamper(pdfR, new FileStream(dPDFFile, FileMode.Create)))
{
}