Рендеринг локальных изображений с использованием ВтПечкин?
Я пытаюсь сгенерировать документы с использованием службы "ВайтПечкин", и до сих пор она работает безупречно, когда дело касается изображений URL. Однако, когда дело доходит до локальных изображений, кажется, что они вообще не генерируют изображение, как показано здесь:
Генерация документов:
public static void ConvertDoc(String html)
{
var document = new HtmlToPdfDocument
{
GlobalSettings =
{
ProduceOutline = true,
DocumentTitle = "Form documents",
Margins =
{
Top = 1.8,
Left = 2.5,
Right = 2.5,
Bottom = 2.5,
Unit = Unit.Centimeters
}
},
Objects =
{
new ObjectSettings { HtmlText = html,
WebSettings = new WebSettings() {
LoadImages = true
}
}
}
};
IConverter converter = new ThreadSafeConverter(
new PdfToolset(
new Win32EmbeddedDeployment(
new TempFolderDeployment())));
byte[] result = converter.Convert(document);
File.WriteAllBytes("C:/Users/jmann_000/Desktop/Test/program-test-2015.pdf", result);
}
}
}
Как видно из вышеизложенного, я также попытался установить для загрузки изображения значение true, которое не сработало. HTML в вопросе:
<td>
<table border="0" cellpadding="0" cellspacing="0" class="doc-header">
<tr>
<td width="300" align="left"><img src="img/logo.gif" width="240" alt="AeroCare"></td>
<td width="375"></td>
</tr>
</table>
</td>
Есть ли правильный способ создания изображения, если оно локальное?
1 ответ
wkhtmltopdf не работает в той же папке, что и ваш корневой проект, поэтому любой путь относительно вашего проекта не будет правильным для wkhtmltopdf.
Это создает проблемы с относительными изображениями, а также таблицами стилей CSS. В любом случае вам нужно указать полный путь к файлу.
Решение 1
Для MVC и Razor
это предоставить полный путь к вашему размещенному приложению, чтобы получить файл с вашего хоста.
@String root = http://localhost:port/
<img src="@String.Format("{0}img/logo.gif",root)" width="240" alt="AeroCare">
Решение 2
Получите файл, используя путь к файловой системе.
@String root = @HostingEnvironment.MapPath("~");
Если вы используете консольное приложение, замените его на
String root = AppDomain.CurrentDomain.BaseDirectory;
Но тогда вам нужен механизм для замены всех ссылок в файле HTML на полные пути.
Решение 3
Узнайте, из какого каталога запущен wkhtmltopdf, и попробуйте предоставить ссылки относительно этого каталога.