【问题标题】:Error opening PDF file generated by asp.net打开由 asp.net 生成的 PDF 文件时出错
【发布时间】:2013-06-03 07:02:58
【问题描述】:

我正在尝试为我的网站生成 PDF。目前,我正在尝试从数据库中获取数据并将其显示在我的 PDF 文件中,但我的主要优先级实际上是从 asp:label 中获取值并将其导出为 pdf 格式。不幸的是,当我打开生成的 PDF 文件时,我收到了这个错误。

错误:打开此文档时出错。此文件已打开或被其他应用程序使用

protected void btnPDF_Click(object sender, EventArgs e)
    {

        var doc1 = new Document();
        var filename = DDLCase.SelectedItem.Text + ".pdf";
        var output = new FileStream(Path.Combine("C:\\Users\\apr12mpsip\\Desktop", filename), FileMode.Create);
        doc1.Open();

        PdfPTable table = new PdfPTable(3);
        PdfPCell cell = new PdfPCell(new Phrase("Header spanning 3 columns"));
        cell.Colspan = 3;
        cell.HorizontalAlignment = 1; 
        table.AddCell(cell);
        table.AddCell("Col 1 Row 1");
        table.AddCell("Col 2 Row 1");

        doc1.Add(table);

        SqlConnection con = new SqlConnection("Data Source = localhost; Initial Catalog = project; Integrated Security = SSPI");

        SqlCommand cm = new SqlCommand("Select typeofcrime, citizenreport from MemberReport where memberreportid='"+DDLCase.SelectedValue+"'", con);
        con.Open();
        SqlDataReader dr;
        dr = cm.ExecuteReader();
        while (dr.Read())
        {
            table.AddCell(dr[0].ToString());
            table.AddCell(dr[1].ToString());
        }
        dr.Close();


        doc1.Close();

    }

我检查了我的代码,但找不到任何方法来解决错误并成功获取值。

【问题讨论】:

  • 试试 doc1.Dispose();关闭后。
  • 这个方法没用。
  • 你处理输出对象了吗?

标签: c# html asp.net pdf adobe


【解决方案1】:

你会的

var doc1 = new Document();
var filename = DDLCase.SelectedItem.Text + ".pdf";
var output = new FileStream(Path.Combine("C:\\Users\\apr12mpsip\\Desktop", filename), FileMode.Create);
doc1.Open();
[... fetching some data and adding that to`doc1 ...]
doc1.Close();

您不会以任何方式将outputDocument doc1. 关联起来,这让您眼前一亮。因此,您的文件根本不会被写入,但也不会被关闭。

你很可能还想实例化一个PdfWriter,它写入output并从doc1:接收

var doc1 = new Document();
var filename = DDLCase.SelectedItem.Text + ".pdf";
var output = new FileStream(Path.Combine("C:\\Users\\apr12mpsip\\Desktop", filename), FileMode.Create);
PdfWriter.GetInstance(doc1, output); // instantiate a PdfWriter for doc1 and output
doc1.Open();
[... fetching some data and adding that to`doc1 ...]
doc1.Close();

【讨论】:

  • 我可以显示跨越 3 列的标题。但是如何显示数据库中的值?
  • 这完全是一个不同的问题。请将其本身作为一个 stackoverflow 问题并提供所需的信息,尤其是您想要实现的目标(您希望如何显示数据)、您尝试过的内容(您当前执行该任务的代码)以及以何种方式当前输出不满足您的要求。
猜你喜欢
  • 2015-10-08
  • 2010-12-24
  • 1970-01-01
  • 2018-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-04
  • 1970-01-01
相关资源
最近更新 更多