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

如何用Tampermonkey脚本将页面PDF转Base64并通过PrintNode API打印?

基于会话登录的PDF通过PrintNode自动打印解决方案

问题分析

目标页面https://example.com/InternalReport.php?id=417660直接返回PDF并由浏览器内置查看器渲染,但直接编码document.body会获取到查看器的HTML结构,而非原始PDF内容,导致PrintNode无法识别。

解决方案

重新请求当前页面URL获取原始PDF二进制数据,转成Base64后再调用PrintNode API发送打印请求。浏览器fetch默认携带当前会话Cookie,无需额外处理登录验证。

完整Tampermonkey脚本

// ==UserScript==
// @name         PrintNode自动打印会话PDF
// @namespace    http://tampermonkey.net/
// @version      0.1
// @match        https://example.com/InternalReport.php?id=*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // 重新请求当前页面,获取原始PDF二进制数据
    fetch(window.location.href, {
        method: 'GET',
        credentials: 'include' // 确保携带会话Cookie
    })
    .then(response => response.blob())
    .then(blob => {
        // 将Blob转换为Base64字符串
        const reader = new FileReader();
        reader.onloadend = function() {
            // 提取Base64部分(去掉"data:application/pdf;base64,"前缀)
            const base64Pdf = reader.result.split(',')[1];
            
            // 调用PrintNode API发送打印请求
            fetch("https://api.printnode.com/printjobs", {
                method: "POST",
                headers: {
                    'Content-Type': 'application/json',
                    // 注意:需要添加PrintNode API密钥到Authorization头
                    'Authorization': 'Basic ' + btoa('你的API密钥:')
                },
                body: JSON.stringify({
                    printerId: "71635092",
                    contentType: "pdf_base64",
                    content: base64Pdf
                })
            })
            .then(result => {
                console.log("打印请求发送成功:", result);
            })
            .catch(err => {
                console.error("打印请求失败:", err);
            });
        };
        reader.readAsDataURL(blob);
    })
    .catch(err => {
        console.error("获取PDF失败:", err);
    });
})();

关键说明

  • 重新请求URL:当前页面的响应本身就是PDF,直接fetch该URL可获取原始二进制数据,绕过浏览器内置查看器的DOM结构。
  • 会话保持:credentials: 'include'确保请求携带当前登录会话的Cookie,无需手动处理登录验证。
  • Base64转换:通过FileReader将Blob转为DataURL,再提取纯Base64字符串(去掉前缀),符合PrintNode的pdf_base64格式要求。
  • API授权:需要在请求头中添加PrintNode的API密钥,格式为Basic base64(API密钥:),注意末尾的冒号不能省略。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:50:51