2017-04-26 1 views
1

Openxml을 사용하여 Word 문서를 만들려고하는데 Openxml이 필요한 방식으로 HTML 태그를 이해하지 못하는 경우 문제가 발생합니다. 내가 Html2Openxml 단락, 의 무리하지만 문제에 대한 것을 HTML 텍스트로 변환하는 것이 그것을 얻을Openxml - 스타일을 사용하여 HTML을 변환하는 방법?

using (var package = WordprocessingDocument.Create(filename, WordprocessingDocumentType.Document)) 
{ 
    package.AddMainDocumentPart(); 

    var mainPart = package.MainDocumentPart; 
    mainPart.Document = new Document(); 
    var body = new Body(); 

    var sectionProp = new SectionProperties(); 
    var pageSetup = new PageMargin() { Top = 1701, Left= 1134, Right = 1134, Bottom = 850 }; 
    sectionProp.Append(pageSetup); 

    body.Append(sectionProp); 

    var converter = new HtmlConverter(mainPart); 

    var para = converter.Parse(@"<b>Testing Html</b><b>Testing Html2</b>"); 

    var runProp = new RunProperties(); 
    runProp.Append(new Bold(), new FontSize() {Val = "32"}); 

    var paragProp = new ParagraphProperties(); 
    var justif = new Justification() {Val = JustificationValues.Center}; 
    paragProp.Append(justif); 

    body.Append(new Paragraph(paragProp, new Run(runProp, new Text("<b>Testing</b>"))), para[0]);  
    mainPart.Document.Append(body); 
} 

System.Diagnostics.Process.Start(filename); 

: 내 테스트 프로젝트에서

내가했던 두 번째 일을 (전혀 작동 방식을 볼 수 있습니다) 나
, 내가 또한 에 그것을 필요로하기 때문에 그것은 그것에 약간의 스타일을 더한다.

일부 스타일을 html로 보내야합니까 (어떻게해야할까요, 아니면 스타일을 ""사방에 적용하거나 CSS를 이해할 수 있습니까?) 제대로 변환 할 수 없거나 어떻게 든 할 수있는 방법이 있습니다. 개조 된 단락 스타일에 부여 하시겠습니까?

답변

1

제 경험상 Word는 연결된 스타일 시트를 처리하지 않습니다. 그리고 그 태그는 Word 문서 내에서 여전히 부정적인 시각적 영향을 미치기 때문에 좋은 RegularExpress를 사용하여 해당 태그를 찾아 제거해야했습니다.

Word로 내보낼 때 HttpWebRequest를 사용하여 내 스타일 시트를 실행하고 응답을 StringBuilder에 스트리밍하고 스타일 태그 내에있는 모든 콘텐츠를 스트리밍 한 다음 string.Replace를 사용하여 내 마크 업에있는 자리 표시 자 텍스트를 바꿉니다. (해당 자리 표시 자 텍스트는 Word로 인쇄 모드에있을 때만 표시됩니다.) 아래에서 "pageSource"는 브라우저로 나가는 대신 OnRender 이벤트의 HtmlTextWriter 텍스트입니다 (그 다음 HTML에서 string.Replace 및 Regex.Replace 등을 조작합니다). 사이트 보안 (토큰) 및 기타 쿠키 사용에 따라 CookieContainer 및 쿠키 foreach 루프가 필요할 수도 있고 필요하지 않을 수도 있습니다.

public string PutOurStylesInBlockForWordExport(string pageSource, string webRoot) 
    { 
     StringBuilder sb = new StringBuilder(); 
     sb.AppendLine(@"<style type=""text/css"">"); 

     HttpWebRequest req = WebRequest.Create(webRoot + "Styles/reset.css") as HttpWebRequest; 
     HttpWebRequest req2 = WebRequest.Create(webRoot + "Styles/style.css") as HttpWebRequest; 
     CookieContainer cc = new CookieContainer(); 
     req.CookieContainer = cc; 
     req2.CookieContainer = cc; 
     var cookies = HttpContext.Current.Request.Cookies; 
     foreach (string key in cookies.AllKeys) 
     { 
      Cookie c = new Cookie(cookies[key].Name, cookies[key].Value); 
      Uri root = new Uri(webRoot); 
      req.CookieContainer.Add(root, c); 
      req2.CookieContainer.Add(root, c); 
     } 

     System.Net.WebResponse resp = req.GetResponse(); 
     using (System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream())) 
     { 
      sb.Append(sr.ReadToEnd().Trim()); 
     } 

     System.Net.WebResponse resp2 = req2.GetResponse(); 
     using (System.IO.StreamReader sr = new System.IO.StreamReader(resp2.GetResponseStream())) 
     { 
      sb.Append(sr.ReadToEnd().Trim()); 
     } 

     sb.AppendLine(@"</style>"); 
     return sb.ToString(); 
    } 
관련 문제