web-dev-qa-db-ja.com

itextsharp-CSSが適用されない-C#.NET

iTextSharpページをHTMLに変換するためにPDFを使用しています。 here で指定されたヘルパークラスを利用しています。また、StyleSheet.LoadTagStyle()を利用してCSSを適用しようとしました。しかし、何も機能していないようです。何か洞察はありますか?

[〜#〜]編集[〜#〜]

私はこのようなスタイルを追加することができます-

.mystyle
{
   color: red;
   width: 400px;
}

次のコードで-

StyleSheet css = new StyleSheet();
css.LoadStyle("mystyle", "color", "red");
css.LoadStyle("mystyle", "width", "400px");

しかし、このような複雑なスタイルを使用するとどうなりますか?

div .myclass
{
    /*some styles*/
}

td a.hover
{
    /*some styles*/
}

td .myclass2
{
    /*some styles*/
}    
.myclass .myinnerclass
{
    /*some styles*/
}

ITextSharpを使用して追加するにはどうすればよいですか?

10
NLV

StyleSheet.LoadTagStyle() を使用することで、正しい方向に進んでいます。

基本的にそれは4つのステップのプロセスです:

  1. hTMLを文字列で取得する
  2. StyleSheet オブジェクトをインスタンス化し、必要なスタイルごとにStyleSheet.LoadTagStyle()を呼び出します。
  3. 呼び出し HTMLWorker.ParseToList()
  4. 上記の呼び出しから返された IElement (s)をDocumentオブジェクトに追加します。

これが簡単な HTTPハンドラー

<%@ WebHandler Language='C#' Class='styles' %>
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Web;
using iTextSharp.text.html;
using iTextSharp.text.html.simpleparser;
using iTextSharp.text;  
using iTextSharp.text.pdf;  

public class styles : IHttpHandler {
  public void ProcessRequest (HttpContext context) {
    HttpResponse Response = context.Response;
    Response.ContentType = "application/pdf";
    string Html = @"
<h1>h1</h1>
<p>A paragraph</p>    
<ul> 
<li>one</li>   
<li>two</li>   
<li>three</li>   
</ul>";
    StyleSheet styles = new StyleSheet();
    styles.LoadTagStyle(HtmlTags.H1, HtmlTags.FONTSIZE, "16");
    styles.LoadTagStyle(HtmlTags.P, HtmlTags.FONTSIZE, "10");
    styles.LoadTagStyle(HtmlTags.P, HtmlTags.COLOR, "#ff0000");
    styles.LoadTagStyle(HtmlTags.UL, HtmlTags.INDENT, "10");
    styles.LoadTagStyle(HtmlTags.LI, HtmlTags.LEADING, "16");
    using (Document document = new Document()) {
      PdfWriter.GetInstance(document, Response.OutputStream);
      document.Open();
      List<IElement> objects = HTMLWorker.ParseToList(
        new StringReader(Html), styles
      );
      foreach (IElement element in objects) {
        document.Add(element);
      }
    }
 }
  public bool IsReusable {
      get { return false; }
  }
} 

上記のコードを実行するには、バージョン5.0.6が必要です。 HTMLの解析のサポートが大幅に改善されました。

現在のバージョンでサポートされているタグを確認したい場合は、 HtmlTagsクラスのSVN を参照してください。

14
kuujinbo
var reader = new StringReader(text);
var styles = new StyleSheet();
styles.LoadTagStyle("body", "face", "Arial");
styles.LoadTagStyle("body", "size", fontSize + "px");
styles.LoadTagStyle("body", "font-weight", "bold");

ArrayList list = HTMLWorker.ParseToList(reader, styles);
for (int k = 0; k < list.Count; k++)
{

  var element = (IElement)list[k];

  if (element is Paragraph)
  {
    var paragraph = (Paragraph)element;
    paragraph.SpacingAfter = 10f;
    cell.AddElement(paragraph);
  }
 else
  cell.AddElement((IElement)list[k]);
}
3
Sharp