导出 pdf 后页面内引用链接失效,页面内无法跳转

本贴最后更新于 206 天前,其中的信息可能已经时移世异

去年也有人提过这个问题,现在仍然没有解决:导出为 pdf 时,页内跳转功能的引用失败 - 链滴

当前软件版本:v3.1.9

类似的问题:思源为什么不能兼容 markdown 的锚点语法 - 链滴

另外说下我的需求:

  1. 长篇幅图文编辑,本地存储
  2. 可以导出 pdf 分享,且最大限度还原导出前的浏览体验

用 typora 或者 obsidian 导出 pdf 都可以正常点击页内锚点进行跳转。但无奈 typora 篇幅长了就卡顿,obsidian 太难折腾。希望思源能优化好 pdf 分享功能。

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    25487 引用 • 105392 回帖
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    9750 引用 • 44355 回帖 • 88 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • @88250 PDF 内的跳转有办法搞吗?

    1 回复
  • 88250

    我这里测试引用导出脚注后可以跳转的。

    2 回复
  • 我指的是这种点击块引用之后需要能跳转到对应的地方:

    image.png

    1 回复
  • FUN
    作者

    脚注确实可以,但是浏览体验不如锚文本,不懂思源为什么不能直接锚文本点击跳转

    1 回复
  • 88250

    导出 PDF 时仅支持转换脚注导出,从引用处可以跳转到脚注定义处。

    1 回复
  • 88250

    因为引用的定义以脚注的方式插入到末尾这样更有条理,否则没有地方放置定义块。

    1 回复
  • FUN
    作者

    那为何导出前可以锚文本点击跳转,导出后就不能了呢。如果要条理,不如前后统一,这种导出后前后不一致的阅读体验太差了。

    1 回复
  • FUN
    作者

    导出后锚文本跳转在技术上应该不是问题,不知道开发者是否注意到这个需求

    1 回复
  • 88250

    导出前是在思源应用内,所以可以使用思源的特性,比如引用浮窗等,但是导出 PDF 就没办法用这些特性了,只能找一些较为合理的方案,比如转换为脚注。

  • 88250

    前面已经解释过为什么不采用直接引用跳转了,因为定义块没有地方放,统一转换脚注是目前我们能找到的最优解。

    如果你有更好的方案可以详细描述一下,我们讨论看看。

    2 回复
  • FUN
    作者

    好吧谢谢回复,那应该就是技术上没办法这么做了。但是我又试了下脚注跳转,发现并不是跳转到被链接处,而是在文末新建了被链接的内容,相当于把锚文本整理成了文末的“参考文献”,这种方式对于长文本阅读并无帮助,只能算是无奈之举。

    微信截图 20241019123848.png

    1 回复
  • 88250

    不是技术问题,而是设计上没有比转换脚注更好的方案。我觉个例子你就明白了,比如引用 A,A 是个文档,如果不转换脚注,A 文档放置在何处?

    你现在的示例里看不到跳转定位效果是因为篇幅太短了,你试下导出用户指南首页就能看到效果了。

    2 回复
  • FUN
    作者

    个人人为思源的引用浮窗作用不大,容易遮挡原本的内容,直接点击锚文本跳转,然后“alt+←”或者鼠标侧边返回键返回到初始浏览位置,这样更符合直觉。可以参考 typora 的跳转效果,非常丝滑。

    1 回复
  • 88250

    浮窗在有的时候更方便,跳转反而比较麻烦,这个看个人使用喜好了。

  • 增加一种这样的方案行不行:

    1. 引用的是非当前文档(及其子文档)中的内容,在导出 PDF 之后转换为脚注;
    2. 引用的是当前文档(及其子文档)中的内容,在导出 PDF 之后可以直接点击跳转。
    2 回复
  • FUN
    作者

    我明白你的意思了,思源的引用源除了文章内的内容,还可以是文章外的文档等资源。但是我想要的功能是,长文本内部的跳转,引用的内容也全部是文章内的,所以不存在你说的文章外的引用。

    我发的示例不是篇幅太短看不到跳转效果,可以看到跳转效果,但是我需要的是跳转到被引用的位置,而不是跳转到文末的“参考文献”

    1 回复
  • 88250

    那混合的时候咋办?而且是无法区分混合情况的,因为可以递归引用。

    3 回复
  • FUN
    作者

    对!就是这样,@88250

  • 88250

    如果需求多了会考虑处理这种特例情况,转换脚注的方案是目前通用的最优解。

  • FUN
    作者

    引用源在文章内部还是外部这个没办法区分吗?

  • 我感觉递归引用应该不会影响跳转

  • FUN 1 赞同
    作者

    假如我要导出的文章是 A,A 里面的 a1 块 引用了文章内的 a2 块,a2 块 里又引用了 文章 B 的 b 块,那么对于导出的文章 A 来说,只需实现 a1 到 a2 的锚文本跳转即可,a2 块 到 b 块 的引用则转换为脚注。

    按理说,混用的情况包括递归引用都是可以区分的。

    1 回复
  • 88250

    那如果 b 块又引用了 A 中的块呢?脚注定义中跳转正文逻辑不对,所以现在统一为脚注。

    1 回复
  • FUN
    作者

    按照 @JeffreyChen 说的准则判断即可:b 块引用了 A 中的块,即引用的是当前文档的内容,那就是可以直接点击跳转的。

    我认为脚注适合学术论文中参考文献这种方式,也就是被引用的源不在文章内,这本身就和页内跳转这个功能没有关系,就像你说的脚注定义与跳转正文的逻辑不对。

    页内跳转是为了更方便长文本阅读,能快速的在文章内部建立联系;而脚注则是与文章外部建立联系。

    希望官方能重视这个问题,对于长文本分享 pdf 还是非常必要的。

    2 回复
  • 88250

    等后面继续收集需求再考虑吧,现在还有很多比这个重要的任务待开发,谢谢。

    1 回复
  • FUN 1
    作者

    好的,希望下次用回思源时能更好用,加油!

  • Achuan-2 via Android

    支持这样改进

请输入回帖内容 ...

推荐标签 标签

  • 分享

    有什么新发现就分享给大家吧!

    248 引用 • 1794 回帖 • 1 关注
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖
  • uTools

    uTools 是一个极简、插件化、跨平台的现代桌面软件。通过自由选配丰富的插件,打造你得心应手的工具集合。

    7 引用 • 27 回帖 • 1 关注
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 636 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    127 引用 • 169 回帖
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    499 引用 • 1395 回帖 • 247 关注
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    7 引用 • 69 回帖 • 2 关注
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 384 回帖 • 10 关注
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 279 关注
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖 • 1 关注
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    54 引用 • 37 回帖
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 433 关注
  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用 • 7 关注
  • 架构

    我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。

    143 引用 • 442 回帖 • 1 关注
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    89 引用 • 122 回帖 • 622 关注
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 373 关注
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    107 引用 • 153 回帖
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖 • 1 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 8 关注
  • 禅道

    禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。

    6 引用 • 15 回帖 • 10 关注
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 345 关注
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 488 关注
  • Access
    1 引用 • 3 回帖 • 2 关注
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 166 关注
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    125 引用 • 74 回帖
  • 安全

    安全永远都不是一个小问题。

    203 引用 • 818 回帖
  • Visio
    1 引用 • 2 回帖