You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET实现整网页转PDF求助:PDFSharp仅生成含链接文件

解决.NET中动态网页转PDF仅显示链接的问题

你当前的问题出在目标SEC页面是动态渲染页面,依赖JavaScript加载并渲染内容,但HtmlRenderer.PdfSharp只能解析静态HTML,无法执行页面中的JS逻辑,所以只能抓取到页面初始加载的静态链接,拿不到后续动态生成的完整内容。

下面提供两种可靠的解决方案:

方案一:使用PuppeteerSharp(无头Chrome)

PuppeteerSharp通过模拟真实Chrome浏览器,可以完全渲染动态页面,生成完整的PDF。

步骤:

  1. 安装NuGet包:PuppeteerSharp
  2. 编写代码:
using PuppeteerSharp;
using System.IO;

class Program
{
    static async Task Main(string[] args)
    {
        // 下载Chrome(首次运行需要,后续可跳过)
        await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultChromiumRevision);

        var targetUrl = "https://www.sec.gov/ix?doc=/Archives/edgar/data/55242/000005524224000055/kmt-20240630.htm";
        var outputPath = "TestPDF.pdf";

        using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
        {
            Headless = true, // 无头模式,不显示浏览器窗口
            Args = new[] { "--no-sandbox", "--disable-setuid-sandbox" } // 解决部分环境的权限问题
        });

        using var page = await browser.NewPageAsync();
        await page.GoToAsync(targetUrl, new NavigationOptions { WaitUntil = WaitUntilNavigation.Networkidle0 }); // 等待页面完全加载

        // 生成PDF
        await page.PdfAsync(new PdfOptions
        {
            Path = outputPath,
            Format = PaperFormat.A4,
            PrintBackground = true // 确保背景样式也被渲染
        });
    }
}

方案二:使用Playwright(微软维护的无头浏览器工具)

Playwright是微软推出的跨浏览器自动化工具,支持Chrome、Firefox、Edge,同样能完美处理动态页面。

步骤:

  1. 安装NuGet包:Microsoft.Playwright
  2. 首次运行需要安装浏览器驱动:在Package Manager Console执行InstallPlaywright.ps1(Windows)或InstallPlaywright.sh(Linux/macOS)
  3. 编写代码:
using Microsoft.Playwright;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var targetUrl = "https://www.sec.gov/ix?doc=/Archives/edgar/data/55242/000005524224000055/kmt-20240630.htm";
        var outputPath = "TestPDF.pdf";

        using var playwright = await Playwright.CreateAsync();
        await using var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions { Headless = true });
        var page = await browser.NewPageAsync();
        
        await page.GotoAsync(targetUrl, new PageGotoOptions { WaitUntil = WaitUntilState.NetworkIdle });
        await page.PdfAsync(new PagePdfOptions { Path = outputPath, Format = PaperFormat.A4, PrintBackground = true });
    }
}

补充说明

如果坚持要使用HtmlRenderer.PdfSharp,需要先获取页面渲染完成后的完整HTML(比如通过无头浏览器抓取已渲染的HTML),再传入GeneratePdf方法,但这种方式步骤更繁琐,不如直接用无头浏览器生成PDF高效。

内容的提问来源于stack exchange,提问作者Tronics

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 11:02:44