2014-10-30 2 views
2

나는 Gmanny의 Pechkin Pdf 라이브러리를 사용하고 있으며 완벽하게 작동합니다. 여기 내 코드는 다음과 같습니다생성 된 PDF에 머리글과 바닥 글을 추가하는 방법

private void CreatePdfPechkin(string htmlString, string fileName) 
     { 
      //Transform the HTML into PDF 
      var pechkin = Factory.Create(new GlobalConfig() 
      .SetMargins(new Margins(100, 50, 100, 100)) 
       .SetDocumentTitle("Test document") 
       .SetPaperSize(PaperKind.A4) 
       .SetCopyCount(1) 
          //.SetPaperOrientation(true) 
          // .SetOutputFile("F:/Personal/test.pdf") 

      ); 
      ObjectConfig oc = new ObjectConfig(); 
      oc.Footer.SetLeftText("[page]"); 
      oc.Footer.SetTexts("[page]", "[date]", "[time]"); 
      oc.Header.SetCenterText("TEST HEADER TEST1"); 
      oc.Header.SetHtmlContent("<h1>TEST HEADER V2</h1>"); 
      oc.SetAllowLocalContent(true); 
      //// create converter 
      //IPechkin ipechkin = new SynchronizedPechkin(pechkin); 

      // set it up using fluent notation 
      var pdf = pechkin.Convert(new ObjectConfig() 
         .SetLoadImages(true).SetZoomFactor(1.5) 
         .SetPrintBackground(true) 
         .SetScreenMediaType(true) 
         .SetCreateExternalLinks(true), htmlString); 

      //Return the PDF file 
      Response.Clear(); 
      Response.ClearContent(); 
      Response.ClearHeaders(); 
      Response.ContentType = "application/pdf"; 
      Response.AddHeader("Content-Disposition", string.Format("attachment;filename=test.pdf; size={0}", pdf.Length)); 
      Response.BinaryWrite(pdf); 
      Response.Flush(); 
      Response.End(); 
//   byte[] pdf = new Pechkin.Synchronized.SynchronizedPechkin(
//new Pechkin.GlobalConfig()).Convert(
// new Pechkin.ObjectConfig() 
// .SetLoadImages(true) 
// .SetPrintBackground(true) 
// .SetScreenMediaType(true) 
// .SetCreateExternalLinks(true), htmlString); 
//   using (FileStream file = System.IO.File.Create(@"F:\Pankaj WorkSpace\"+ fileName)) 
//   { 
//    file.Write(pdf, 0, pdf.Length); 
//   } 
     } 

하지만 지금은 머리글, 바닥 글 및 페이지 번호를 추가하려면, 누군가가 그 작업을 수행하는 방법을 제안 할 수 있습니다? Object config를 통해 가능하지만 작동하지 않는다는 것을 알고 있습니다.

답변

9

아래의 매우 기본적인 예제를 사용한 머리글과 꼬리말이 저에게 효과적입니다. Pechkin를 사용

:

GlobalConfig gc = new GlobalConfig(); 
gc.SetMargins(new Margins(300, 100, 150, 100)) 
    .SetDocumentTitle("Test document") 
    .SetPaperSize(PaperKind.Letter); 
IPechkin pechkin = new SynchronizedPechkin(gc); 

ObjectConfig oc = new ObjectConfig(); 
oc.SetCreateExternalLinks(false); 
oc.SetFallbackEncoding(Encoding.ASCII); 
oc.SetLoadImages(false); 
oc.Footer.SetCenterText("I'm a footer!"); 
oc.Footer.SetLeftText("[page]"); 
oc.Header.SetCenterText("I'm a header!"); 

byte[] result = pechkin.Convert(oc, "<h1>My Website</h1>"); 
System.IO.File.WriteAllBytes(@"c:\pechkinTest.pdf", result); 

난 당신이 생각 Tuespechkin로 전환 권하고 싶습니다. 이것은 많은 버그 수정이 포함 된 Pechkin의 활성 포크입니다. Pechkin ceased since 2013에 대한 불행히도 적극적인 개발. Tuespechkin를 사용

:

var document = new HtmlToPdfDocument 
{ 
    GlobalSettings = 
    { 
     ProduceOutline = true, 
     DocumentTitle = "My Website", 
     PaperSize = PaperKind.A4, 
     Margins = 
     { 
      All = 1.375, 
      Unit = Unit.Centimeters 
     } 
    }, 
    Objects = { 
     new ObjectSettings 
     { 
      HtmlText = "<h1>My Website</h1>", 
      HeaderSettings = new HeaderSettings{CenterText = "I'm a header!"}, 
      FooterSettings = new FooterSettings{CenterText = "I'm a footer!", LeftText = "[page]"} 
     } 
    } 
}; 

IPechkin converter = Factory.Create(); 
byte[] result = converter.Convert(document); 
System.IO.File.WriteAllBytes(@"c:\tuespechkinTest.pdf", result); 

귀하의 문제는 이것이다. 새로운 두 번째 ObjectConfig를 만드는 대신 헤더 및 바닥 글을 포함하기 전에 만든 OC를 전달해야합니다.

ObjectConfig oc = new ObjectConfig(); 
oc.SetLoadImages(true); 
oc.SetZoomFactor(1.5); 
oc.SetPrintBackground(true); 
oc.SetScreenMediaType(true); 
oc.SetCreateExternalLinks(true); 
oc.Footer.SetLeftText("[page]"); 
oc.Footer.SetCenterText("I'm a footer!"); 
oc.Header.SetCenterText("TEST HEADER TEST1"); 

var result = pechkin.Convert(oc, "<h1>My Website</h1>"); 
System.IO.File.WriteAllBytes(@"c:\pechkinTest.pdf", result); 
+0

이미 말했듯이 PDF는 머리말 꼬리말이 없습니다. 그럼 전체 기능을 업데이트하시기 바랍니다. –

+0

일반적인 예를 추가 한 후에 이전에 놓친 코드에서 실수를 실감했습니다. 수정 된 답변의 하단에있는 코드를 참조하십시오. – Nicholas

+0

멍청이 남자 .. 감사합니다 .. 지금은 화요일에 전환 : –

관련 문제