C# 从.NET for scientific data(winforms)中的代码生成PDF报告需要哪些选项

C# 从.NET for scientific data(winforms)中的代码生成PDF报告需要哪些选项,c#,vb.net,winforms,pdf-generation,C#,Vb.net,Winforms,Pdf Generation,我有一个为.NET 1.1编写的“遗留”VB.NET应用程序(winforms),并在2.0下重新编译,该应用程序通过一个适合HTML的自定义XmlTextWriter包装器以HTML格式生成报告。如果用户愿意,他们会将报告打印成pdf格式 那是2003年,现在技术有了一些变化,特别是在C#/VB.NET世界中,客户希望跳过HTML部分,直接转到PDF。对于开源或低成本的PDF库,我有哪些选择?这些库与.NET配合良好,并且必须支持带有图片(由代码生成的位图)和文本的表 下面是生成的html呈现

我有一个为.NET 1.1编写的“遗留”VB.NET应用程序(winforms),并在2.0下重新编译,该应用程序通过一个适合HTML的自定义
XmlTextWriter
包装器以HTML格式生成报告。如果用户愿意,他们会将报告打印成pdf格式

那是2003年,现在技术有了一些变化,特别是在C#/VB.NET世界中,客户希望跳过HTML部分,直接转到PDF。对于开源或低成本的PDF库,我有哪些选择?这些库与.NET配合良好,并且必须支持带有图片(由代码生成的位图)和文本的表

下面是生成的html呈现的屏幕截图

显然,这需要一些清理,整理它和东西,但我对知道在这个项目中采用哪种技术感兴趣

这可能是我需要的,也可能已经过时了。我没有任何数据源可以提供我想要显示的所有信息。目前,它是从应用程序中的各种类中收集的,以便显示为html

有没有人有直接的经验

谢谢你的建议

更新1:
找到可能的副本。

您可以使用此免费打印驱动程序:


当你打印到它时,它会输出PDF。

在对其他库深感失望之后,我最终使用iTextSharp制作了一些格式复杂的图像抽认卡


与其他选项相比,它真正获得回报的是合格的文档。我相信还有一个自动选择。

两个月前我在研究这个话题,基本上你有两种方法:

DLL

  • 开源的iTextSharp——好吧,不要对它期望太高,它可以从简单的网页生成PDF,你的表格看起来相当复杂,尽管我的一些同事认为如果不调整它的源代码,你不会成功
  • 付费选项-我使用过ABCPdf,工作非常顺利,并不是所有的东西都能像在浏览器中显示的那样好,但它确实起到了作用,我相信还有更多类似的库
命令行工具

若你们足够幸运能够完全控制服务器,我认为这将是你们最好的选择

  • -良好的用户意见

但我没有尝试过Dos two,我使用了托管,因此它们不是我的选项

我以前使用iTextSharp生成PDF报告。虽然你必须习惯图书馆(而且它是一个广泛的图书馆),但一旦你掌握了窍门,它就不会那么糟糕了。我发现这本书很有帮助。尽管这本书是关于最初的Java库,而不是.NET端口,但大多数方法和类的名称都是相同的,所以这不是一个真正的问题

在使用iTextSharp时,我的一条建议是,您将一次又一次地编写大量相同的代码。(即,创建表格单元格,设置该表格单元格的字体、大小、颜色和边框,设置文本…)。帮自己一个忙,创建自己的小实用程序类,它将为您完成所有繁重的工作——否则,您将得到2000行代码,只需创建一些具有特殊格式的表

此外,还有一系列简短的文章,我第一次学习iTextSharp时发现这些文章很有用

编辑:

如果您对XHTML-->PDF转换器感兴趣,我刚刚发现了一个演示如何将开源Java库移植到.NET的示例。他让事情看起来很简单


有趣的是,“飞碟”似乎在引擎盖下使用iText来执行转换。

Report.NET是一个.NET PDF库,专门用于生成支持您要求的功能的报表。它比iTextPdf小,但可能足以满足您的需要:


(许可证是LGPL)。

我还建议看一看。对于付费产品来说,它的价格相当适中,但它支持许多功能,并且可以立即更新。

我刚刚写了一些文章,介绍了如何在几行代码中不使用任何外部DLL来实现这一点

下面是复制的简短代码:

// ----------------------------------------------------------------------------------------------
// If you run this on Windows 10 (having it's default printer "Microsoft Print to PDF" installed)
// This should print a PDF file named "CreatedByCSharp.PDF" in your "MyDocuments" folder
// containing the string "When nothing goes right, go left"
// ----------------------------------------------------------------------------------------------

// If not present, you will need to add a reference to System.Drawing in your project References
using System.Drawing;
using System.Drawing.Printing;


void PrintPDF()
{
    // Set the output dir and file name
    string directory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
    string file = "CreatedByCSharp.pdf";

    PrintDocument pDoc = new PrintDocument()
    {
        PrinterSettings = new PrinterSettings()
        {
             PrinterName = "Microsoft Print to PDF", 
             PrintToFile = true, 
             PrintFileName = System.IO.Path.Combine(directory, file),
        }
    };

    pDoc.PrintPage += new PrintPageEventHandler(Print_Page);
    pDoc.Print();
}

void Print_Page(object sender, PrintPageEventArgs e)
{    
    // Here you can play with the font style (and much much more, this is just an ultra-basic example)
    Font fnt = new Font("Courier New", 12);

    // Insert the desired text into the PDF file
    e.Graphics.DrawString("When nothing goes right, go left", fnt, System.Drawing.Brushes.Black, 0, 0);
}

在您走得太远之前,您有没有看过现有的HTML到PDF工具,它们可能会让您保留现有的(工作)代码?ABCpdf跃然纸上。你知道HTML->PDF有什么免费的开源选项吗?你也可以看看apache的batik,因为他们有一个免费的.NET端口?iTextSharp,但这不会处理HTML-您需要重做work@MarcGravel,iText/iTextSharp的最新版本不是免费的。他们被打了。什么服务器?这是winforms应用程序。达林的解决方案非常有效!飞碟确实使用最后一个免费(LGPL)iText版本生成PDF。NET中的飞碟太棒了。没有更多的创建表格单元格和东西-没有麻烦格式化输出-只需使用基本的html和css。。。谢谢你的编辑Pandincus!!!谢谢你的来信。当然,自2011年发布这篇文章以来,技术一直在进步。例如,内置的打印到pdf工具不存在。如果我今天这么做,我可能会选择Markdown而不是HTML。还有,CodeProject还活着吗?我以为一切都被GitHub吞噬了,而GitHub又被MS吞噬了。这是一个鱼吃鱼的世界。@ja72-关于CodeProject的生动性-好问题,我真的不知道,我已经有几年没有在那里活动了(除了发布这条提示)。看起来至少在某种程度上是这样。