簡體   English   中英

使用abcpdf將html文件下載為pdf

[英]download html file as pdf using abcpdf

如何在ASP.Net,C#中使用abcpdf將HTML文件下載為PDF?

這種方法在我們的項目中運作良好

    /// <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();
    }
}

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 ()函數的產品文檔中有一些您需要注意的更多信息,您可能還會發現' 分頁HTML示例 '很有幫助。

這就是您使用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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM