【问题标题】:JWT Bearer token in ABCchrome headerABCchrome 标头中的 JWT Bearer 令牌
【发布时间】:2026-01-21 11:15:01
【问题描述】:

我正在使用 ABCPdf 11 将 html 转换为 pdf,我需要转换的 html 页面需要 JWT 令牌,因此需要传递给 ABCChrome 以便它可以使用 JWT 令牌。 我尝试了以下方法,但身份验证仍然失败:

doc.HtmlOptions.HttpAdditionalHeaders = $"Authorization: Bearer {accessToken}";

我从这里跟随示例:https://www.websupergoo.com/helppdfnet/default.htm?page=source%2F5-abcpdf%2Fxhtmloptions%2F2-properties%2Fhttpadditionalheaders.htm

根据上面网址中的描述,我也尝试了以下选项:

doc.HtmlOptions.NoCookie = true;
doc.HtmlOptions.Media = MediaType.Screen;

添加HttpAdditionalHeaders 之后,当我从 pdf 库中获取 http 状态时,我确实得到了 401 http 状态代码,它确认了

var imageId = doc.AddImageUrl(model.Url);
var status = doc.HtmlOptions.ForChrome.GetHttpStatusCode(imageId);

这里的状态是 401 - 未授权

【问题讨论】:

    标签: http-headers abcpdf


    【解决方案1】:

    ABCChrome 引擎目前不支持 HttpAdditionalHeaders 属性。 ABCChrome 支持的唯一 HtmlOptions 指定为here

    您可以尝试以下几种方法:

    1. 检查目标服务器是否支持通过 GET 请求参数发送 Web 令牌 - 我猜你可能已经这样做了 :-)
    2. 将 AddImageUrl 请求 URL 发送到中间 Web 服务器(甚至是本地 HttpServer)到一个脚本,该脚本可以根据任何 GET 参数为您获取页面。
    3. 如果您尝试访问的服务接受 ajax 请求,您可以尝试使用 javascript 将响应注入到使用 XMLHttpRequest.setRequestHeader() 的页面中。注意,如果您为此使用本地文件(例如 file://),您可能会遇到一些 Chromium 强制执行的 JavaScript 安全问题。

    我知道 WebSupergoo 为他们的所有许可证提供free support,包括试用许可证。

    祝你好运。

    【讨论】:

    • 谢谢,是的,我尝试下载 html 然后转换为 pdf 并且成功了。我在单独的答案中添加了示例代码。
    【解决方案2】:

    通过电子邮件发送的 ABCPdf 支持,不幸的是 ABCChrome 不支持 HttpAdditionalHeaders 属性,因此解决方法是自己下载 html 并将其转换为 PDF,请参见下面的示例:

    var imageId = doc.AddImageHtml(html); // <- html downloaded from auth url
    

    另外别忘了加分页:

    // add all pages to pdf
    while (doc.Chainable(imageId))
    {
        doc.Page = doc.AddPage();
        imageId = doc.AddImageToChain(imageId);
    }
    
    for (int i = 1; i <= doc.PageCount; i++)
    {
        doc.PageNumber = i;
        doc.Flatten();
    }
    

    【讨论】: