2013-12-18 48 views
0

我正在研究asp.net应用程序,它以多种形式从用户处获取输入并以pdf格式保存。我的想法是,用户可以通过QR码共享生成的PDF。我已完成,直到将pdf保存到数据库中。我被困在如何实现这一目标。在asp.net中共享生成的pdf

有了这个,我附加代码在数据库中保存的PDF: -

StringWriter sw = new StringWriter(); 
    HtmlTextWriter hw = new HtmlTextWriter(sw); 
    GridView1.AllowPaging = false; 
    GridView1.DataBind(); 
    GridView1.RenderControl(hw); 
    StringReader sr = new StringReader(sw.ToString()); 
    Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f); 

    HTMLWorker htmlparser = new HTMLWorker(pdfDoc); 
    MemoryStream memoryStream = new MemoryStream(); 
    PdfWriter.GetInstance(pdfDoc, memoryStream); 
    pdfDoc.Open(); 

    pdfDoc.Add(new Paragraph("My first PDF")); 
    htmlparser.Parse(sr); 
    pdfDoc.Close(); 

    int id = 100; 
    int ic = 1234; 
    cmd = new SqlCommand("InsertPDF", con); 
    cmd.CommandType = CommandType.StoredProcedure; 

    cmd.Parameters.AddWithValue("@ID", id.ToString()); 
    cmd.Parameters.AddWithValue("@Pdf", memoryStream.ToArray()); 
    cmd.Parameters.AddWithValue("@IC", ic.ToString()); 
    cmd.ExecuteNonQuery(); 
+1

那么,你的问题到底是什么? – OldProgrammer

+0

我希望PDF可以分享给任何使用二维码的人 –

回答

2

这是说,你成功将其保存在数据库中,你只需要知道如何分享?

从本质上讲,QR码可以简单地是一个URL。所以你只需要该PDF的唯一URL。这可以使用PDF的数据库标识符来完成。 (它看起来像你在代码中手动创建一个标识符,这很奇怪,但只要它是独特的,那么我们就可以釉过去...)

如果你使用的是WebForms,重新寻找创造这样的事情:

~/GetPDF.aspx?id=123 

对于MVC,这样的事情:

~/PDF/Share/123 

(或者无论你想构建的每个URL,它给你不可否认我想不出为MVC的真正有意义的名称,但你知道更多关于你的应用程序和它做了什么,所以我即时通讯你应该能够拿出一些合适的东西。)

所以,基本上,你需要创建一个页面,它接受URL中PDF的唯一ID,使用该ID从数据库中获取PDF,然后将该PDF返回给用户。

对于WebForms,将PDF返回给用户需要清除响应,编写正确的标题,写入文件数据并结束响应。事情是这样的:

Response.Clear(); 
Response.ContentType = "application/pdf"; 
Response.Write(pdfData); 
Response.End(); 

在MVC它是一个更容易一点,你可以返回一个文件内容的结果与二进制数据从数据库中提取,也许简单的东西如:

return File(pdfData, "application/pdf", "FileName.pdf"); 

一旦你有这个,那么对于任何给定的PDF文件,你知道唯一的URL将是什么。只需换出共享给定文件的URL中的ID即可。该字符串是您创建QR码所需的全部内容。实际上,Google为此已有a handy API。事实上,你根本不需要做任何编码。

拥有该ID后,您可以使用带有该ID的PDF URL将图像添加到任何页面。该图片的网址直接转到Google并生成QR码。事情是这样的:

http://chart.apis.google.com/chart?cht=qr&chs=200x200&chl=http://www.mysite.com/GetPDF.aspx?ID=123 

例如,下面是这个堆栈溢出问题的QR码:

enter image description here

检查该图像的URL(单击鼠标右键,并在新标签中打开,使用FireBug,但是你想这样做)来查看URL的格式。这只是Google QR生成器API,后面是QR代码的文本,在我们的例子中是URL。

+0

我现在理解这个概念,但不知道如何开始,因为我是初学者在这个asp.net –

+1

@NOORMOHAMED:你会想把整体问题分解成小的离散步骤。我无法真正提供ASP.NET的端到端教程,但一般而言,Stack Overflow擅长回答特定问题的具体问题。当你实现这个时,你遇到的每个特定问题都可能是它自己的Stack Overflow问题。例如,如果在将PDF保存到数据库时发生错误,则与其余功能无关,并且是要解决的独立功能。与从数据库中取回PDF一样,发送给用户等等。 – David