C# 使用CSS从HTML在iTextSharp中呈现PDF

C# 使用CSS从HTML在iTextSharp中呈现PDF,c#,html,pdf,itextsharp,C#,Html,Pdf,Itextsharp,知道如何使用iTextSharp呈现PDF,以便使用CSS呈现页面吗。css可以嵌入到HTML中,也可以单独传递,我不在乎,只是希望它能够工作 具体的代码示例将不胜感激 另外,我真的很想坚持使用iTextSharp,不过如果你对其他东西有建议的话,它必须是免费的、开源的,并且有许可证允许在商业软件中使用它。现在不可能,但没有什么能阻止你启动开源项目。我可能真的开始一个,因为我也需要它 基本上,您需要将html和css标记转换为iTextSharp类的解析器。所以变成iTextSharp.Simp

知道如何使用iTextSharp呈现PDF,以便使用CSS呈现页面吗。css可以嵌入到HTML中,也可以单独传递,我不在乎,只是希望它能够工作

具体的代码示例将不胜感激


另外,我真的很想坚持使用iTextSharp,不过如果你对其他东西有建议的话,它必须是免费的、开源的,并且有许可证允许在商业软件中使用它。

现在不可能,但没有什么能阻止你启动开源项目。我可能真的开始一个,因为我也需要它

基本上,您需要将html和css标记转换为iTextSharp类的解析器。所以
变成
iTextSharp.SimpleTable
等等

这将很容易拿出原型,将能够与有限的html和css子集工作

更新:在这成为可能之前,这是我临时为自己解决问题的方式。只有两个步骤:

  • 告诉用户下载名为
  • 通过提供打印样式表,使所有html报告对打印机友好

    如果某些多页报告需要在每页上都有标题,请在AD html标记中设置标题

现在,用户将能够友好地打印,如果他们选择PDFCreator打印机驱动程序,他们甚至可以获得PDF格式的报告(还有其他PDF打印机驱动程序,但这一个是免费和开源的)

我也知道HTML不如PDF灵活,但它可能已经足够好了。我对真实用户做了一些测试,他们实际上很喜欢,因为他们现在不仅可以将任何内容打印到PDF(甚至在我的应用程序之外),而且他们的工作流程更快,因为他们不必下载并等待PDF阅读器打开。他们只是直接从网络浏览器打印(或导出为pdf)他们在网站上看到的内容。。。有点道理。

试试WKHTMLTOPDF

这是webkit的开源实现。两者都是免费的

我们已经设置了一个小教程

列出getListWeeks(int annee)
{
列表周=新列表();
DateTime beginDate=新的日期时间(annee,1,1);
DateTime endDate=新的日期时间(annee,12,31);
int nb=(int)beginDate.DayOfWeek;
DateTime monday=beginDate.AddDays(-nb+1);
DateTime周六=周一。添加天数(6);
而(星期一<结束日期)
{
添加(新日期时间[]{星期一、星期六});
星期一=星期一。添加天数(7);
星期六=星期一。附加天数(6);
}
返回周;
}

Ha……要是我有时间就好了。如果我还没有在做另一个我正试图使用iTextSharp的项目,我会这么做。另外…我在语法分析方面很烂…你应该看看。这里还有一个关于它的例子,解释了如何使用Nuget包管理器获取它。它基于Mic在另一个回答中提到的wkhtmltopdf。我将在我的新房地产项目中使用iTextSharp,我将从选定的房地产创建一个PDF文件,并将其发送打印。如果你提到的“使用css”是可能的,那就太好了。我希望有人能详细回答你的问题。谢谢你看,真糟糕!就像真的一样,它有时会消耗100%的cpu@ShilpaSoni奇怪的是,我们在生产中使用它已有多年了,而且从未遇到过任何CPU(或其他)问题。您可能有不太复杂的HTML。
 List<DateTime[]> getListWeeks(int annee)
        {
            List<DateTime[]> weeks = new List<DateTime[]>();
            DateTime beginDate = new DateTime(annee, 1, 1);
            DateTime endDate = new DateTime(annee, 12, 31);
            int nb =(int)beginDate.DayOfWeek;
            DateTime monday = beginDate.AddDays(-nb+1); ;
            DateTime saturday = monday.AddDays(6);
            while (monday < endDate)
            {
                    weeks.Add(new DateTime[] { monday, saturday });
                    monday = monday.AddDays(7);
                    saturday = monday.AddDays(6);
            }
            return weeks;
        }