Применить CSS к HTML строке с помощью iText7 pdfHTML - PullRequest
0 голосов
/ 09 июля 2020

Я загружаю код HTML, хранящийся в строковой переменной, в плагин iText7 pdf HTML; как я могу заставить мой CSS правильно работать с ним?

Вот подробности: у меня есть файл HTML, который служит шаблоном для документа, который я хочу создать в моем приложении. NET . Во время создания весь файл HTML считывается в строковую переменную с помощью StreamReader, затем различные заполнители в шаблоне заменяются заданными значениями c с помощью метода Replace. Эти значения взяты из запроса к базе данных. После выполнения замен готовый строковый объект отправляется методу HtmlConverter.ConvertToPdf для создания файла.

Я использую ConverterProperites.SetBaseUri, чтобы установить местоположение моего файла шаблона, так что iText7 будет возможность переходить по ссылкам в моем HTML к изображениям и связанным CSS файлам, например:

string destination = System.IO.Path.Combine(HttpContext.Current.Server.MapPath("~/pdf_repo/", "myFile.pdf");

ConverterProperties properties = new ConverterProperties();
properties.SetBaseUri(HttpContext.Current.Server.MapPath("~/templates/"));

HtmlConverter.ConvertToPdf(htmlString, new FileStream(destination, FileMode.Create), properties);

Однако в полученном PDF-файле отображается только выборочно примененный CSS. Текст, который должен быть выделен полужирным шрифтом, отображается полужирным шрифтом, и появляются изображения, но начертание шрифта с засечками, когда оно должно быть без засечек (предпочтительно Verdana), и все выравнивания текста неправильные. Ячейки таблицы в моем шаблоне имеют стиль с выравниванием по вертикали по центру, но вместо этого они выравниваются по верху.

My CSS правильно; шаблон отображается в браузере так, как должен. Почему здесь не работает?

Изменить: Вот несколько примеров, чтобы показать, о чем я говорю. Во-первых, образец моего шаблона HTML при просмотре в браузере. Вот как должен выглядеть получившийся PDF-файл с заполнителями, содержащимися в {}, замененными фактическим текстом.

Template example, displaying correctly

But when iText7 renders the template as a PDF, it only gets some things right:

Template example, as rendered by iText7

"Requested By", "Date" and "Territory" are displaying in bold as they should be, and the logo is being added, but the logo size and font-face are wrong, and the alignment of logo and header text is completely off.

Here's the HTML behind this section of the form, along with the header code so you can see how the CSS is being linked:

<!DOCTYPE html>


    
    
    


       Заявление на создание нового аккаунта   
image
Запрошено: {RequesterName} Дата: {requestDate}
Территория: {areaNumber}

В то же время CSS выглядит так. Опять же, это всего лишь образец:

body {
    font-family: sans-serif;
}

#container {
    max-width: 810px;
    width: 100%;
    margin: auto;
    padding: 0;
}

EDIT 2: Я ранее использовал iText.pdf HTML v3.0. После отката до версии 2.1 я смог, по крайней мере, заставить текст в моем PDF-файле отображаться шрифтом без засечек, хотя мое объявление семейства шрифтов CSS все еще игнорируется. Смещение изображения в примере, который я разместил ранее - и оказалось, что смещено было изображение, а не текст - оказалось моей ошибкой. У меня было "float: right" на img, которое вызывало проблему.

Остается вопрос, почему мое правило font-family CSS игнорируется.

...