2017-07-06 75 views
2

我正向更大的開發人員社區尋求幫助以瞭解真實原因並可能找到解決辦法。我問過Aspose的問題,他們也在他們的系統中跟蹤了這個問題(PDFNET-42880)。我認爲他們不會很快對此進行調查,因爲這是非常具體的案例。現在我這張貼在這裏詢問更多的細節:「另存爲」對福昕閱讀器Adob​​e在保存爲新文件時打印加蓋的PDF/Adob​​e的另存爲「另存爲」與福昕閱讀器「另存爲」功能中的區別是什麼'

  1. 是什麼在Adobe差「另存爲」與Windows的讀者「另存爲」功能?

  2. Adob​​e產品的問題不太明顯。我甚至不知道要問什麼:d

鏈接到他們(閱讀Aspose)舊論壇:https://www.aspose.com/community/forums/thread/845549/removing-stamps-fails-after-saving-stamped-file-from-adobe-acrobat.aspx

案例: 創建PDF使用的OpenOffice(3.4.0版本)的形式,蓋上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
  • OoPdfFormExam ple_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 :雷莫的過程ving郵票工作正常,但試圖打開該文件將最終有一個文件的問題。

「此頁面存在錯誤,Acrobat可能無法正確顯示頁面,請聯繫創建PDF文檔的人員以解決問題。」

編輯:經過測試更多,並只是打開文件Aspose,並保存它沒有修改,沒有打破文件,只有一次使用Aspose方法刪除郵票它被打破。

使用福昕:在這個過程中唯一的區別是打開文件,福昕閱讀器,並保存形式存在。郵票被刪除和文件是好的,適用於任何PDF閱讀器。

使用Windows(10)閱讀器:唯一的區別在於打開文件到Windows讀取器並從那裏保存。郵票被刪除和文件是好的,適用於任何PDF閱讀器。

+0

在文件「OoPdfFormExample_WithStamp.pdf」中,我根本看不到任何印記......假設您指的是「印記」註釋。 – joelgeraci

+0

謝謝@ joelgeraci - 郵票的位置並不明顯。我添加了一張圖片[Stamp_Location.png](https://1drv.ms/i/s!Auvpijam7a73iD2U4rlaIAFBuQhi)以幫助查看郵票的位置。 –

+0

@MattiKetonen,我在Aspose擔任開發者傳道人。我記錄了您對所記錄問題的所有擔憂以及在此處分享的更多詳細信息。只要產品團隊完成調查,我們將在Aspose論壇的原始主題中通知您。請節省一點時間。 –

回答

1

好的 - 你所指的是不是一個郵票註釋。這是一個XObject,它被繪製到頁面內容中。爲什麼Aspose把它作爲一個郵票是......好......一個謎。當你刪除「郵票」(不是郵票)Aspose似乎是刪除XObject,但不是從頁面中繪製的說明內容流...這就是爲什麼你在Acrobat中出現錯誤。其他應用程序更容易與不良的PDF,我的猜測是當他們寫出文件,他們正在刪除對不存在的對象的引用。您可以讓Acrobat嘗試通過選擇「另存爲優化的PDF」來解決這類問題。但是,除了XObject之外,移除繪圖指令要好得多。

由於您創建文件並添加「標記」的方式,因此您的頁面內容流是一組流。刪除數組中的最後一項,這是繪製XObject的指令,並且您的文件將在所有查看器中無誤地運行。注意:內容數組中的最後一項不會總是您的郵票。這只是你的郵票是最後得到的東西,所以它在最後。

如果您的目的是要「替換」「郵票」,您需要通過移除XObject來完成此操作,然後刪除該指令,然後添加新的「郵票」。

+0

*「爲什麼Aspose將它作爲一個郵票是......好...一個謎。」* - 好吧,每個PDF庫或編輯似乎都有它的錯誤名稱的項目。但即使PDF規範對特定註釋類型使用「標記」,對通用xobjects使用「戳記」也是非常奇怪的。 – mkl

+0

謝謝@ joelgeraci,這的確有助於理解引擎蓋下發生的事情。我將在原始問題中添加一個編輯,因爲我更多地瞭解了一個細節,但它只是證明了您已解釋的標記移除部分是哪裏出錯。 –