我正在接触更大的开发者社区,寻求帮助以了解真正的原因并可能找到解决办法。我问过Aspose的问题,他们也在他们的系统中跟踪了这个问题(PDFNET-42880)。我认为他们不会很快调查这个,因为它是非常具体的情况。现在我在这里发帖,询问有关的更多细节:
Adobe'另存为'与福昕阅读器'有什么不同除了'与Windows阅读器'另存为'功能?
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标记,使用Adobe Reader DC(或Adobe Acrobat XI)打开,填写,保存为新文件。现在这个新文件很好,但是当我尝试使用Aspose删除邮票时(稍后用新邮票替换),这就是事情变得有趣的地方。
我测试过的文件:https://1drv.ms/f/s!Auvpijam7a73iDzOqc6wZPuY9l81
用于删除图章的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 );
}
使用Adobe:删除邮票的过程正常,但尝试打开文件最终会导致文件出现问题。
“此页面上存在错误.Acrobat可能无法正确显示页面。请与创建PDF文档的人员联系以解决问题。”
编辑:经过测试更多,只是打开文件到Aspose,并保存它没有修改,没有破坏文件,只有一旦使用Aspose方法删除了图章,它就被打破了。
使用Foxit:这个过程的唯一区别就是将文件打开到Foxit Reader并在那里保存表单。邮票被删除,文件很好,适用于任何PDF阅读器。
使用Windows(10)阅读器:仅在此过程中的区别是将文件打开到Windows阅读器并从那里保存。邮票被删除,文件很好,适用于任何PDF阅读器。
答案 0 :(得分:1)
好的 - 你所指的不是印章注释。它是一个被吸引到页面内容中的XObject。为什么Aspose将它称为邮票是......嗯......一个谜。当您删除&#34;标记&#34; (不是标记)Aspose似乎是从页面内容流中移除XObject但而非绘制它的说明 ...这就是为什么您在Acrobat中收到错误的原因。其他应用程序更容易使用不良PDF,我的猜测是当他们写出文件时,他们正在删除对不存在的对象的引用。您可以通过选择“另存为优化的PDF”使Acrobat尝试修复此类问题。但是,除了XObject之外,最好还是删除绘图指令。
由于您创建文件的方式并添加了&#34;标记&#34;,您的网页内容流是一组流。删除数组中的最后一项,这是绘制XObject的指令,您的文件将在所有查看器中正常运行。注意:内容数组中的最后一项将永远不会是您的标记。只是你的邮票是最后一个被绘制的东西,所以它最终会被删除。
如果您的目的是&#34;替换&#34; &#34;戳&#34;,你想要通过删除现在正在做的XObject,然后删除指令,然后添加新的&#34;戳&#34;来实现。