解决Edge打开部分PDF文档无法跳转到上次阅读位置的问题

概述

Edge浏览器从95版本开始就支持重新打开PDF时跳转到上次阅读位置的功能(详见Pick up where you left off on Microsoft Edge PDF Reader),在使用过程中发现,多数PDF文档在用Edge重新打开时确实能够自动跳转至上次查看的位置,但是部分PDF再次打开时却无法跳转,本文将浅析其中的原因并给出解决方法。

原理浅析

在Edge浏览器启用了PDF视图设置的情况下,Edge浏览器会在本地保存用户阅读PDF时的状态信息,包括页面位置、缩放比例和滚动位置,每次阅读PDF时,浏览器会记录当前状态并存储在本地,重新打开时读取这些信息并恢复。

而那些无法恢复上次浏览状态的PDF中往往都定义了一个OpenAction属性,这个属性用于定义PDF文档打开时的默认行为,如跳转到特定页面或执行JavaScript脚本。

如果PDF文档定义了OpenAction属性,该属性就会覆盖Edge浏览器默认的阅读状态恢复功能,比如OpenAction定义为跳转到第一页,那么用户每次用Edge打开PDF时就会跳转到第一页,而不是上次阅读的位置。

所以,只需要修改一下PDF文档,将无法自动跳转的PDF文档中的OpenAction属性删除,这个问题就能迎刃而解。

解决方法

大体上有两种方法删除OpenAction属性,一种是使用Adobe Acrobat Pro来修改PDF的文件属性,还有一种是使用其他PDF编辑工具修改。

如果你电脑上恰好安装了Acrobat Pro并且需要修改的PDF不多,那么使用方法一足够;而如果你的电脑上没有Acrobat Pro或者需要批量修改多个PDF,那么方法二更适合你。

不过,在修改PDF前,要先确保Edge浏览器版本高于95,并且已开启PDF视图设置。

确保开启PDF视图设置

你可以直接在Edge地址栏输入edge://settings/content/pdfDocuments或者按以下步骤查看或开启PDF视图设置

查看PDF视图设置1
查看PDF视图设置2
查看PDF视图设置3

在确认了PDF视图设置已开启后,如果还是有部分PDF文档无法做到再次打开时跳转到上次浏览的位置,就能使用如下方法修改PDF来解决。

方法一:使用Acrobat Pro

用Acrobat打开需要修改的PDF,打开文件属性

打开文件属性

在文件属性中选择初始视图,将放大率设为默认,随后点击确认

修改文件属性

最后,将修改保存到PDF文件

保存PDF文件

这样就能删除PDF中的OpenAction属性。

方法二:用其他工具

这里提供两种实现方法,一个是用JavaScript的pdf-lib库,还有一种是使用python第三方库pypdf对PDF进行修改,当然,此处仅为抛砖引玉,使用其他编程语言或库修改PDF也是可行的。

以下用到的代码均已在github开源:https://github.com/jiarandiana0307/patch-pdf-for-edge

1. JavaScript实现
最简便的方法是使用JavaScript的pdf-lib库来修改PDF文件,仅需一个HTML文件,在浏览器上即可实现修改,这里提供一个在线的使用示例:https://patchpdf.netlify.app

2. Python实现

首先要在本地安装好python环境,网上有很多安装python的教程,在此不再赘述。

然后用pip安装pypdf库

pip install pypdf

编写python脚本

import os
import pypdf


def remove_openaction(infile, outfile) -> bool:
    writer = pypdf.PdfWriter(infile)
    if writer.open_destination is None:
        return False

    writer.open_destination = None
    writer.write(outfile)
    return True


def main():
    for filename in os.listdir():
        if not os.path.isfile(filename) or os.path.splitext(filename)[1].lower() != '.pdf':
            continue

        try:
            result = remove_openaction(filename, filename)
            if result:
                print('modified', filename)
            else:
                print('no need to modify', filename)
        except Exception as e:
            print('failed to modify pdf', filename, e)

    input('enter to exit...')


if __name__ == '__main__':
    main()

将以上代码保存为一个patch_pdf_for_edge.py文件,并放在PDF文件所在的文件夹中,命令行运行此脚本即可将当前目录下的PDF文档中的OpenAction属性删除。

在使用以上方法删除了PDF的OpenAction属性后,尝试用Edge打开可以发现PDF能够跳转到上次浏览的位置了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值