2013-06-27 41 views
1

我使用itextsharp將我的圖片轉換爲pdf文件。我使用大塊。但是,當我使用塊新行,儘管我把相同的scaletofit,我的形象改變它的大小。使用itextsharp在PDF中保持相似的圖像大小

enter image description here

protected void btnPDF_Click(object sender, EventArgs e) 
    { 

     var doc1 = new Document(); 
     var filename = "MyTestPDF" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".pdf"; 
     var output = new FileStream(Path.Combine("C:\\Users\\apr13mpsip\\Downloads", filename), FileMode.Create); 
     iTextSharp.text.pdf.PdfWriter.GetInstance(doc1, output); 
     doc1.Open(); 


     PdfPTable table = new PdfPTable(1); 

     table.TotalWidth = 585f; 
     table.LockedWidth = true; 


     PdfPTable table2 = new PdfPTable(1); 
     table2.TotalWidth = 585f; 
     table2.LockedWidth = true; 

     iTextSharp.text.pdf.PdfPCell imgCell1 = new iTextSharp.text.pdf.PdfPCell(); 

     var logo = iTextSharp.text.Image.GetInstance(Server.MapPath("~/image/logo.jpg")); 
     doc1.Add(logo); 

     var titleFont = FontFactory.GetFont("Arial", 15, Font.BOLD); 
     doc1.Add(new Paragraph("Official Report. Member Report ID : " + DDLCase.SelectedValue, titleFont)); 

     var normalFont = FontFactory.GetFont(FontFactory.HELVETICA, 14, Font.BOLD); 
     var phrase = new Phrase(); 
     var phrase2 = new Phrase(); 

     SqlConnection con = new SqlConnection("Data Source = localhost; Initial Catalog = project; Integrated Security = SSPI"); 

     SqlCommand cm = new SqlCommand("Select lro.fullname, lro.contact, mr.typeofcrime, mr.location,mr.crdatetime, mr.citizenreport, pr.policeid, pr.prdatetime, pr.policereport, aor.officialreport, mr.image1, mr.image2, mr.image3, mr.image4, mr.image5, pr.image1, pr.image2, pr.image3, pr.image4, pr.image5 from MemberReport mr, PoliceReport pr, LoginRegisterOthers lro, AdminOfficialReport aor where mr.memberreportid = '" + DDLCase.SelectedValue + "' and mr.memberreportid=pr.memberreportid and pr.policereportid=aor.policereportid", con); 
     con.Open(); 
     SqlDataReader dr; 

     dr = cm.ExecuteReader(); 

     if (dr.Read()) 
     { 


      phrase2.Add(new Chunk("Citizen Images :", normalFont)); 

      phrase2.Add(Chunk.NEWLINE); 
      phrase2.Add(Chunk.NEWLINE); 
      phrase2.Add(Chunk.NEWLINE); 
      phrase2.Add(Chunk.NEWLINE); 
      phrase2.Add(Chunk.NEWLINE); 

      phrase2.Add(new Chunk("1.", normalFont)); 
      Byte[] bytes1 = (Byte[])dr[10]; 
      iTextSharp.text.Image image1 = iTextSharp.text.Image.GetInstance(bytes1); 
      image1.ScaleToFit(750f, 750f); 
      Chunk imageChunk1 = new Chunk(image1, 0, -30); 
      phrase2.Add(imageChunk1); 

      phrase2.Add(Chunk.NEWLINE); 
      phrase2.Add(Chunk.NEWLINE); 
      phrase2.Add(Chunk.NEWLINE); 
      phrase2.Add(Chunk.NEWLINE); 
      phrase2.Add(Chunk.NEWLINE); 


      phrase2.Add(new Chunk("2.", normalFont)); 
      Byte[] bytes5 = (Byte[])dr[11]; 
      iTextSharp.text.Image image5 = iTextSharp.text.Image.GetInstance(bytes5); 
      image5.ScaleToFit(750f, 750f); 
      Chunk imageChunk5 = new Chunk(image5, 0, -30); 
      phrase2.Add(imageChunk5); 

      phrase2.Add(Chunk.NEWLINE); 
      phrase2.Add(Chunk.NEWLINE); 
      phrase2.Add(Chunk.NEWLINE); 
      phrase2.Add(Chunk.NEWLINE); 
      phrase2.Add(Chunk.NEWLINE); 

      phrase2.Add(new Chunk("3.", normalFont)); 
      Byte[] bytes6 = (Byte[])dr[12]; 
      iTextSharp.text.Image image6 = iTextSharp.text.Image.GetInstance(bytes6); 
      image6.ScaleToFit(750f, 750f); 
      Chunk imageChunk6 = new Chunk(image6, 0, -30); 
      phrase2.Add(imageChunk6); 

      phrase2.Add(Chunk.NEWLINE); 
      phrase2.Add(Chunk.NEWLINE); 
      phrase2.Add(Chunk.NEWLINE); 
      phrase2.Add(Chunk.NEWLINE); 
      phrase2.Add(Chunk.NEWLINE); 


      phrase2.Add(new Chunk("4.", normalFont)); 
      Byte[] bytes7 = (Byte[])dr[13]; 
      iTextSharp.text.Image image7 = iTextSharp.text.Image.GetInstance(bytes7); 
      image7.ScaleToFit(750f, 750f); 
      Chunk imageChunk7 = new Chunk(image7, 0, -30); 
      phrase2.Add(imageChunk7); 

      phrase2.Add(Chunk.NEWLINE); 
      phrase2.Add(Chunk.NEWLINE); 
      phrase2.Add(Chunk.NEWLINE); 
      phrase2.Add(Chunk.NEWLINE); 
      phrase2.Add(Chunk.NEWLINE); 

      phrase2.Add(new Chunk("5.", normalFont)); 
      Byte[] bytes8 = (Byte[])dr[14]; 
      iTextSharp.text.Image image8 = iTextSharp.text.Image.GetInstance(bytes8); 
      image8.ScaleToFit(750f, 750f); 
      Chunk imageChunk8 = new Chunk(image8, 0, -30); 
      phrase2.Add(imageChunk8); 

      phrase2.Add(Chunk.NEWLINE); 
      phrase2.Add(Chunk.NEWLINE); 
      phrase2.Add(Chunk.NEWLINE); 
      phrase2.Add(Chunk.NEWLINE); 


      table2.AddCell(phrase2); 

     } 

     dr.Close(); 
     doc1.Add(table); 
     doc1.NewPage(); 
     doc1.Add(table2); 
     doc1.Close(); 
    } 


} 
+0

