2013-01-09 47 views
1

下面的代碼說明了我對iTextSharp的一個問題。一切都很完美。 PDF文件被創建並在屏幕上顯示正確。當我從Adobe Reader X打印PDF時,它看起來完全正確,但Adobe報告「此頁面存在錯誤,Acrobat可能無法正確顯示頁面,請與創建PDF文檔的人員聯繫以解決問題。」iTextSharp ColumnText.SetSimpleColumn Addtext導致Adobe Reader X中出現錯誤10.1.5

不幸的是,該文件必須附加到電子郵件併發送給客戶。錯誤信息不是一個好看,我想解決它。它發生在我試過的所有Reader版本中,包括今天安裝的10.1.15。

我有iTextSharp的5.3.4.0的Windows 7專業版SP1下

private void writeTestDoc() 
    { 
     string fname = "test.pdf"; 
     float textWidth = 500; 
     float leftMgn = 60; 
     float rubricTop = 720; 
     float leftPad = 5; 
     float topPad = 12; 
     float leading = 0; 
     BaseFont baseCalibri = BaseFont.CreateFont("c:/windows/fonts/calibri.ttf", BaseFont.WINANSI, true); 
     Font plainFont = new Font(baseCalibri, 11, Font.NORMAL); 
     Document document = new Document(); 
     try 
     { 
      PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(fname, FileMode.Create)); 
      document.Open(); 
      PdfContentByte cb = writer.DirectContent; 
      cb.BeginText(); 
      ColumnText ct = new ColumnText(cb); 
      float boxTop = rubricTop; 
      ct.SetSimpleColumn(leftMgn + leftPad, boxTop - topPad, leftMgn + textWidth, boxTop, leading, Element.ALIGN_CENTER); 
      ct.AddText(new Phrase("A test message", plainFont)); 
      ct.Go(); 
      cb.EndText(); 
      document.Close(); 
     } 
     catch (Exception ex) 
     { 
      writeFile("ERROR in writeTestDoc " + ex.Message); 
     } 
    } 

回答

1

刪除cb.BeginText();cb.EndText();BT/ET文本對象被嵌套是非法的。報告您找到要求您使用BeginText()/EndTextColumnText相結合的文檔的位置,以便我們可以要求作者從他或她的文檔中更正它。

+0

非常感謝。它確實解決了我的測試方法中的問題。然後我從我的真實方法中刪除了所有cb.BeginText()和cb.EndText(),但問題仍然存在。我猶豫發佈整個方法 - 它包含300行代碼。有什麼辦法可以診斷這個問題嗎? –

+0

如果您有Acrobat,則可以使用Preflight在您的PDF上進行語法檢查。您將獲得內容流中引入的所有錯誤的列表。 –

+0

我獲得了Acrobat的副本,但Preflight沒有提供任何線索。最終我通過試驗和錯誤發現,您不能將PdfContentByte.ShowTextAligned與ColumnText(PdfContentByte)方法混合使用。現在一切正常。 –

相關問題