具备完整CSS支持的开源HTML到PDF渲染器

64

我之前曾在这里询问过如何使用iTextSharp将HTML和CSS样式表渲染为PDF,但似乎不可能实现...所以我想我需要尝试其他方案。

有没有一个开源的.NET/C#库可以接受HTMLCSS作为输入并正确呈现出来?我必须强调...这个库必须免费,最好是一个相对自由的许可证。我在这方面几乎没有预算可用。


我能想到的唯一解决方案是使用Python:http://www.htmltopdf.org/ - bchhun
你为什么要在评论中回答? - bentford
1
因为有很多类似但不完全相同的问题,所以我决定尝试收集一个完整的HTML到PDF转换器列表,并将其作为社区维基问题发布在http://stackoverflow.com/questions/3178448/list-of-html-to-pdf-converters上。 - rjmunro
1
我们如何投票以重新开放这个问题?@Kev - PeterX
这个问题在SO上不属于话题,但在softwarerecs.SE上是话题。请参阅如何将带有CSS的HTML转换为PDF? - Martin Thoma
6个回答

41

这个命令行工具十分实用!https://wkhtmltopdf.org/

它使用的是WebKit渲染引擎(Safari和KDE中也有应用),我在一些复杂的网站上测试了它,发现它比其他任何工具都要好。


14
实际上,它还有库版本,并且我已经为其实现了 .NET 封装器 https://github.com/gmanny/Pechkin(也在 NuGet 上)。 - Gman
1
太棒了!我试过iTextSharp和AsposePDF,但Aspose渲染效果很差,而iTextSharp则不断抛出异常。wkhtmltopdf第一次尝试就成功了,并且完美地呈现了所有内容。 - Sean Chase
@AlBelmondo - 它肯定会尊重在<head>标签内定义的CSS。有一个设置web.loadImages,它需要一个true/false值,但我还没有成功地加载图片。 - Peter Wone
tuesPechkin库对于wkhtmltopdf非常好且线程安全,但是无法同时处理转换 -- 这是我当前的问题。 - VFein
另外,如果我理解正确的话,Rotativa 也在底层使用 wkhtmltopdf - Guru Stron
显示剩余3条评论

17

我一直只在命令行中使用它而不是作为一个库,但HTMLDOC给我带来了很好的结果,并且它至少可以处理一些CSS(我无法轻易地看到有多少)。

下面是一个样例命令行:

htmldoc --webpage -t pdf --size letter --fontsize 10pt index.html > index.pdf

1
请问您能否解释一下如何使用那个库?可以提供C#或VB.net的代码吗? - Bilal lilla
1
@Bilal,正如我的回答所说,我一直在命令行上使用它而不是作为库。 - Norman Ramsey
只写出用于将HTML转换为PDF的代码行。 - Bilal lilla
@NormanRamsey它是否支持使用@fontface加载RTL语言的自定义TTF字体? - Volatil3
@mauvm 修复了链接。 - Norman Ramsey
显示剩余2条评论

2

0

-2

虽然它不是开源的,但你至少可以获得一个免费的个人使用许可证来使用Prince,它确实做得非常好。


18
是的,他们将他们的标志放在输出上。 - Levitikon
3
这个回答应该被删除。提问者显然是在寻找一个开源渲染器。 - Christian Neverdal
亲爱的,让我们开始担心七年前对封闭问题的回答。 - Charlie Martin
1
好的,现在让我们担心十年前的问题吧。 - Charlie Martin

-3

尝试使用webSupergoo的ABCpdf。它是一种商业解决方案,不是开源的,但标准版可以免费获得,并且可以满足您的要求。

ABCpdf完全支持HTML和CSS、实时表单和实时链接。它还在渲染时使用Microsoft XML Core Services (MSXML),因此结果应该与Internet Explorer中看到的完全相同。

在线演示可用于测试HTML到PDF的渲染,无需安装任何软件。请参见:http://www.abcpdfeditor.com/

以下C#代码示例显示了如何呈现单个页面的HTML文档。

Doc theDoc = new Doc();
theDoc.AddImageUrl("http://www.example.com/");
theDoc.Save("htmlimport.pdf");
theDoc.Clear();

要渲染多个页面,您需要AddImageToChain函数,该函数在此处记录: http://www.websupergoo.com/helppdf7net/source/5-abcpdf6/doc/1-methods/addimagetochain.htm

看起来标准版不再免费了,“ABCpdf .NET的许可证仅售329美元起。” - Levitikon
免费许可证是通过促销计划提供的。如果它消失了,请尝试在谷歌上搜索“websupergoo免费许可证”。请注意,此优惠仅适用于单个许可证。如果您需要购买许可证或其他许可证,则价格如Levitikon所述。 - AffineMesh
是的,@AffineMesh,您能否请修改您上面的文字,说“标准版本可以免费获得”。或者只是添加一个额外的注释。顺便说一下,我觉得他们的许可证有点令人困惑:“业主向您提供非独家、不可转让的许可证,遵守本协议的条款。”这是什么意思 - 我还需要获取一个吗? - PeterX

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接