PdfArray.remove()未删除所有注释

时间:2016-04-19 19:07:19

标签: c# pdf itextsharp itext

我想从PDF中删除所有注释。我正在使用此代码:

void removeAnnotations(string inputPath,string outputPath)
        {
            PdfReader pdfReader = new PdfReader(inputPath);
            PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(outputPath, FileMode.Create));
            PdfDictionary pageDict = pdfReader.GetPageN(1);
            PdfArray annotArray = pageDict.GetAsArray(PdfName.ANNOTS);
            for (int i = 0; i < annotArray.Size; i++)
            {
                annotArray.Remove(i);   
            }
            pdfStamper.Close();
        }

当我第一次创建annotArray时,它有217个项目。在annotArray.Remove()的for循环之后,它有108个项目,我仍然可以在outputPath生成的PDF上看到一些标注和行。我不清楚剩下的项目有什么共同点,以及annotArray.Remove()跳过它们的原因。如何删除每个注释?

3 个答案:

答案 0 :(得分:4)

假设数组中有10个元素:

array = [a, b, c, d, e, f, g, h, i, j]

然后循环遍历数组:

for (int i = 0; i < array.Size; i++)
{
    array.Remove(i);   
}

然后这是一步一步发生的事情:

第0步

删除元素0。 结果:[b, c, d, e, f, g, h, i, j]

第1步

删除元素1。 结果:[b, d, e, f, g, h, i, j]

第2步

删除元素2。 结果:[b, d, f, g, h, i, j]

第3步

删除元素3。 结果:[b, d, f, h, i, j]

第4步

删除元素4。 结果:[b, d, f, h, j]

第5步

删除元素5.没有元素5,所以没有什么可以删除。结果:[b, d, f, h, j]

第6至9步

删除元素6到9.没有元素6到9,所以没有什么可以删除。结果:[b, d, f, h, j]

虽然我的数组只计算10个元素而你的数量只计算128个,但原理是相同的:由于代码中的逻辑错误,你不能删除所有注释。另一种类型的数组会抛出一个数组超出范围的异常,但是PdfArray没有做到这一点,因为它更容忍不完整数组的错误PDF。

您可以像这样修复代码:

int n = annotArray.Size;
for (int i = 0; i < n; i++)
{
    annotArray.Remove(0);   
}

或者,正如您自己发现的那样,您可以立即删除所有注释:

pdfReader.RemoveAnnotations();

答案 1 :(得分:1)

删除所有注释相当容易:

In [32]: df.loc[df.Diff < 0, 'Diff'] = 365 + df.Day - df.shift().loc[df.Diff < 0, 'Day']

In [33]: df
Out[33]:
   Day   Diff
0  137    0.0
1  185   48.0
2  249   64.0
3  139  255.0

答案 2 :(得分:0)

免责声明:我没有使用过itextSharp。我很好奇为什么它不应该删除。虽然代码看起来还不错。我用Google搜索并发现了一些您可能感兴趣的内容。希望它有所帮助。

  

您无法使用“删除”注释删除注释   iTextSharp的。您必须根据原始和方式创建新的PDF   这样做是用PDFReader打开原文,使用RemoveAt来摆脱   在内存中不需要的注释,然后使用PDFstamper或PDFcopy   根据剩下的内容制作新的PDF。

Remove Annotation from PDF

Remove Annotation using PDF Object Number

Remove hyperlinks from a PDF document (iTextSharp)

How do I remove link annotations from a PDF using iText?