2011-10-01 42 views
1

我想使用itextsharp獲取動態信息並使用它生成PDF .. PDF在每個頁面上使用不同的背景圖像,文本內容定位在需要使用contentByte幫助器的地方。無論如何,這是計劃。當我嘗試添加另一個頁面,然後將圖像和文本拖放到該頁面上時,我遇到了掛斷問題......我的第一頁以第二頁上應顯示的圖像結尾,並且第一頁圖像無法顯示無論是頁面上......到目前爲止我的代碼如下:在第二頁上創建一個具有不同背景圖像的2頁PDF

   Function ID_and_Parking(ByVal id As Integer) As ActionResult 
     Dim _reg_info As reg_info = db.reg_info.Single(Function(r) r.id = id) 
     Dim _conf_info As conf_info = db.conf_info.Single(Function(f) f.id = 0) 
     Dim _name As String = String.Empty 


     If Not String.IsNullOrWhiteSpace(_reg_info.name_tag_pref) Then 
      _name = _reg_info.name_tag_pref 
     Else 
      _name = _reg_info.first_name + " " + _reg_info.last_name 
     End If 
     Dim _LastName As String = _reg_info.last_name 
     Dim _Employer As String = _reg_info.business_name 
     Dim _Class_1 As String = _reg_info.tues_class 
     Dim _Class_2 As String = _reg_info.wed_class 
     Dim _Class_3 As String = _reg_info.thur_class 
     Dim _Class_4 As String = _reg_info.fri_class 
     Dim _BeginDate As String = _conf_info.conf_start_date 
     Dim _endDate As String = _conf_info.conf_end_date 
     Dim _dates As String = _BeginDate + "-" + _endDate 

     If IsDBNull(_reg_info.tues_class) Then 
      _Class_1 = "" 
     End If 
     If IsDBNull(_reg_info.wed_class) Then 
      _Class_2 = "" 
     End If 
     If IsDBNull(_reg_info.thur_class) Then 
      _Class_3 = "" 
     End If 
     If IsDBNull(_reg_info.fri_class) Then 
      _Class_4 = "" 
     End If 


     Dim pdfpath As String = Path.Combine(AppDomain.CurrentDomain.BaseDirectory) + "\PDF_Files\" 
     Dim imagepath As String = Path.Combine(AppDomain.CurrentDomain.BaseDirectory) + "\PDF_Files\" 
     Dim _PdfName As String = _LastName + ".pdf" 
     Dim doc As New Document 
     doc.SetPageSize(iTextSharp.text.PageSize.LETTER) 
     doc.SetMargins(0, 0, 0, 0) 

     Dim _PnameFont As iTextSharp.text.Font = FontFactory.GetFont(FontFactory.TIMES_ROMAN, 18, iTextSharp.text.Font.NORMAL) 
     Dim BF_Times As BaseFont = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, False) 
     Dim _Parking_Name As New Font(BF_Times, 18, Font.NORMAL, BaseColor.BLACK) 
     Dim _Parking_Date As New Font(BF_Times, 24, Font.BOLD, BaseColor.BLACK) 



     Try 
      Dim writer As PdfWriter = PdfWriter.GetInstance(doc, New FileStream(pdfpath + _PdfName, FileMode.Create)) 
      doc.Open() 


      Dim jpg As Image = Image.GetInstance(imagepath + "/Parking_Pass.jpg") 
      jpg.Alignment = iTextSharp.text.Image.UNDERLYING 
      jpg.ScaleToFit(612, 792) 
      doc.add(jpg) 
      Dim cb As PdfContentByte = writer.DirectContent 
      'Render Parking Permit 
      cb.BeginText() 
      cb.SetFontAndSize(BF_Times, 16) 
      cb.SetTextMatrix(145, 135.5) 
      cb.ShowText(_BeginDate) 
      cb.EndText() 

      cb.BeginText() 
      cb.SetFontAndSize(BF_Times, 16) 
      cb.SetTextMatrix(429, 135.5) 
      cb.ShowText(_endDate) 
      cb.EndText() 



      Dim _idJpg As Image = Image.GetInstance(imagepath + "/Id_Tag.jpg") 
      Dim imageWidth As Decimal = _idJpg.Width 
      Dim imageHeight As Decimal = _idJpg.Height 

      doc.SetPageSize(iTextSharp.text.PageSize.LETTER) 


      _idJpg.Alignment = iTextSharp.text.Image.UNDERLYING 
      _idJpg.ScaleToFit(612, 792) 
      doc.NewPage() 
      doc.Add(_idJpg) 

      cb.BeginText() 
      cb.SetFontAndSize(BF_Times, 18) 
      cb.SetTextMatrix(100, 50) 
      cb.ShowText(_name) 
      cb.EndText() 

      cb.BeginText() 
      cb.SetFontAndSize(BF_Times, 18) 
      cb.SetTextMatrix(200, 100) 
      cb.ShowText(_Employer) 
      cb.EndText() 

      cb.BeginText() 
      cb.SetFontAndSize(BF_Times, 18) 
      cb.SetTextMatrix(300, 150) 
      cb.ShowText(_Class_1) 
      cb.EndText() 

      cb.BeginText() 
      cb.SetFontAndSize(BF_Times, 18) 
      cb.SetTextMatrix(310, 50) 
      cb.ShowText(_Class_2) 
      cb.EndText() 

      cb.BeginText() 
      cb.SetFontAndSize(BF_Times, 18) 
      cb.SetTextMatrix(320, 50) 
      cb.ShowText(_Class_3) 
      cb.EndText() 

      cb.BeginText() 
      cb.SetFontAndSize(BF_Times, 18) 
      cb.SetTextMatrix(330, 50) 
      cb.ShowText(_Class_4) 
      cb.EndText() 



      doc.Close() 
     Catch dex As DocumentException 
      Response.Write(dex.Message) 
     Catch ioex As IOException 
      Response.Write(ioex.Message) 
     Catch ex As Exception 
      Response.Write(ex.Message) 



     End Try 



     Return RedirectToAction("showUserPDF", New With {.pdfName = _PdfName}) 


    End Function 

我已經遍佈這個,但所有的我已經找到了信息每個論壇似乎從我所期待的是關閉,或也許我只是要對這個錯誤是一起...任何幫助將不勝感激......

回答

0

其實我也想通了,我忽略了我的NEWPAGE和圖像位置的放置問題...我必須在第二頁圖像NEWPAGE前...感謝您的幫助...如果其他人需要動態填充圖像的數據上述解決方案...

1

在你的代碼已經有了這樣的:

Dim jpg As iTextSharp.text.Image = iTextSharp.text.Image.GetInstance(imagepath + "/Parking_Pass.jpg") 
    jpg.Alignment = iTextSharp.text.Image.UNDERLYING 
    jpg.ScaleToFit(612, 792) 

但你從來沒有真正加入jpgdoc

+0

好眼睛...這是在那裏之前,因爲我奠定了該部分的頁面佈局,但反正...現在我有一個問題..看起來,這兩個圖像都放在同一個頁面上...第一個圖像,然後第二個被放在它的頂部..我想通過把它放在添加頁面構造函數,它會顯示在第二個頁面上年齡,但他們都結束在同一頁面..任何想法? – Skindeep2366

+0

我其實已經找到了問題,我忽略了我的位置newpage和圖像位置...我有第二頁圖像之前newpage ...感謝您的幫助...如果其他人需要動態填充圖像與數據上述解決方案工程... – Skindeep2366

相關問題