我正在尝试使用HTMLRenderer和PDFSharp输出PDF文件。但我注意到,即使是非常简单的表也无法正确呈现。我将样式嵌入到网页中。我什至在元素上尝试过样式标签,但它们忽略了它们。
我在这里想念东西吗?
using PdfSharp.Pdf;
using System.IO;
using TheArtOfDev.HtmlRenderer.PdfSharp;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
string html = File.ReadAllText(@"1.htm");
PdfDocument pdf = PdfGenerator.GeneratePdf(html, PageSize.Letter);
pdf.Save(@"1.pdf");
}
}
}
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
<style>
.hdr { background-color:gray;}
.cell {background-color:burlywood;}
tr { color:blue;}
</style>
</head>
<body>
<table>
<tr class="hdr"><td>Colum1</td><td>Column2</td></tr>
<tr style="background-color: lightblue"><td>Chevy</td><td>Malibu</td></tr>
<tr><td class="cell">Honda</td><td style="background-color:gold">Accord</td></tr>
</table>
</body>
</html>
浏览器的输出在顶部,PDF在底部:
我无法找到问题的解决方案,因此,我找到了替代解决方案。我切换到选择HtmlToPdf。这是在NUGET中。
实现很简单
static void Main(string[] args)
{
SelectPdf.HtmlToPdf converter = new SelectPdf.HtmlToPdf();
SelectPdf.PdfDocument doc = converter.ConvertHtmlString(File.ReadAllText("3.htm"), @"file:///dev/pdf4/ConsoleApp1/");
doc.Save("3.pdf");
doc.Close();
}
他们提供了一个免费版本,将您限制在5页之内,并有其他一些限制,但是它完成了我一直在寻找的工作,而无需修改我的HTML。
我也喜欢他们如何实现图像渲染。通过指定基本URL,它可以按照您期望的方式呈现图像,而无需进行任何技巧。桌子的边框有点乱,但还不错。