徐明的博客

I am a tower crane engineer

在 PDF 中删除页面时显示错误:“参数错误”

十月 10, 2025

 当您尝试从 PDF 中删除页面时,您会看到错误消息“参数错误”。当您尝试向 PDF 中插入或添加页面时,也可能会出现相同的错误消息。

Acrobat 发现 PDF 文件中的标记的底层结构存在某些问题时,就会出现“参数错误”错误。请尝试以下解决方案。

解决方案 1:将 PDF 与另一个 PDF 合并

  1. 打开 Acrobat。
    (Windows) 选择左上角的汉堡菜单 ,然后选择创建 > 将文件合并为单个 PDF

    (macOS) 从左上角,选择“文件”> 创建 > 将文件合并为单个 PDF

  2. 选择添加文件

  3. 浏览并选择显示错误消息“参数错误”的 PDF 文件,然后选择打开

  4. 合并文件栏中,选择添加文件下拉菜单,然后选择添加文件

  5. 浏览并选择另一个 PDF 文件,最好是一个单页的空白 PDF 文件,然后选择打开

  6. 选择合并合并文件。选定的文件将合并为一个 PDF,并在 Acrobat 中打开该文件 (Binder1.pdf)。

  7. 保存文件。使用“合并文件”操作选择您添加到 PDF 的所有页面(合并文件时您选择的另一个 PDF 的页面)。删除选定的页面:

    • 在新的 Acrobat 中,从全局栏的左上角,选择所有工具 > 组织页面。选择您要删除的页面,然后按删除
    • 在 Acrobat /2017 中,选择视图 > 工具 > 整理页面 > 打开。选择要删除的页面,然后选择删除图标或按 Delete 键。
    • 在 Acrobat XI 中,选择视图 > 工具 > 页面。 选择要删除的页面,然后在右侧窗格中选择删除或按删除
  8. 再次保存文件。要查看是否仍然出现错误,请尝试从 PDF 中删除页面。


原文链接:https://helpx.adobe.com/cn/acrobat/kb/bad-parameter-while-deleting-pages-in-acrobat.html

🤔AI学会了生成图像,人类却丢失了想象

八月 22, 2025

不知从什么时候开始,大量AI生成的图片和视频开始充斥网络世界,有些甚至能达到以假乱真的程度,当然更多的是那种一眼假、一眼AI的。似乎是一场AI技术的狂欢,大家都在比拼谁的技术更强,谁能用AI生成最棒的图片或视频。技术大佬们也在一刻不停的迭代自己的技术,各种AI大厂轮番登场,颇有百家争鸣的景象。不可否认,AI技术的发展为我们带来了很多便利,但是任何事物都有正反两面,在狂欢之余,是不是也该停下来思考一下,我们到底需要AI做什么?

🎮一款网页版红警修改金钱的方法

八月 05, 2025

共和国之辉网页版https://game.gongheguozhihui.com/

修改方法:

进入游戏后,打开浏览器的开发人员工具,打开控制台,输入Game.localPlayer._credits=999999回车,金钱数量999999随你定

🧩九宫格拼图的最少步骤解法|Bing必应拼图游戏

七月 28, 2025

最近使用Edge浏览器,目前有各种攒积分的任务,其中就有拼图游戏,就像这样:

玩过几次后我就思考有没有最优的解法,也就是步骤最少的复原方法。通过网上搜索,发现使用 A*(A-star)搜索算法 来找最短路径,是最常用的 8-puzzle 解法。

借助chatgpt,我这个编程入门选手也可以很快得到一个可执行的程序代码。

from heapq import heappush, heappop

# 目标状态
goal = "12345678_"

# 空格移动方向及其索引变化量
moves = {
    'U': -3,
    'D': 3,
    'L': -1,
    'R': 1,
}

# 特殊情况:哪些位置不能向左/右/上/下移动
invalid_moves = {
    'L': [0, 3, 6],
    'R': [2, 5, 8],
    'U': [0, 1, 2],
    'D': [6, 7, 8],
}

