3

我开发了一个网页,允许用户像注册表单一样输入值。在保存数据时,我需要提供一个选项以将页面下载为 PDF 格式。

我尝试了以下方法:

  1. 我尝试使用 itextsharp dll。问题是我没有得到 PDF 文件中的所有内容。示例图像和样式未正确转换。
  2. 我尝试了一些第三方工具,例如(SautinSoft 的 PdfVision、ConvertApi、pdfcrowd)组件。所有的 dll 都将 URL 作为参数并转换为 PDF。通过这种方式,服务器端的 HTML 代码被转换为 PDF。我输入的值不在 PDF 中。

我从网上获得的示例代码(sautinsoft)。

 SautinSoft.PdfVision v = new SautinSoft.PdfVision();
        v.PageStyle.PageSize.Letter();
        byte[] pdf = v.ConvertHtmlFileToPDFStream(@"http://en.wikipedia.org/wiki/Main_Page");
        if (pdf != null)
        {
            Response.Buffer = true;
            Response.Clear();
            Response.ContentType = "application/PDF";
            Response.AddHeader("Content-Disposition:", "attachment; filename=Result.pdf");
            Response.BinaryWrite(pdf);
            Response.Flush();
            Response.End();
        }

对于(itextsharp)

protected override void Render(HtmlTextWriter writer)
{
MemoryStream mem = new MemoryStream();
StreamWriter twr = new StreamWriter(mem);
HtmlTextWriter myWriter = new HtmlTextWriter(twr);
base.Render(myWriter);
myWriter.Flush();
myWriter.Dispose();
StreamReader strmRdr = new StreamReader(mem);
strmRdr.BaseStream.Position = 0;
string pageContent = strmRdr.ReadToEnd();
strmRdr.Dispose();
mem.Dispose();
writer.Write(pageContent);
CreatePDFDocument(pageContent);


}

public void CreatePDFDocument(string strHtml)
{

string strFileName = HttpContext.Current.Server.MapPath("test.pdf");
// step 1: creation of a document-object
Document document = new Document();
// step 2:
// we create a writer that listens to the document
PdfWriter.GetInstance(document, new FileStream(strFileName, FileMode.Create));
StringReader se = new StringReader(strHtml);
HTMLWorker obj = new HTMLWorker(document);
document.Open();
obj.Parse(se);
document.Close();
ShowPdf(strFileName);


}

public void ShowPdf(string strFileName)
{
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", "inline;filename=" + strFileName);
Response.ContentType = "application/pdf";
Response.WriteFile(strFileName);
Response.Flush();
Response.Clear();
}

如果您有更好的解决方案,请告诉我。

4

2 回答 2

0

您可以尝试这个库来实现您想要实现的目标

http://code.google.com/p/wkhtmltopdf/

这是有关如何使用它的教程

https://gist.github.com/2341776

于 2012-10-31T14:32:16.903 回答
0

在之前的工作中,我们为 Persits Software AspPDF.NET(和“经典”AspPDF)支付了许可证,该软件运行良好。没有应用 CSS 或图像被排除在 PDF 之外没有任何问题——尽管太公平了,我们从不使用任何可以被认为是“高级”CSS 的东西。我认为您可以尝试一个免费演示,该演示会在您购买并应用注册密钥之前为您制作的 PDF 添加水印。

于 2012-10-31T14:40:30.963 回答