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();
ここで起こっていることがいくつかあります。何よりもまず、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");
背景色を参照する正しい方法は、Htmlタグクラスを使用することです。
styles.LoadTagStyle(HtmlTags.HEADERCELL, HtmlTags.BACKGROUNDCOLOR, "Blue");
誰かがまだこれに問題がある場合に備えて。 itextsharpの最新バージョン(現在は5.3.2)は、HTMLWorkerプロセッサーを大幅に改善します。
ここで入手できます: http://sourceforge.net/projects/itextsharp/