5

我需要在我正在处理的 Windows 应用程序中生成 PDF 报告,我通过将 .xlsx 文件导出为 pdf 来完成此操作。我目前正在为此使用互操作,但是:

  • 我需要这样做而不需要用户购买软件,所以没有microsoft office excel。
  • 我也不能使用任何重度依赖项(例如 open/libre office)。
  • 该应用程序位于 .NET winforms 中并且是本地的(不依赖于 Internet 连接)。

我尝试过的事情:

  • 我已经尝试过 iTextSharp 但这对于溢出列之类的事情变得非常复杂。
  • 尝试关闭XML,但无法转换为PDF。
  • (如前所述)尝试互操作但找不到使其独立于办公室的方法。

帮助将不胜感激,在此先感谢您:)

编辑:

iTextSharp

我会使用它,除非我需要导出一个具有可变列数(最多 30 列)的大 DataTable,如果有很多列,那么处理该列溢出会变得非常复杂,这在互操作中很容易。

假设

似乎太贵了,因为我在一家目前资源非常有限的小公司工作。

4

4 回答 4

8

另一个不错的选择是使用 Spire.XLS。虽然它会在顶部显示评估警告,但您可以使用 FreeSpire.XLS 摆脱它。下面是它的链接 https://www.nuget.org/packages/FreeSpire.XLS/

下面是取自的代码片段

https://forums.asp.net/t/2087645.aspx?Saving+xlsx+to+pdf

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Spire.Xls; 

namespace ConvertExcelToPdf 
{ 
    class Program 
    { 
        static void Main(string[] args) 
        { 

            Workbook workbook = new Workbook(); 
            workbook.LoadFromFile(@"..\..\sample2.xlsx"); 
            workbook.ConverterSetting.SheetFitToPage = true; 
            workbook.SaveToFile(@"..\..\sample.pdf", FileFormat.PDF); 
            System.Diagnostics.Process.Start(@"..\..\sample.pdf"); 
        } 
    } 
} 
于 2016-10-19T12:38:56.750 回答
2

不要使用 Excel 来布局您的报告,而是使用 HTML。它更加灵活,几乎是为最终用户布置数据的最简单工具。然后查找众多 HTML 到 PDF 解决方案之一(wkhtmltopdf、安装打印到 pdf 驱动程序等)

于 2013-03-11T03:30:28.810 回答
1

使用 OpenOffice 和 C# 从 excel 生成 PDF 的替代解决方案:

使用 C# 生成 PDF

于 2013-03-10T16:42:43.677 回答
0

我已经为此苦苦挣扎了几天。我不能使用任何付费图书馆,所以我想出了这个解决方案。它要求在用户电脑上安装 PDF 打印机,但使用“Microsoft to PDF”和许多其他可用的解决方案,这应该不是问题。

FileInfo templateFile = new FileInfo("template.xlsx");
    
System.Windows.Forms.PrintDialog printDialog = new System.Windows.Forms.PrintDialog();
// Display the dialog. This returns true if the user presses the Print button.
if (printDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
    Process print = new Process();

    print.StartInfo.FileName = templateFile.FullName;

    print.StartInfo.Verb = "PrintTo";

    print.StartInfo.Arguments = printDialog.PrinterSettings.PrinterName;

    print.StartInfo.UseShellExecute = true;

    print.StartInfo.CreateNoWindow = true;

    print.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

    print.Start();
}
于 2020-10-08T08:08:04.380 回答