您正在使用Wkhtmltopdf使用c#,Asp.net从Html页面创建PDF。 PDF是平滑创建的,但是当我将图像添加到HTML时,它不会显示在PDF上。
public static string HtmlToPdf(string pdfOutputLocation, string outputFilenamePrefix, string[] urls,
string[] options = null,
// string pdfHtmlToPdfExePath = "C:\\Program Files (x86)\\wkhtmltopdf\\wkhtmltopdf.exe")
string pdfHtmlToPdfExePath = "C:\\Program Files\\wkhtmltopdf\\wkhtmltopdf.exe")
{
string urlsSeparatedBySpaces = string.Empty;
try
{
//Determine inputs
if ((urls == null) || (urls.Length == 0))
throw new Exception("No input URLs provided for HtmlToPdf");
else
urlsSeparatedBySpaces = String.Join(" ", urls); //Concatenate URLs
string outputFolder = pdfOutputLocation;
string outputFilename = outputFilenamePrefix + "_" + DateTime.Now.ToString("yyyy-MM-dd-hh-mm-ss-fff") + ".PDF"; // assemble destination PDF file name
var p = new System.Diagnostics.Process()
{
StartInfo =
{
FileName = pdfHtmlToPdfExePath,
Arguments = ((options == null) ? "" : String.Join(" ", options)) + " " + urlsSeparatedBySpaces + " " + outputFilename,
UseShellExecute = false, // needs to be false in order to redirect output
RedirectStandardOutput = true,
RedirectStandardError = true,
RedirectStandardInput = true, // redirect all 3, as it should be all 3 or none
WorkingDirectory = HttpContext.Current.Server.MapPath(outputFolder),
CreateNoWindow = true
}
};
p.Start();
// read the output here...
var output = p.StandardOutput.ReadToEnd();
var errorOutput = p.StandardError.ReadToEnd();
// ...then wait n milliseconds for exit (as after exit, it can't read the output)
p.WaitForExit(60000);
// read the exit code, close process
int returnCode = p.ExitCode;
p.Close();
// if 0 or 2, it worked so return path of pdf
if ((returnCode == 0) || (returnCode == 2))
return outputFolder + outputFilename;
else
throw new Exception(errorOutput);
}
catch (Exception exc)
{
throw new Exception("Problem generating PDF from HTML, URLs: " + urlsSeparatedBySpaces + ", outputFilename: " + outputFilenamePrefix, exc);
}
}
这是我的HTML代码区域,用于显示Image ..
<div id="Image" class="right" style="background:#333;height:15%;width:25%;">
<img id="LogoImage" runat="server" width="100%" height="100%" src="../TempLogo/chafa.jpg" />
答案 0 :(得分:2)
尝试为图像src添加完整路径。这通常是由于“../TempLogo/chafa.jpg”实际上并不是wkhtmltopdf工作目录的正确相对URL。
所以,而不是“../TempLogo/chafa.jpg”尝试“C:/yourpath/TempLogo/chafa.jpg”或“file:/// C:/yourpath/TempLogo/chafa.jpg”并查看如果这有帮助。如果是这样,你的相对路径就是问题所在。
答案 1 :(得分:1)
将pdfkit与ruby一起使用,我发现如果我将带有STDIN图像的html文件发送到wkhtmltopdf,则图像不会呈现。 (即wkhtmltopdf - toto.pdf:没有图片)
如果我手动传递一个html文件(wkhtmltopdf toto.html toto.html)执行EXACT相同的命令,这是有效的。
不知道为什么,但是,我只是写了一个小包装来调用它,就是这样。
答案 2 :(得分:0)
我最近看到jpeg文件失败转换 - 问题是图像是灰度图像。
请注意,所有灰色图像都不一定是灰度图像 - 如果是这种情况,请使用irfanview等程序进行检查。
答案 3 :(得分:0)
我使用Views来存储我想要的每个pdf模板的HTML标记,我将模型传递给视图。使用Server.MapPath()将为您提供图像的完整路径。
<img src="@Server.MapPath("~/path/to/your/image.jpg")" />
答案 4 :(得分:0)
我有这个问题,对我来说,&#34;修复&#34;是删除高度属性。
而不是
<img id="Logo" runat="server" width="100%" src="../TempLogo/chafa.jpg" />
尝试
{{1}}
我对这种行为没有解释,这可能是一个错误。