2013-02-11 32 views
2

我正在使用itextSharp在pdf文檔中添加偏移量。iTextSharp z-index

我已經包含保存在它的圖像的PDF文檔,這是一個印章。

因此,我在郵票上繪製了一些筆畫,當我在WPF中繪製它們時,一切都很順利,但是當我通過電子郵件使用iTextSharp發送PDF進行轉換時,我繪製的線條現在位於郵票下方。

我該如何解決這個問題?

謝謝

+0

除非有人能夠快速提供答案,請提供一些你正在做什麼和如何做的代碼。此外請提供一個PDF輸出樣本。 – mkl 2013-02-11 18:37:00

回答

1

您發佈作爲answer的解釋(順便說一句,更中肯本來編輯您的問題包含數據)解釋了這個問題。

有兩個PDF頁面上可見的主要類型的對象:

  1. PDF頁面內容;
  2. 與頁面關聯的註釋。

註釋總是顯示在頁面內容上方,如果它們全部顯示的話。

在你的情況,你的圖像添加到PDF頁面內容(使用OverContent或UnderContent只改變其中相對於其他的PDF頁面的內容資料的補充出現的)。另一方面,郵票很可能是通過註釋來實現的。因此,郵票註釋始終高於您的添加項。

如果您希望您的增加出現在上面蓋章,你要麼必須添加補充一些類型的註釋,太多,或者你可以選擇添加的東西之前,壓平印章標記信息的頁面內容。

以下哪一些變體比較好,取決於你的要求。是否有任何要求將郵票保留爲郵票註釋?是否有任何要求將您的添加內容保留爲內容的一部分?請詳細說明您的要求。由於內容和註釋在顯示或打印時有一些不同的屬性,請說明所有要求。

,此外,請提供樣本文件。

+0

謝謝您的回答,因爲我無法提供樣品文件,因爲它是生產中的客戶文件。但是,如果我能找到一種方法來平整郵票,這將解決我的問題。 – Hugo 2013-02-11 21:25:39

+0

如果您提供了一些匿名示例PDF文檔,並且上面印有類似所應用的標籤,此處的某個人可能會幫助您。 – mkl 2013-02-12 07:17:51

0

所以就像我說的原始PDF有郵票保存在它裏面,如果我打開PDF與Acrobat Reader能打動我的印記。

所以在這裏我的代碼編寫一些招:

 using (var outputStream = new FileStream(outputPath, FileMode.Create, FileAccess.Write, FileShare.Read)) 
     using (var intputStream = new FileStream(pathPdf, FileMode.Open, FileAccess.Read, FileShare.Read)) 
     { 
      PdfReader reader = new PdfReader(intputStream); 
      using (var pdfStamper = new PdfStamper(reader, outputStream)) 
      { 
       foreach (var page in pages) 
       {             
        if (page != null && page.ExportedImages.HasItems()) 
        {                                    
         PdfContentByte pdfContent = pdfStamper.GetOverContent(page.PageIndex); 
         Rectangle pageSize = reader.GetPageSizeWithRotation(page.PageIndex);        
         PdfLayer pdfLayer = new PdfLayer(string.Format(ANNOTATIONNAMEWITHPAGENAME, page.PageIndex), pdfContent.PdfWriter); 

         foreach (ExporterEditPageInfoImage exportedInfo in page.ExportedImages) 
         { 
          Image image = PngImage.GetImage(exportedInfo.Path);                 
          image.Layer = pdfLayer; 

          if (quality == PublishQuality.Normal || quality == PublishQuality.Medium || quality == PublishQuality.High) 
          { 
           float width = (float)Math.Ceiling((image.Width/image.DpiX) * 72); 
           float height = (float)Math.Ceiling((image.Height/image.DpiY) * 72); 
           image.ScaleAbsolute(width, height); 

           float x = (float)(exportedInfo.HorizontalTile * (page.TileSize * (72/96d))); 
           float y = (float)Math.Max(0, (pageSize.Height - ((exportedInfo.VerticalTile + 1) * (page.TileSize * (72/96d))))); 
           image.SetAbsolutePosition(x, y);          
          } 
          else 
           throw new NotSupportedException(); 

          pdfContent.AddImage(image);         
          GC.Collect(); 
          GC.WaitForPendingFinalizers(); 
         } 
        } 
       } 

       pdfStamper.Close(); 
      } 
     } 

所以我的筆畫在PDF保存好這個問題的郵票總是在一切之上,我認爲是正常的,所以我可以做一個變通方法爲了這 ?

+0

我想我找到了解決問題的辦法,如果我將文檔弄平,郵票將變成靜態對象,這樣可以解決我的問題,但事情是即使我更改對象的屬性pdfstamper.FormFlattening = true它doesn' t似乎工作。任何想法 ? – Hugo 2013-02-11 21:10:16

+0

好吧,表單扁平化表單標註,但是郵票標註最有可能不是作爲表單註釋實現的。我擔心,扁平化其他類型的註釋必須首先實施。 – mkl 2013-02-11 22:02:41

+0

是的,你是對的,謝謝你的回答。 – Hugo 2013-02-11 22:07:39