另存为新文件时,Adobe 会破坏标记的 PDF / Adobe 'save as' 与 Foxit Reader 'save as' 功能有何不同
Adobe breaks stamped PDF when saving as new file / what is difference in Adobe 'save as' vs. Foxit Reader 'save as' feature
我正在联系更大的开发人员社区寻求帮助,以了解真正的原因并可能找到修复方法。我向 Aspose 提出了问题,他们也在他们的系统中跟踪了问题 (PDFNET-42880)。我认为他们不会很快对此进行调查,因为这是非常具体的案例。现在我将此张贴在这里以询问有关以下内容的更多详细信息:
Adobe 'save as' vs. Foxit Reader 'save as' vs. Windows Reader 'save as' 有什么区别特征?
Adobe 产品的问题不太明显,无法解决。我什至不知道该问什么:D
Link 到他们的 (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
- 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 );
}
使用 Adobe: 删除图章的过程工作正常,但尝试打开文件最终会遇到文件问题。
"An error exists on this Page. Acrobat may not display the page correctly. Please contact the person who created the PDF document to correct the problem."
EDIT: After testing more, and just opening file to Aspose, and saving it without modifications, that didn't break the file, only once the stamp was removed with Aspose method it was broken.
使用 Foxit: 过程中唯一的区别是将文件打开到 Foxit Reader 并在那里保存表格。图章已移除,文件正常,适用于任何 PDF reader。
使用Windows (10) Reader: 唯一不同的是打开文件到Windows Reader 并从那里保存。图章已移除,文件正常,适用于任何 PDF reader。
好的 - 你指的不是邮票注释。它是一个被绘制到页面内容中的 XObject。为什么 Aspose 将其称为 Stamp 是……嗯……一个谜。当您删除 "stamp"(不是图章)时,Aspose 似乎正在删除 XObject,但不是从页面内容流中绘制它的说明...这就是您的原因在 Acrobat 中出现错误。其他应用程序对错误的 PDF 更宽容,我的猜测是当他们写出文件时,他们正在删除对不存在的对象的引用。您可以通过选择另存为优化的 PDF 让 Acrobat 尝试解决此类问题。但是,除了 XObject 之外,您最好删除绘图指令。
由于您创建文件和添加 "stamp" 的方式,您的页面内容流是一个流数组。删除数组中的最后一项,即绘制 XObject 的指令,您的文件将在所有查看器中正常工作。注意:内容数组中的最后一项并不总是您的图章。只是你的图章是最后画的,所以它在最后。
如果您打算 "replace" "stamp",您需要像现在一样删除 XObject,然后删除指令,然后添加新的 "stamp"。
我正在联系更大的开发人员社区寻求帮助,以了解真正的原因并可能找到修复方法。我向 Aspose 提出了问题,他们也在他们的系统中跟踪了问题 (PDFNET-42880)。我认为他们不会很快对此进行调查,因为这是非常具体的案例。现在我将此张贴在这里以询问有关以下内容的更多详细信息:
Adobe 'save as' vs. Foxit Reader 'save as' vs. Windows Reader 'save as' 有什么区别特征?
Adobe 产品的问题不太明显,无法解决。我什至不知道该问什么:D
Link 到他们的 (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
- 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 );
}
使用 Adobe: 删除图章的过程工作正常,但尝试打开文件最终会遇到文件问题。
"An error exists on this Page. Acrobat may not display the page correctly. Please contact the person who created the PDF document to correct the problem."
EDIT: After testing more, and just opening file to Aspose, and saving it without modifications, that didn't break the file, only once the stamp was removed with Aspose method it was broken.
使用 Foxit: 过程中唯一的区别是将文件打开到 Foxit Reader 并在那里保存表格。图章已移除,文件正常,适用于任何 PDF reader。
使用Windows (10) Reader: 唯一不同的是打开文件到Windows Reader 并从那里保存。图章已移除,文件正常,适用于任何 PDF reader。
好的 - 你指的不是邮票注释。它是一个被绘制到页面内容中的 XObject。为什么 Aspose 将其称为 Stamp 是……嗯……一个谜。当您删除 "stamp"(不是图章)时,Aspose 似乎正在删除 XObject,但不是从页面内容流中绘制它的说明...这就是您的原因在 Acrobat 中出现错误。其他应用程序对错误的 PDF 更宽容,我的猜测是当他们写出文件时,他们正在删除对不存在的对象的引用。您可以通过选择另存为优化的 PDF 让 Acrobat 尝试解决此类问题。但是,除了 XObject 之外,您最好删除绘图指令。
由于您创建文件和添加 "stamp" 的方式,您的页面内容流是一个流数组。删除数组中的最后一项,即绘制 XObject 的指令,您的文件将在所有查看器中正常工作。注意:内容数组中的最后一项并不总是您的图章。只是你的图章是最后画的,所以它在最后。
如果您打算 "replace" "stamp",您需要像现在一样删除 XObject,然后删除指令,然后添加新的 "stamp"。