XLS到pdf转换器 - 意外错误

时间:2011-05-03 08:50:32

标签: c# asp.net

我正在使用SautinSoft.XlsToPdf.dll将xls转换为pdf。 它在控制台应用程序中正常工作,但是错误“对象引用未设置为对象的实例”。在Web应用程序中,我不知道为什么。

 protected void Page_Init(object sender, EventArgs e)
    {

        byte[] pdfBytes = FromExcel(Server.MapPath("~/Doc/PlanningGame.xlsx"));
        Response.AppendHeader("content-disposition", "attachment;    filename=PlanningGame.pdf");
        Response.ContentType = "application/octet-stream";
        Response.Write(pdfBytes);
        Response.Flush();
        Response.End();
    }


    public static byte[] FromExcel(string xlsFile)
    {
        XlsToPdf xtop = new SautinSoft.XlsToPdf();

        byte[] pdfBytes = null;
        xtop.ConvertBytes(File.ReadAllBytes(xlsFile), ref pdfBytes);//"Object reference not set to an instance of an object." 

        string tempFileName = string.Format("{0}{1}", Config.TempDirectory, Guid.NewGuid().ToString());
        var bw = new BinaryWriter(new FileStream(tempFileName, FileMode.CreateNew));
        bw.Write(pdfBytes);
        bw.Close();

        return pdfBytes;

    }

File.ReadAllBytes(xlsFile)返回一个字节数组,因此它不是null。 xtop也不是空的。

更新 如果xlsFile位于Web应用程序目录中,则会引发错误。如果我使用这样的东西

 byte[] pdfBytes = null;
 xtop.ConvertBytes(File.ReadAllBytes("c:\\ExcelSheet.xls"), ref pdfBytes);

错误不会抛出。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

安全?我猜你的服务器无法访问包含该文档的目录。


编辑首先让我们检查一下:

public static byte[] FromExcel(string xlsFile)
{
    XlsToPdf xtop = new SautinSoft.XlsToPdf();

    byte[] xlsBytes = File.ReadAllBytes(xlsFile);
    // is xlsBytes null? put a break-point here, or debug-print statement if you can't debug a running server.
    byte[] pdfBytes = null; 
    xtop.ConvertBytes(xlsBytes, ref pdfBytes);

    string tempFileName = string.Format("{0}{1}", Config.TempDirectory, Guid.NewGuid().ToString());
    var bw = new BinaryWriter(new FileStream(tempFileName, FileMode.CreateNew));
    bw.Write(pdfBytes);
    bw.Close();

    return pdfBytes;

}