将整个网页转换为pdf文件

问题描述 投票:0回答:1

我正在尝试使用.NET 将以下网页转换为 PDF 文档:

https://www.sec.gov/ix?doc=/Archives/edgar/data/55242/000005524224000055/kmt-20240630.htm

有人可以告诉我该怎么做吗?我尝试了 PDFsharp,但它正在创建带有 url 链接的 PDF:

        Byte[] res = null;

        using (MemoryStream ms = new MemoryStream())
        {
            var pdf = TheArtOfDev.HtmlRenderer.PdfSharp.PdfGenerator.GeneratePdf("https://www.sec.gov/ix?doc=/Archives/edgar/data/55242/000005524224000055/kmt-20240630.htm", PdfSharp.PageSize.A4);
            pdf.Save(ms);
            res = ms.ToArray();
        }

        System.IO.File.WriteAllBytes("TestPDF.pdf", res);
c# .net asp.net-mvc
1个回答
0
投票

恐怕没有一个库可以直接满足您的要求,因为当我们通过httpclient或postman等工具访问url时会收到403错误。

enter image description here

之前我有测试使用

Polybioz.HtmlRenderer.PdfSharp.Core
将html字符串转换为可以工作的PDF,这次我尝试通过httpclient获取html内容但收到403错误。于是我复制了浏览器的html响应进行测试,但又失败了,可能是因为html内容太复杂了。

HttpResponseMessage response = await _httpClient.GetAsync("https://www.sec.gov/ixviewer/ix.html?doc=/Archives/edgar/data/55242/000005524224000055/kmt-20240630.htm");
string HtmlContent = "";
if (response.IsSuccessStatusCode){
    HtmlContent = await response.Content.ReadAsStringAsync();
}

enter image description here

接下来我去了 PuppeteerSharp 并尝试了包

<PackageReference Include="PuppeteerSharp" Version="20.0.2" />
和下面的代码。

await new BrowserFetcher().DownloadAsync();
using var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true });
using var page = await browser.NewPageAsync();
await page.GoToAsync("https://www.sec.gov/ixviewer/ix.html?doc=/Archives/edgar/data/55242/000005524224000055/kmt-20240630.htm");
await page.PdfAsync(@"C:\example.pdf", new PdfOptions
{
    Format = PaperFormat.A4
});

上面的代码确实生成了一个pdf文件,但是内容如下,这可能表明我们的访问违反了网站的安全策略。

enter image description here

但是如果我将 URL 更改为

https://www.google.com/
,效果很好。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.