使用abcpdf将html文件下载为pdf

时间:2010-04-30 05:02:30

标签: asp.net html pdf download abcpdf

如何在ASP.Net,C#中使用abcpdf将HTML文件下载为PDF?

3 个答案:

答案 0 :(得分:1)

C#中的以下ASP.NET示例显示了如何从网页创建PDF并将其流式传输到Web浏览器......

<% @Page Language="C#" %>
<% @Import Namespace="WebSupergoo.ABCpdf7" %>
<%
Doc theDoc = new Doc();
theDoc.AddImageUrl("http://www.example.com");
byte[] theData = theDoc.GetData();
Response.Clear();
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "inline; filename=MyPDF.PDF");
Response.AddHeader("content-length", theData.Length.ToString());
Response.BinaryWrite(theData);
Response.End();
%>

将内容处置从“内联”更改为“附件”将改变行为。

您需要了解Doc.GetData()函数的产品文档中的更多信息,您也可能会发现“Paged HTML Example”有用。

答案 1 :(得分:1)

此方法适用于我们的项目

    /// <summary>
    /// Converts Html to pdf
    /// </summary>
    /// <param name="htmlOrUrl">Html markup of html page URL</param>
    /// <param name="isUrl">previous parameter is URL</param>
    /// <param name="highQuality">use high quality converter engine</param>
    /// <param name="indent">indent from all sides of the page</param>
    /// <returns>Memory stream with PDF-file</returns>
    public static MemoryStream HtmlToPDF(this String htmlOrUrl, Boolean isUrl, Boolean highQuality = false, Int32 indent = 20)
    {
        using (var doc = new Doc())
        {
            doc.Color.String = "0, 0, 0";
            doc.HtmlOptions.UseScript = true;
            doc.HtmlOptions.AddLinks = true;
            if (highQuality)
            {
                doc.HtmlOptions.Engine = EngineType.Gecko;
            }

            // 1. CONTENT BLOCK
            doc.Rect.Left = 0 + indent;
            doc.Rect.Top = 792 - indent;
            doc.Rect.Right = 612 - indent;
            doc.Rect.Bottom = 0 + indent;

            doc.AppendChainable(htmlOrUrl, isUrl);

            var ms = new MemoryStream();
            doc.Save(ms);
            if (ms.CanSeek)
            {
                ms.Seek(0, SeekOrigin.Begin);
            }
            return ms;
        }
    }

    /// <summary>
    /// Appends document with multipage content 
    /// </summary>
    private static void AppendChainable(this Doc doc, String htmlOrUrl, Boolean isUrl = false)
    {
        Int32 blockId = isUrl 
            ? doc.AddImageUrl(htmlOrUrl) 
            : doc.AddImageHtml(String.Format(HtmlWrapper, htmlOrUrl));

        while (doc.Chainable(blockId))
        {
            //doc.FrameRect(); // add a black border
            doc.Page = doc.AddPage();
            blockId = doc.AddImageToChain(blockId);
        }
    }

//用法

var testMs1 = ABCPdfConverter.ABCConverter.HtmlToPDF("https://developers.google.com
   /chart/interactive/docs/examples", true, false, 20);
testMs1.StreamToFile(@"D:/3.pdf");

//和Stream to file是

/// <summary>
/// Saves stream instance to file
/// </summary>
public static void StreamToFile(this MemoryStream input, String outputFileName)
{
    var dirName = Path.GetDirectoryName(outputFileName);
    var fileName = Path.GetFileName(outputFileName);
    if (String.IsNullOrEmpty(dirName) || String.IsNullOrWhiteSpace(fileName))
    {
        throw new IOException("outputFileName");
    }

    using (FileStream outStream = File.Create(outputFileName))
    {
        input.WriteTo(outStream);
        outStream.Flush();
        outStream.Close();
    }
}

答案 2 :(得分:0)

这是您使用ABCPdf实现该目标的方式。

http://www.websupergoo.com/helppdf7net/source/4-examples/13-pagedhtml.htm

Doc theDoc = new Doc();
theDoc.Rect.Inset(72, 144);

theDoc.Page = theDoc.AddPage();
int theID;
theID = theDoc.AddImageUrl("http://www.yahoo.com/");

while (true) {
  theDoc.FrameRect(); // add a black border
  if (!theDoc.Chainable(theID))
    break;
  theDoc.Page = theDoc.AddPage();
  theID = theDoc.AddImageToChain(theID);
}

for (int i = 1; i <= theDoc.PageCount; i++) {
  theDoc.PageNumber = i;
  theDoc.Flatten();
}

theDoc.Save(Server.MapPath("pagedhtml.pdf"));
theDoc.Clear();