Не применять CSS при создании PDF с помощью iTextsharp.dll - PullRequest
7 голосов
/ 18 ноября 2011

Я генерирую PDF, используя iTextSharp.dll, но проблема в том, что я не могу применить этот CSS. У меня есть один 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();

Ответы [ 3 ]

12 голосов
/ 18 ноября 2011

Здесь происходит несколько вещей.Прежде всего, анализатор HTML / CSS в iText и iTextSharp далек от завершения.Они определенно очень мощные, но у них еще есть пути.Каждая версия становится лучше, поэтому всегда проверяйте, используете ли вы последнюю версию.

Во-вторых, я видел больше HTML / CSS-активности в дополнении для iText / iTextSharp под названием XMLWorker, которое вы, возможно, захотитепосмотри на.Вы больше не «загружаете стили», вы просто передаете необработанный HTML / CSS, и он многое вычисляет.Вы можете увидеть примеры здесь , список поддерживаемых атрибутов CSS здесь , скачать здесь (и получить два отсутствующих файла здесь и здесь ).

В-третьих, LoadTagStyle предназначен для загрузки атрибутов стиля для тегов HTML, а не идентификаторов CSS или классов.Вы хотите использовать 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 и еще раз, поэтому они работают над новым XMLWorker выше.

Наконец, чтобы использовать шрифты по именам, вы должны сначала зарегистрировать их в iTextSharp, они не будут искать их:

iTextSharp.text.FontFactory.Register(@"c:\windows\fonts\cambria.ttc", "Cambria");
1 голос
/ 16 июля 2014

Правильный способ ссылки на цвет фона - через класс HtmlTags

styles.LoadTagStyle(HtmlTags.HEADERCELL, HtmlTags.BACKGROUNDCOLOR, "Blue");
1 голос
/ 20 сентября 2012

В случае, если у кого-то все еще есть проблемы с этим.Последняя версия itextsharp (в настоящее время 5.3.2) значительно улучшает процессор HTMLWorker.

вы можете получить здесь: http://sourceforge.net/projects/itextsharp/

...