2013-07-27 95 views
0

看起來PDF文件有幾層,我不能繪製新的對象覆蓋。我試圖使用PDFStamper和GetOverContent()使對象成爲最上層,但失敗了,我不知道爲什麼。我只想將所有對象添加到PDF的最頂層。可能嗎?iTextSharp編輯一個PDF,但看不到新添加的對象

如何在PDF的頂層添加所有新對象?

這裏是我的代碼:

public static bool SaveFile(string srcFile, string DesFile, List<EditPage> pageLs, List<PdfObj> atOtherLs) 
    { 
     PdfReader reader = new PdfReader(srcFile); 

     Document doc = new Document(); 
     MemoryStream ms = new MemoryStream(); 
     PdfWriter writer = PdfWriter.GetInstance(doc, ms); 
     doc.Open(); 
     PdfContentByte cb = writer.DirectContent; 

     for (int i = 1; i <= reader.NumberOfPages; i++) 
     { 
      iTextSharp.text.Rectangle ps = reader.GetPageSize(i); 


      PdfImportedPage page = writer.GetImportedPage(reader, i); 
      EditPage ep = GetEditPage(pageLs, atOtherLs, i - 1); 



      WriteEditePage(doc, cb, ps, ep); 
     } 

     reader.Close(); 
     doc.Close(); 

     File.WriteAllBytes(DesFile, ms.ToArray()); 
     ms.Close(); 

     return true; 
    } 


public static void WriteEditePage(Document doc, PdfContentByte cb, Rectangle ps, EditPage ep) 
    { 
     for (int i = 0; i < ep.Objs.Count; i++) 
     { 
      if (ep.Objs[i].PdfType != PdfObjTypes.Gdi) 
       continue; 

      GdiObj gdi = ep.Objs[i] as GdiObj; 

      cb.SetColorStroke(new Color(gdi.Color)); 
      cb.SetColorFill(new Color(gdi.Color)); 
      cb.SetLineWidth(gdi.Thick/FV); 
      if (gdi.Dash != System.Drawing.Drawing2D.DashStyle.Solid) 
      { 
       cb.SetLineDash(2, 0.75f); 
      } 
      else 
      { 
       cb.SetLineDash(1); 
      } 

      switch (gdi.GdiType) 
      { 
       case GdiObjTypes.Points: 
        WritePoints(cb, ps, gdi as GdiPoint); 
        break; 
       case GdiObjTypes.Line: 
        WriteLine(cb, ps, gdi as GdiLine); 
        break; 
       case GdiObjTypes.Rectangle: 
        WriteRetangle(cb, ps, gdi as GdiRectangle); 
        break; 
       case GdiObjTypes.Ellipse: 
        WriteEllipse(cb, ps, gdi as GdiEllipse); 
        break; 
       case GdiObjTypes.Image: 
        WriteImage(cb, ps, gdi as GdiImage); 
        break; 
       case GdiObjTypes.Text: 
        WriteText(cb, ps, gdi as GdiText); 
        break; 
      } 
     } 
    } 
+1

* PDFStamper和GetOverContent *會比您當前的代碼更正確。請提供說明檢查問題的結果pdf。 – mkl

回答

0

您使用了錯誤的類的內容添加到現有的PDF文檔。請閱讀chapter 6 of my book,更具體地說是第6.3.1節。當然,這些例子都是用Java編寫的,而且您使用的是iTextSharp,但是如果您需要C#示例,則可以在Sourceforge上找到它們。

讀你的代碼示例,我不知道GetEditPage()WriteEditPage()應該做什麼。如果靜態ColumnText.ShowTextAligned()不符合您的目的(例如,因爲文本未被包裝),那麼您需要創建一個ColumnText實例並將該內容添加到該實例。

相關問題