2012-08-22 3 views
0

내 경계 상자 안에 더 긴 높이의 웹 페이지를 넣을 수없는 것 같습니다. BrowserWidth가 더 작 으면 해당 웹 페이지가 오버 플로우되지만 크기가 더 커지면 경계 상자가 잘 맞습니다.AbcPDF로 경계 상자에 웹 사이트 맞추기

public abstract class HtmlToPdfModel : IPdfModel 
    { 
     public string Url { get; set; } 
     public int PageWidth { get; set; } // 850 (in pixels) 
     public int PageHeight { get; set; } // 844 (in pixels) 
     public string FileName { get; set; } 

     public virtual byte[] GetStream() 
     { 
      using (var doc = new Doc()) 
      { 
       var w = doc.MediaBox.Width; 
       var h = doc.MediaBox.Height; 
       var l = doc.MediaBox.Left; 
       var b = doc.MediaBox.Bottom; 

       doc.Transform.Rotate(90, l, b); 
       doc.Transform.Translate(w, 0); 
       doc.HtmlOptions.PageCacheEnabled = false; 
       doc.Rect.Width = h; // 792 
       doc.Rect.Height = w; // 612 

       if (!string.IsNullOrWhiteSpace(string.Format("{0}&r={1}", Url, new Random().Next(1, 100000)))) 
       { 
        var ratio = GetViewPortRatio((int)doc.Rect.Width, (int)doc.Rect.Height, PageWidth, PageHeight); 

        doc.HtmlOptions.BrowserWidth = (int)(doc.Rect.Width * ratio); 
        doc.AddImageUrl(Url); 
       } 

       doc.SetInfo(doc.GetInfoInt(doc.Root, "Pages"), "/Rotate", "90"); 

       using (var ms = new MemoryStream()) 
       { 
        doc.Save(ms); 
        if (ms.CanSeek) 
        { 
         ms.Seek(0, SeekOrigin.Begin); 
        } 
        return ms.GetBuffer(); 
       } 
      } 
     } 

답변

2

다음과 같이 수정되었습니다.

using (var doc = new Doc()) 
      { 
       var w = doc.MediaBox.Width; 
       var h = doc.MediaBox.Height; 
       var l = doc.MediaBox.Left; 
       var b = doc.MediaBox.Bottom; 

       doc.Transform.Rotate(90, l, b); 
       doc.Transform.Translate(w, 0); 
       doc.HtmlOptions.PageCacheEnabled = false; 
       doc.HtmlOptions.Engine = EngineType.Gecko; 
       doc.Rect.Width = h; 
       doc.Rect.Height = w; 
       //doc.Rendering.DotsPerInch = 92; 

       if (!string.IsNullOrWhiteSpace(string.Format("{0}&r={1}", Url, new Random().Next(1, 100000)))) 
       { 
        var actualWidth = PageWidth/.75f; 
        var dimensionsScale = GetViewPortScale(PageHeight, PageWidth); 

        doc.HtmlOptions.BrowserWidth = Convert.ToInt32(actualWidth * dimensionsScale); 

        doc.AddImageUrl(Url); 
       } 

       doc.SetInfo(doc.GetInfoInt(doc.Root, "Pages"), "/Rotate", "90"); 

       using (var ms = new MemoryStream()) 
       { 
        doc.Save(ms); 
        if (ms.CanSeek) 
        { 
         ms.Seek(0, SeekOrigin.Begin); 
        } 
        return ms.GetBuffer(); 
       } 
      } 


     private float GetViewPortScale(float currentDimension, float dimension) 
    { 
     return (currentDimension/dimension); 
    } 
+0

우리 프로젝트에서도 동일한 문제가 있습니다. abcpdf 전체 테이블 형식의 데이터를 표시하지 않습니다. 우리 테이블에 20 개 이상의 열이있어 화면에 맞지 않아 스크롤바가 표시됩니다 – SivaRajini

+0

어떻게 abcpdf.if에 모든 표식 데이터를 표시 할 수 있습니까? 오랜 시간 동안 고생하고 .. – SivaRajini