在 .NET 中将 HTML 转换为 PDF

概览

本文介绍如何使用 C# 将 HTML 转换为 PDF。它涵盖以下主题。

以下代码片段也适用于 Aspose.PDF.Drawing 库。

格式:HTML

格式:MHTML

格式:网页

C# HTML 转 PDF 转换

C# HTML 转 PDF 转换

Aspose.PDF for .NET 是一个PDF操作API,它可以让您无缝地将任何现有的HTML文档转换为PDF。HTML转PDF的过程可以灵活定制。

转换HTML为PDF

以下C#代码示例展示了如何将HTML文档转换为PDF。

步骤:在C#中转换HTML为PDF

  1. 创建 HtmlLoadOptions 类的实例。
  2. 初始化 Document 对象。
  3. 通过调用 Document.Save() 方法保存输出的PDF文档。
public static void ConvertHTMLtoPDF()
{
    HtmlLoadOptions options= new HtmlLoadOptions();
    Document pdfDocument= new Document(_dataDir + "test.html", options);
    pdfDocument.Save(_dataDir + "html_test.PDF");
}

Aspose.PDF 转换 HTML 到 PDF 使用免费应用

高级 HTML 到 PDF 转换

HTML 转换引擎具有多个选项,允许我们控制转换过程。

媒体查询支持

媒体查询是一种流行的技术,用于向不同设备提供定制的样式表。我们可以使用 HtmlMediaType 属性设置设备类型。

public static void ConvertHTMLtoPDFAdvanced_MediaType()
{
    HtmlLoadOptions options = new HtmlLoadOptions
    {
        // 设置打印或屏幕模式
        HtmlMediaType = HtmlMediaType.Print
    };
    Document pdfDocument= new Document(_dataDir + "test.html", options);
    pdfDocument.Save(_dataDir + "html_test.PDF");
}

启用(禁用)字体嵌入

HTML 页面通常使用字体(例如来自本地文件夹的字体、Google 字体等)。我们还可以使用IsEmbedFonts属性控制文档中的字体嵌入。

public static void ConvertHTMLtoPDFAdvanced_EmbedFonts()
{
    // 禁用字体嵌入
    HtmlLoadOptions options = new HtmlLoadOptions {IsEmbedFonts = false};
    Document pdfDocument= new Document(_dataDir + "test_fonts.html", options);
    pdfDocument.Save(_dataDir + "html_test.PDF");
}

管理外部资源加载

转换引擎提供了一种机制,允许您控制与HTML文档相关的某些资源的加载。 HtmlLoadOptions 类具有属性 CustomLoaderOfExternalResources,我们可以定义资源加载器的行为。 HtmlLoadOptions 类具有属性 CustomLoaderOfExternalResources,我们可以通过它定义资源加载器的行为。 假设我们需要将所有 PNG 图像替换为单个图像 test.jpg 并将外部 URL 替换为内部资源。 为此,我们可以定义一个自定义加载器 SamePictureLoader 并将 CustomLoaderOfExternalResources 指向这个名称。

public static void ConvertHTMLtoPDFAdvanced_DummyImage()
{
    HtmlLoadOptions options = new HtmlLoadOptions
    {
        CustomLoaderOfExternalResources = SamePictureLoader
    };
    Document pdfDocument= new Document(_dataDir + "test.html", options);
    pdfDocument.Save(_dataDir + "html_test.PDF");
}

private static LoadOptions.ResourceLoadingResult SamePictureLoader(string resourceURI)
{
    LoadOptions.ResourceLoadingResult result;

    if (resourceURI.EndsWith(".png"))
    {
        byte[] resultBytes = File.ReadAllBytes(_dataDir + "test.jpg");
        result = new LoadOptions.ResourceLoadingResult(resultBytes)
        {
            //设置 MIME 类型
            MIMETypeIfKnown = "image/jpeg"
        };
    }
    else
    {
        result = new LoadOptions.ResourceLoadingResult(GetContentFromUrl(resourceURI));
    }
    return result;
}

private static byte[] GetContentFromUrl(string url)
{
    var httpClient = new HttpClient();
    return httpClient.GetByteArrayAsync(url).GetAwaiter().GetResult();
}

将网页转换为PDF

将网页转换为PDF与转换本地HTML文档略有不同。为了将网页内容转换为PDF格式,我们可以首先使用HttpClient实例获取HTML页面内容,创建Stream对象,将内容传递给Document对象并以PDF格式呈现输出。

将托管在网络服务器上的网页转换为PDF时:

步骤:在C#中将网页转换为PDF

  1. 使用HttpClient对象读取页面内容。
  2. 实例化HtmlLoadOptions对象并设置基本URL。
  3. 初始化Document对象,同时传递流对象。
  4. 可选,设置页面大小和/或方向。
public static void ConvertHTMLtoPDFAdvanced_WebPage()
{
    const string url = "https://en.wikipedia.org/wiki/Aspose_API";
    // 设置页面大小为A3,方向为横向;   
    HtmlLoadOptions options = new HtmlLoadOptions(url)
    {
        PageInfo = {Width = 842, Height = 1191, IsLandscape = true}
    };
    Document pdfDocument= new Document(GetContentFromUrlAsStream(url), options);
    pdfDocument.Save(_dataDir + "html_test.PDF");
}