# 启发函数:曼哈顿距离
def manhattan(state):
    distance = 0
    for idx, val in enumerate(state):
        if val != "_":
            goal_idx = goal.index(val)
            distance += abs(idx // 3 - goal_idx // 3) + abs(idx % 3 - goal_idx % 3)
    return distance

# A* 求解函数
def solve_puzzle(start):
    visited = set()
    heap = []
    heappush(heap, (manhattan(start), 0, start, ""))  # (估值, 步数, 状态, 路径)

    while heap:
        priority, steps, state, path = heappop(heap)
        if state == goal:
            return steps, path

        if state in visited:
            continue
        visited.add(state)

        empty_idx = state.index("_")

        for move, delta in moves.items():
            new_idx = empty_idx + delta
            if empty_idx in invalid_moves[move] or not (0 <= new_idx < 9):
                continue
            # 交换空格与相邻数字
            state_list = list(state)
            state_list[empty_idx], state_list[new_idx] = state_list[new_idx], state_list[empty_idx]
            new_state = ''.join(state_list)
            if new_state not in visited:
                heappush(heap, (steps + 1 + manhattan(new_state), steps + 1, new_state, path + move))

    return -1, ""  # 无解

# 示例用法
if __name__ == "__main__":
    initial_state = "3754182_6"
    steps, solution = solve_puzzle(initial_state)
    print(f"最少步数: {steps}")
    print(f"操作路径: {solution}")

得到输出如下:

最少步数: 21
操作路径: ULDRUULDDRURULLDDRURD

🔁 操作说明(空格的移动方向)

每个字母代表一次点击使空格与相邻数字交换:

  • L:空格向左移(即点击其左边的数字)
  • R:空格向右移
  • U:空格向上移
  • D:空格向下移
  • 🔐当你使用VPN时,你必须要了解WebRTC漏洞

    七月 25, 2025

    WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音通话、视频通话以及P2P文件分享的技术规范和开源项目,目的是让开发者可以在网页和移动应用中实现不依赖第三方插件的实时通信功能。

    🔧 WebRTC 能做什么?

  • 视频通话:如 Google Meet、Zoom网页版
  • 语音通话:如 Discord、Messenger网页版
  • 屏幕共享
  • 实时聊天 + 文件传输(P2P)
  • 多方会议
  • 实时传感器或数据流传输
  • 🧠 WebRTC 泄露 IP 的原理

    ✅ 1. WebRTC 需要获取局域网和公网 IP

    WebRTC 为了实现端对端通信(P2P),必须知道用户设备的 真实 IP 地址,包括:

  • 局域网 IP(如 192.168.x.x 或 10.x.x.x)
  • 公网 IP(如果用户有公网地址或通过 STUN 获得)
  • 它会使用一个机制叫 ICE(Interactive Connectivity Establishment) 来尝试连接路径,这需要收集所有候选网络地址(ICE candidates),包括:

  • 主机候选(Host candidates)→ 本地 IP(内网 IP)
  • STUN 服务器返回的候选(Server reflexive candidates)→ 公网 IP
  • TURN 服务器候选(中继 IP)
  • 这些信息是通过浏览器的 JavaScript API 中的 RTCPeerConnection 自动收集并暴露的。

    ✅ 2. 恶意网站可用 JS 窃取你的 IP

    一个恶意网页可以运行如下 JS 代码,不经用户同意即可收集你的内网和公网 IP:

    let pc = new RTCPeerConnection({iceServers: []});
    pc.createDataChannel('');
    pc.createOffer().then(offer => pc.setLocalDescription(offer));
    pc.onicecandidate = event => {
      if (event.candidate) {
        console.log(event.candidate.candidate);
      }
    };
    

    输出结果类似:

    candidate:0 1 udp 2122252543 192.168.1.10 12345 typ host
    candidate:1 1 udp 1686052863 203.0.113.45 45678 typ srflx raddr 192.168.1.10 rport 12345
    
  • 192.168.1.10 是你的 本地 IP
  • 203.0.113.45 是通过 STUN 获得的 公网 IP
  • 这些数据是用来进行 NAT 穿透用的,但也可能被窃取。

    🔓 为什么这是一种“泄露”?

  • 因为:用户未明确授权访问 IP 地址,但 JS 就可以拿到。
  • 浏览器对 WebRTC 的 ICE 候选信息没有默认限制;
  • VPN 用户即使通过 VPN 上网,仍可能泄漏其真实的本地 IP 或运营商 IP。
  • 🔐 如何防止 WebRTC 泄露 IP?

    方法 1:浏览器禁用 WebRTC(不推荐除非你不用视频通话)

    Firefox:
  • 地址栏输入:about:config
  • 搜索:media.peerconnection.enabled → 设置为 false
  • Chrome:
  • 安装扩展程序(如 WebRTC Control)
  • 设置 chrome://flags 中的隐私选项(不总是可靠)
  • 方法 2:使用 VPN 提供的 DNS 和 IP 防泄漏防护

    一些 VPN 服务(如 NordVPN、ExpressVPN)会专门防止 WebRTC 泄漏公网 IP

    方法 3:使用浏览器插件屏蔽 STUN

    禁用 WebRTC 的好处

  • 🚫 防止真实 IP 泄漏
  • 🔐 增强隐私与匿名性
  • 🧱 阻止潜在的恶意利用
  • 禁用 WebRTC 的风险与影响

  • ❌ 无法使用视频通话 Google Meet、Zoom Web、Discord 等直接无法开启音视频通话
  • ❌ 屏幕共享失败 WebRTC 是浏览器中实现屏幕共享的核心机制之一
  • ❌ P2P 数据传输失效 不支持基于 WebRTC 的文件传输服务(如 ShareDrop)
  • ❌ 某些聊天网站功能损坏 Omegle、Chatroulette 等基于 WebRTC 的服务会报错或黑屏
  • ❌ 企业内协作工具异常 一些在线协作工具(如 Microsoft Teams Web、Jitsi Meet)将无法使用音视频功能
  • 最近文章