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を使用して追加するにはどうすればよいですか?
StyleSheet.LoadTagStyle() を使用することで、正しい方向に進んでいます。
基本的にそれは4つのステップのプロセスです:
これが簡単な 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 を参照してください。
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]);
}