private static Stream GetContentFromUrlAsStream(string url, ICredentials credentials = null)
{
    using (var handler = new HttpClientHandler { Credentials = credentials })
    using (var httpClient = new HttpClient(handler))
    {
        return httpClient.GetStreamAsync(url).GetAwaiter().GetResult();
    }
}

提供凭据的网页到PDF转换

有时我们需要执行需要认证和访问权限的HTML文件的转换,以便只有经过认证的用户才能获取页面内容。这也包括一些在HTML中引用的资源/数据需要从某个需要认证的外部服务器获取的情况,为了满足这一需求,ExternalResourcesCredentials 属性被添加到 HtmlLoadOptions 类中。以下代码片段显示了在将HTML文件转换为PDF时传递凭据以请求HTML及其相应资源的步骤。

public static void ConvertHTMLtoPDFAdvanced_Authorized()
{
    const string url = "http://httpbin.org/basic-auth/user1/password1";
    var credentials = new NetworkCredential("user1", "password1");
    HtmlLoadOptions options = new HtmlLoadOptions(url)
    {
        ExternalResourcesCredentials = credentials
    };
    Document pdfDocument= new Document(GetContentFromUrlAsStream(url, credentials), options);
    pdfDocument.Save(_dataDir + "html_test.PDF");
}

private static Stream GetContentFromUrlAsStream(string url, ICredentials credentials = null)
{
    using (var handler = new HttpClientHandler { Credentials = credentials })
    using (var httpClient = new HttpClient(handler))
    {
        return httpClient.GetStreamAsync(url).GetAwaiter().GetResult();
    }
}

在单页中渲染所有HTML内容

Aspose.PDF for .NET 提供了在将HTML文件转换为PDF格式时在单页上渲染所有内容的能力。例如,如果您有一些HTML内容,其输出大小超过一页,您可以使用将输出数据渲染到单个PDF页面的选项。为使用此选项,HtmlLoadOptions 类通过 IsRenderToSinglePage 标志进行了扩展。下面的代码片段展示了如何使用这个功能。

// 完整示例和数据文件,请访问 https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// 文档目录的路径。
string dataDir = RunExamples.GetDataDir_AsposePdf_DocumentConversion();
// 初始化 HTMLLoadSave 选项
HtmlLoadOptions options = new HtmlLoadOptions();
// 设置渲染到单页属性
options.IsRenderToSinglePage = true;
// 加载文档
Document pdfDocument= new Document(dataDir + "HTMLToPDF.html", options);
// 保存
pdfDocument.Save(dataDir + "RenderContentToSamePage.pdf");

带SVG数据的渲染HTML

使用 SVG 数据渲染 HTML

Aspose.PDF for .NET 提供了将 HTML 页面转换为 PDF 文档的功能。由于 HTML 允许在页面中作为标签添加 SVG 图形元素,Aspose.PDF 也支持将此类数据转换为结果 PDF 文件。以下代码片段展示了如何将包含 SVG 图形标签的 HTML 文件转换为带标签的 PDF 文档。

// 完整示例和数据文件,请访问 https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// 文档目录的路径。
string dataDir = RunExamples.GetDataDir_AsposePdf_DocumentConversion();
// 设置输入文件路径
string inFile = dataDir + "HTMLSVG.html";
// 设置输出文件路径
string outFile = dataDir + "RenderHTMLwithSVGData.pdf";
// 初始化 HtmlLoadOptions
HtmlLoadOptions options = new HtmlLoadOptions(Path.GetDirectoryName(inFile));
// 初始化 Document 对象
Document pdfDocument = new Document(inFile, options);
// 保存
pdfDocument.Save(outFile);

将 MHTML 转换为 PDF

Aspose.PDF for .NET 为您提供免费的在线应用程序“MHTML 到 PDF”,您可以在此尝试探索其功能和工作质量。

Aspose.PDF 使用免费应用转换 MHTML 到 PDF

MHTML,即 MIME HTML 的简称,是一种网页存档格式,用于将通常通过外部链接表示的资源(如图片、Flash 动画、Java 小程序和音频文件)与 HTML 代码合并到一个文件中。 MHTML,即MIME HTML,是一种网页存档格式,用于将通常由外部链接(如图像、Flash动画、Java小程序和音频文件)表示的资源与HTML代码合并到一个文件中。

步骤:在C#中将MHTML转换为PDF

  1. 创建MhtLoadOptions类的实例。
  2. 初始化Document对象。
  3. 通过调用**Document.Save()**方法保存输出的PDF文档。
public static void ConvertMHTtoPDF()
{
    MhtLoadOptions options = new MhtLoadOptions()
    {
        PageInfo = { Width = 842, Height = 1191, IsLandscape = true}
    };
    Document pdfDocument= new Document(_dataDir + "fileformatinfo.mht", options);
    pdfDocument.Save(_dataDir + "mhtml_test.PDF");
}

另见

本文还涵盖了这些主题。 这篇文章还涵盖了这些话题。

格式: HTML

格式: MHTML

格式: 网页