2013-01-09 6 views
0

나는 체크 프린트 목적으로 iTextSharp를 사용하여 PDF를 만들고 있습니다. 내 문제는 수표 봉투에 작은 창이있는 수표에 인쇄 할 이름/주소를 얻을 수 없다는 것입니다. 주소 줄 사이의 간격이 너무 큽니다. HTML 문서의 글꼴 태그에 선 높이를 설정하고 있지만 넘겨지지 않습니다. 여기 HTML을 iTextSharp 행간 변환

특히, 주소의 일부입니다

  conn.Open(); 
      using (SqlDataReader itemReader = strSQL.ExecuteReader()) 
      { 
       checksHolder.InnerHtml += "<table cellSpacing=\"0\" cellPadding=\"0\" border=\"0\" width=\"100%\">\n"; 

       while (itemReader.Read()) 
       { 

        if (i % 3 == 0 && i != 0) 
        { 
         checksHolder.InnerHtml += "</table>\n"; 
         checksHolder.InnerHtml += "<!-- pagebreak -->\n"; 
         checksHolder.InnerHtml += "<table cellSpacing=\"0\" cellPadding=\"0\" border=\"0\" width=\"100%\">\n"; 
         f = 0; 
        } 

        if (i > 0 && i % 3 != 0) 
        { 
         checksHolder.InnerHtml += "<tr><td colspan=\"3\"><br/><br/><br/><br/><br/><br/>"; 
         checksHolder.InnerHtml += "</td></tr>\n"; 
        } 

        String[] tmpArray = getConsignorInfo(itemReader["check_cs_id"].ToString()); 

        int CheckNum = Int32.Parse(itemReader["check_number"].ToString()); 
        String CheckAmount = itemReader["check_amount"].ToString(); 
        String PayableTo = tmpArray[0]; 
        String Memo = itemReader["check_memo"].ToString(); 

        String name = tmpArray[0]; 
        String address = tmpArray[1]; 
        String city = tmpArray[2]; 
        String state = tmpArray[3]; 
        String zip = tmpArray[4]; 

        Char NBSP = '\u00A0'; 

        checksHolder.InnerHtml += "<tr><td colspan=\"3\"><br/><br/></td></tr>\n"; 
        checksHolder.InnerHtml += "<tr>\n"; 
        //checksHolder.InnerHtml += "<td width=\"5\"></td>\n"; 
        checksHolder.InnerHtml += "<td colspan=\"2\">\n"; 
        checksHolder.InnerHtml += "<font size=\"2\">\n"; 
        checksHolder.InnerHtml += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n"; 
        checksHolder.InnerHtml += PayableTo + "</font>\n"; 
        checksHolder.InnerHtml += "</td>\n"; 
        checksHolder.InnerHtml += "<td align=\"right\">\n"; 
        checksHolder.InnerHtml += "<font align=\"right\" size=\"2\">" + string.Format("{0:c}", Double.Parse(CheckAmount.ToString())).Replace("$", "") + "</font>\n"; 
        checksHolder.InnerHtml += "</td>\n"; 
        checksHolder.InnerHtml += "</tr>\n"; 
        checksHolder.InnerHtml += "<tr>\n"; 
        checksHolder.InnerHtml += "<td colspan=\"3\">\n"; 
        checksHolder.InnerHtml += "&nbsp;\n"; 
        checksHolder.InnerHtml += "</td>\n"; 
        checksHolder.InnerHtml += "</tr>\n"; 
        checksHolder.InnerHtml += "<tr>\n"; 
        checksHolder.InnerHtml += "<td colspan=\"3\">\n"; 
        checksHolder.InnerHtml += "<font size=\"2\">"; 
        if (wordify(decimal.Parse(CheckAmount.ToString())).Length >= 90) 
        { 
         checksHolder.InnerHtml += wordify(decimal.Parse(CheckAmount.ToString())); 
        } 
        else 
        { 
         string exes = " "; 
         for (int x = wordify(decimal.Parse(CheckAmount.ToString())).Length; x <= 90; x++) 
         { 
          exes += "x"; 
         } 
         checksHolder.InnerHtml += wordify(decimal.Parse(CheckAmount.ToString())) + exes; 
        } 
        checksHolder.InnerHtml += "</font>\n"; 
        checksHolder.InnerHtml += "</td>\n"; 
        checksHolder.InnerHtml += "</tr>\n"; 
        checksHolder.InnerHtml += "<tr>\n"; 
        checksHolder.InnerHtml += "<td colspan=\"2\">\n"; 

        checksHolder.InnerHtml += "<table cellSpacing=\"0\" cellPadding=\"0\" border=\"0\" width=\"100%\">\n"; 
        checksHolder.InnerHtml += "<tr>\n"; 
        checksHolder.InnerHtml += "<td colspan=\"2\"><br/>\n"; 
        checksHolder.InnerHtml += "<font size=\"2\" line-height=\"8p\">" + name + "<br/>\n"; 
        checksHolder.InnerHtml += address + "<br/>\n"; 
        checksHolder.InnerHtml += city + ",\n"; 
        checksHolder.InnerHtml += state + " \n"; 
        checksHolder.InnerHtml += zip + "</font>\n"; 
        checksHolder.InnerHtml += "</td>\n"; 
        checksHolder.InnerHtml += "</tr>\n"; 

        checksHolder.InnerHtml += "<tr>\n"; 
        checksHolder.InnerHtml += "<td colspan=\"3\">\n"; 
        checksHolder.InnerHtml += "<br/></td>\n"; 
        checksHolder.InnerHtml += "</tr>\n"; 

        checksHolder.InnerHtml += "<tr>\n"; 
        checksHolder.InnerHtml += "<td width=\"10\"></td>\n"; 
        checksHolder.InnerHtml += "<td>\n"; 
        checksHolder.InnerHtml += "<font size=\"2\">" + Memo.Substring(0, 50) + "...</font>\n"; 
        checksHolder.InnerHtml += "</td>\n"; 
        checksHolder.InnerHtml += "</tr>\n"; 
        checksHolder.InnerHtml += "</table>\n"; 

        checksHolder.InnerHtml += "</td>\n"; 
        checksHolder.InnerHtml += "<td valign=\"bottom\" width=\"40\">\n"; 
        checksHolder.InnerHtml += "<img valign=\"bottom\" align=\"left\" src=\"images/wesSig.png\" Alt=\"\" /><br/>\n"; 
        checksHolder.InnerHtml += "</td>\n"; 
        checksHolder.InnerHtml += "</tr>\n"; 


        i++; 
        f++; 
       } 

       checksHolder.InnerHtml += "</table>\n"; 

       itemReader.Close(); 
      } 

