2014-01-23 85 views
1

第一次給出打印命令時,我得到下面的內容。使用itextsharp生成的PDF在第一次打印命令時發生錯誤

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

打印出來非常好。第二次打印輸出命令不會給出任何錯誤。

請幫助我爲什麼這個錯誤是第一次打印。

這是我的代碼部分創建PDF

PdfContentByte cb = writer.DirectContent; 
cb.BeginText(); 
Font NormalFont = FontFactory.GetFont("Arial", 12, Font.NORMAL, Color.BLACK); 
// Add an image to a fixed position 
iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(Server.MapPath("~/images/images/banner.tiff")); 
img.SetAbsolutePosition(35, 760); 
img.ScalePercent(50); 
cb.AddImage(img); 
// Draw a line by setting the line width and position 
cb.SetLineWidth(2); 
cb.MoveTo(20, 740); 
cb.LineTo(570, 740); 
cb.Stroke(); 
//Header Details 
cb.BeginText(); 
writeText(cb, drHead["EmpName"].ToString(), 25, 745, f_cb, 14); 
writeText(cb, "Employee ID:", 450, 745, f_cn, 12); 
writeText(cb, drHead["EmployeeID"].ToString(), 515, 745, f_cb, 12); 
cb.EndText(); 
cb.BeginText(); 
writeText(cb, "XXXX:", 25, 725, f_cb, 8); 
cb.EndText(); 
cb.SetLineWidth(2); 
cb.MoveTo(20, 675); 
cb.LineTo(570, 675); 
cb.Stroke(); 
cb.EndText(); 
// Acknowledgement section 
cb.BeginText(); 
writeText(cb, "XXXXXXXXXXXXXXXX", 20, 140, f_cb, 12); 
cb.EndText(); 
cb.EndText(); 

請幫我知道什麼是問題。

回答

4

你有嵌套的文本塊。這是非法的PDF語法。我認爲最近版本的iTextSharp會提醒你這個問題,所以我猜你使用的是舊版本。

這是錯誤的:

cb.BeginText(); 
... 
cb.BeginText(); 
... 
cb.EndText(); 
... 
cb.EndText(); 

這是正確的:

cb.BeginText(); 
... 
cb.EndText(); 
... 
cb.BeginText(); 
... 
cb.EndText(); 

此外:ISO-32000-1告訴你,有些操作在文本塊內禁止。

這是錯誤的:

cb.BeginText(); 
... 
cb.AddImage(img); 
... 
cb.EndText(); 

這是正確的:

cb.BeginText(); 
... 
cb.EndText(); 
... 
cb.AddImage(img); 

最後,創建文本塊時,一些運營商是強制性的。例如:你總是需要setFontAndSize()(我不知道你在做什麼writeText(),但我假設你正確設置字體)。

無論如何:您已選擇在最低級別使用iTextSharp,幾乎是手動編寫PDF語法。這假設你知道ISO-32000-1從內到外。如果不這樣做,則應使用一些高級對象,如ColumnText將內容定位在絕對位置。

+0

非常感謝你....現在它的工作正常 – Vandana