我正在尝试将evoPDF集成到我的asp.net应用程序上。我通过ajax从我的html文件中发送部分html。一切都有效,直到这一部分。现在,当我从EvoPdf API调用这些方法时。
1. GetPdfBytesFromHtmlStream(Stream, Encoding,urlbase)
2. SavePdfFromHtmlStringToFile(String html,string filename,urlbase)
我发送的html块类似于
<ol class = "lol">
<li> HEY </li>
<li> Now </li>
</ol>
外部文件中的Css类似于
.lol {
background-color: red;
}
根据文档,第三个参数必须是你提取html块的原始Html的完整url。我上传了我的应用程序,因为尝试localhost / 3232不起作用。但是,我看不到在生成的Html中应用任何CSS。在文档中,他们还建议附加
<HEAD> <BASE HREF="full url to your html file"> </HEAD>
并使用此方法。
pdfConverter.GetPdfBytesFromHtmlString(String html);
我在上面尝试过的任何内容都不适用于CSS。任何想法......
答案 0 :(得分:3)
虽然可以在evoPDF的外部文件中使用html,但我不推荐它。而只是内联文档头部的样式。当我们为Careers 2.0设置PDF生成器时,我记得网址必须是网络服务器后面的实时网址,而不仅仅是相同目录结构中的相对链接。 evo pdf中还有一个超时,如果加载时间太长,可能会导致图像丢失,而内联的所有内容也会更好。
我还建议传递完全有效的html,而不仅仅是生成视图所需的片段。在幕后(至少在我们的evoPDF版本中),它只是提升浏览器实例并截取屏幕截图。根据doctype,它们的呈现方式略有不同。
答案 1 :(得分:0)
我用EvoPdf遇到了这个问题。我的修复是从web.config引用baseURL。我试图使用HttpContext.Current.Request.Url.AbsoluteUri;它在两个环境中工作但在另一台服务器上测试时没有。
<appSettings>
<add key="baseURL" value="http://your-domain.com/" />
</appSettings>
所以你专门设置它,并在更改后正确显示CSS。也适用于https。您可以对其进行硬编码以进行测试,而不是使用ConfigurationManager。
TextWriter outTextWriter = new StringWriter();
Server.Execute("Page1.aspx", outTextWriter);
Server.Execute("Page2.html", outTextWriter);
string htmlStringToConvert = outTextWriter.ToString();
outTextWriter.Close();
// Use the current page URL as base URL
string baseUrl = ConfigurationManager.AppSettings["baseURL"].ToString(); //HttpContext.Current.Request.Url.AbsoluteUri;
// Convert the page HTML string to a PDF document in a memory buffer
byte[] outPdfBuffer = htmlToPdfConverter.ConvertHtml(htmlStringToConvert, baseUrl);