web-dev-qa-db-ja.com

生成中にCSSを適用しないPDF iTextsharp.dllを使用

ITextSharp.dllを使用してPDFを生成していますが、問題はそのCSSを適用できないことです。1つのdivがあります。

 <div id="personal" class="headerdiv">
      Personal Data
 </div>

これで、私の.aspx.csコードは次のようになります。

   iTextSharp.text.html.simpleparser.StyleSheet styles = new         iTextSharp.text.html.simpleparser.StyleSheet();

    styles.LoadTagStyle("#headerdiv", "height", "30px");
    styles.LoadTagStyle("#headerdiv", "font-weight", "bold");
    styles.LoadTagStyle("#headerdiv", "font-family", "Cambria");
    styles.LoadTagStyle("#headerdiv", "font-size", "20px");
    styles.LoadTagStyle("#headerdiv", "background-color", "Blue");
    styles.LoadTagStyle("#headerdiv", "color", "White");
    styles.LoadTagStyle("#headerdiv", "padding-left", "5px");

    HTMLWorker worker = new HTMLWorker(document);
    worker.SetStyleSheet(styles);


    // step 4: we open document and start the worker on the document 
    document.Open();
    worker.StartDocument();
    // step 5: parse the html into the document      
    worker.Parse(reader);
    // step 6: close the document and the worker     
    worker.EndDocument();
    worker.Close();
    document.Close();
7
Kartik

ここで起こっていることがいくつかあります。何よりもまず、iTextとiTextSharpのHTML/CSSパーサーは完全にはほど遠いです。彼らは間違いなく非常に強力ですが、それでも行く方法があります。各バージョンは改善されるため、常に最新バージョンを使用していることを確認してください。

次に、XMLWorkerと呼ばれるiText/iTextSharpのアドオンでHTML/CSSアクティビティが増えているのを確認しました。もう「スタイルをロード」する必要はありません。生のHTML/CSSを渡すだけで、多くのことがわかります。あなたはいくつかを見ることができます ここの例 、リストを見る サポートされているCSS属性はここここからダウンロード (そして2つの不足しているファイルを取得する ここ および ここ )。

第三に、LoadTagStyleは、CSS IDやクラスではなく、HTMLタグのスタイル属性をロードするためのものです。 LoadStyleを使用して、クラスごとにロードします。

styles.LoadStyle("<classname>", "<attribute>", "<value>");

残念ながら、この方法では、常に実行したいことを実行できません。たとえば、フォントサイズを変更するには、次のように言います。

styles.LoadStyle("headerdiv", "font-size", "60ptx);

ただし、これを機能させるには、相対的なHTMLフォントサイズ(1、2、-1など)またはPTサイズのみを使用でき、sizeプロパティを使用する必要があります。

styles.LoadStyle("headerdiv", "size", "60pt");
//or
styles.LoadStyle("headerdiv", "size", "2");

LoadStyleは正直なところ、部分的にしか完了していない後付けのように感じます。実際には使用しないことをお勧めします。代わりに、可能であれば、スタイル属性を直接インラインで記述することをお勧めします。

string html = "<div id=\"personal\" class=\"headerdiv\" style=\"padding-left:50px;font-size:60pt;font-family:Cambria;font-weight:700;\">Personal Data</div>";

明らかに、これはCSSのポイントを打ち負かします。そのため、CSSは上記の新しいXMLWorkerに取り組んでいます。

最後に、名前でフォントを使用するには、最初にフォントをiTextSharpに登録する必要があり、フォントを探すことはありません。

iTextSharp.text.FontFactory.Register(@"c:\windows\fonts\cambria.ttc", "Cambria");
12
Chris Haas

背景色を参照する正しい方法は、Htmlタグクラスを使用することです。

styles.LoadTagStyle(HtmlTags.HEADERCELL, HtmlTags.BACKGROUNDCOLOR, "Blue");
1
thx0125

誰かがまだこれに問題がある場合に備えて。 itextsharpの最新バージョン(現在は5.3.2)は、HTMLWorkerプロセッサーを大幅に改善します。

ここで入手できます: http://sourceforge.net/projects/itextsharp/

1
Shaz