這是一些老的iTextSharp版本的bug;它現在應該已經被修復了。如果你沒有提到你使用的是哪個版本,你不應該期望得到答案,因爲你的代碼可以爲許多人正確地工作。 –

+0

我可以知道如何檢查我使用哪個版本的itextsharp?我如何獲得itextsharp的最新版本?這是我第一次使用itextsharp。 –

+0

檢查您的PDF的製作者行。最新版本:http://sourceforge.net/projects/itextsharp/files/itextsharp/ –

回答

3

我完全忘了這個問題,但現在我會回答它以備將來參考。 iTextSharp會自動調整圖像大小(這在大多數情況下是您想要的),但您可以通過爲每張圖像設置ScaleToFitHeight = false來避免這種情況。

phrase2.Add(new Chunk("1.", normalFont)); 
Byte[] bytes1 = (Byte[])dr[10]; 
iTextSharp.text.Image image1 = iTextSharp.text.Image.GetInstance(bytes1); 
image1.ScaleToFit(750f, 750f); 
//set scale to fit height = false 
image1.ScaleToFitHeight = false; 
Chunk imageChunk1 = new Chunk(image1, 0, -30); 
phrase2.Add(imageChunk1); 
+0

這沒關係,先生。實際上,我完成了使用itextsharp的主要項目。不過,我仍然衷心感謝您的幫助,並將使用上述信息作爲未來目的的參考:) –

+0

@TeoChuenWeiBryan upvote布魯諾的答案並將其標記爲正確。 – Pierre

相關問題