public void CreatePDFDocument(string strHtml) 
{ 
    string strFileName = HttpContext.Current.Server.MapPath("printCheck.pdf"); 
    // step 1: creation of a document-object 

    iTextSharp.text.Rectangle rec = new iTextSharp.text.Rectangle(612, 792); 
    Document document = new Document(rec); 
    document.SetMargins(45f, 30f, 55f, 30f); 

    // step 2: 
    // we create a writer that listens to the document 
    var pdfWriter = PdfWriter.GetInstance(document, new FileStream(strFileName, FileMode.Create)); 
    pdfWriter.InitialLeading = 12.5f; 

    string[] stringSeparators = new string[] { "<!-- pagebreak -->" }; 
    //Response.Write(strHtml); 
    string[] newString = strHtml.Split(stringSeparators, StringSplitOptions.None); 

    //HTMLWorker obj = new HTMLWorker(document); 

    document.Open(); 

    var xmlWorkerHelper = XMLWorkerHelper.GetInstance(); 
    var cssResolver = new StyleAttrCSSResolver(); 
    var xmlWorkerFontProvider = new XMLWorkerFontProvider(); 

    var cssAppliers = new CssAppliersImpl(xmlWorkerFontProvider); 
    var htmlContext = new HtmlPipelineContext(cssAppliers); 
    htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory()); 

    PdfWriterPipeline pdfWriterPipeline = new PdfWriterPipeline(document, pdfWriter); 
    HtmlPipeline htmlPipeline = new HtmlPipeline(htmlContext, pdfWriterPipeline); 
    CssResolverPipeline cssResolverPipeline = new CssResolverPipeline(cssResolver, htmlPipeline); 
    XMLWorker xmlWorker = new XMLWorker(cssResolverPipeline, true); 
    XMLParser xmlParser = new XMLParser(xmlWorker); 

    int i = 0; 
    foreach (String currentString in newString) { 
     if (i > 0) 
     { 
      document.NewPage(); 
     } 

     StringReader sr = new StringReader(currentString); 
     xmlParser.Parse(sr); 

     i++; 
    } 

    document.Close(); 

    ShowPdf(strFileName); 
} 

는 난 단지로 이름/주소를 넣어 반 인치가 있습니다. 두 번째 줄의 높이를 8px으로 지정하고 단지 8으로 지정하려고 시도했습니다. 아무것도 효과가 없습니다. 누구든지 라인 높이를 가지고 HTML을 포맷해야하는 방법을 알고 있습니까? 미리 감사드립니다.

+0

비추천 HTMLWorker 클래스 또는 최신 XML Worker를 사용하고 있는지 여부는 분명하지 않습니다. 이 정보가 없으면 질문에 답할 수 없습니다. –

+0

@ BrunoLowagie 답장을 보내 주셔서 감사합니다. HTMLWorker 클래스를 사용하고 있습니다. 그것이 더 이상 사용되지 않는다는 것을 알지 못했습니다. XMLWorker로 전환하는 데 신경 쓰지 않아도됩니다. 그냥 올바르게 작동합니다. – James

답변

0

나는 css와 div 태그를 사용할 수있는 itextsharp의 xmlworker (http://sourceforge.net/projects/xmlworker/)로 업그레이드했다. 여백은 작동하지 않지만 안타깝게도 패딩이 수행되므로 필요한 작업을 수행 할 수있었습니다.