2

我正在与更大的开发人员社区联系,以寻求帮助以了解真正的原因并可能找到解决方法。我向 Aspose 提出了问题,他们还在他们的系统中跟踪了这个问题 (PDFNET-42880)。我认为他们不会很快对此进行调查,因为这是非常具体的情况。现在我在这里发布此消息以询问有关以下内容的更多详细信息:

  1. Adobe“另存为”与 Foxit Reader“另存为”与 Windows Reader“另存为”功能有何区别?

  2. Adobe 产品的问题并不那么明显。我什至不知道该问什么:D

链接到他们的(Aspose)旧论坛:https ://www.aspose.com/community/forums/thread/845549/removing-stamps-fails-after-saving-stamped-file-from-adobe-acrobat.aspx

案例: 使用 OpenOffice(版本 3.4.0)创建带有表单的 PDF,使用 Aspose PDF 标记,使用 Adob​​e Reader DC(或 Adob​​e Acrobat XI)打开,填充,保存为新文件。现在这个新文件很好,但是当我尝试使用 Aspose 删除图章(稍后用新图章替换)时,事情变得有趣了。

我测试过的文件:https ://1drv.ms/f/s!Auvpijam7a73iDzOqc6wZPuY9l81

  • Stamp_Location.png
  • OoPdfFormExample_WithStamp.pdf
  • OoPdfFormExample_WithStamp_StampRemoved.pdf
  • OoPdfFormExample_WithStamp_SavedFromFoxit.pdf
  • OoPdfFormExample_WithStamp_SavedFromFoxit_StampRemoved.pdf
  • OoPdfFormExample_WithStamp_SavedFromWindowsReader.pdf
  • OoPdfFormExample_WithStamp_SavedFromWindowsReader_StampRemoved.pdf
  • OoPdfFormExample_WithStamp_SavedFromAdobeReader.pdf
  • OoPdfFormExample_WithStamp_SavedFromAcrobat_StampRemoved.pdf

用于删除标记的 C# 代码:

/// <summary>
/// Removes stamps from PDF file.
/// </summary>
/// <param name="pdfFile"></param>
private static void RemoveStamps( string pdfFile )
{
    // Create PDF content editor.
    Aspose.Pdf.Facades.PdfContentEditor contentEditor = new Aspose.Pdf.Facades.PdfContentEditor();

    // Open the temp file.
    contentEditor.BindPdf( pdfFile );

    // Process all pages.
    foreach ( Page page in contentEditor.Document.Pages )
    {
        // Get the stamp infos.
        Aspose.Pdf.Facades.StampInfo[] stampInfos = contentEditor.GetStamps( page.Number );

        //Process all stamp infos
        foreach ( Aspose.Pdf.Facades.StampInfo stampInfo in stampInfos )
        {
            // Use try catch so we can output possible error w/out break point.
            try
            {
                contentEditor.DeleteStampById( stampInfo.StampId );
            }
            catch ( Exception e )
            {
                Console.WriteLine( e );
            }
        }
    }

    // Save changes to the temp file.
    contentEditor.Save( StampRemovedPdfFile );
}

使用 Adob​​e:删除图章的过程可以正常工作,但尝试打开文件最终会遇到文件问题。

“此页面存在错误。Acrobat 可能无法正确显示该页面。请与创建 PDF 文档的人员联系以更正问题。”

编辑:在进行更多测试之后,只需将文件打开到 Aspose,并在不修改的情况下保存它,这并没有破坏文件,只有在使用 Aspose 方法删除印章后,它才会被破坏。

使用 Foxit:唯一的区别是打开文件到 Foxit Reader 并在那里保存表格。印章被删除,文件很好,适用于任何 PDF 阅读器。

使用 Windows (10) Reader:唯一的区别是打开文件到 Windows Reader 并从那里保存。印章被删除,文件很好,适用于任何 PDF 阅读器。

4

1 回答 1

1

好的-您指的不是邮票注释。它是一个被绘制到页面内容中的 XObject。为什么 Aspose 将其称为邮票是……嗯……一个谜。当您删除“邮票”(不是邮票)时,Aspose 似乎正在删除 XObject,而不是从页面内容流中绘制它的说明......这就是您在 Acrobat 中收到错误的原因。其他应用程序对错误的 PDF 更宽容,我的猜测是当他们写出文件时,他们正在删除对不存在对象的引用。您可以通过选择“另存为优化的 PDF”让 Acrobat 尝试修复此类问题。但是,除了 XObject 之外,您最好删除绘图指令。

由于您创建文件并添加“标记”的方式,您的页面内容流是一个流数组。删除数组中的最后一项,即绘制 XObject 的指令,您的文件将在所有查看器中正常工作。注意:内容数组中的最后一项不一定是您的印章。只是你的印章是最后被绘制的,所以它在最后。

如果您的意图是“替换”“stamp”,您需要像现在一样删除 XObject,然后删除指令,然后添加新的“stamp”。

于 2017-07-06T22:16:01.253 回答