Skip to content

Releases: whyluna/markpdf-studio

MarkPDF 1.0.6

Choose a tag to compare

@whyluna whyluna released this 11 Sep 02:42

本版更新

  • PDF 目录识别更完整:优先读取内嵌目录;没有内嵌目录时,从前 24 页的可点击目录页提取标题、层级和真实跳转位置。支持多页目录、仅页码可点击,以及标题/页码重复链接去重。提取在本地后台完成,不需要 AI,也不改写原 PDF。
  • 目录加载与分栏同步:文档加载完成、切换分栏后及时刷新目录;兼容通过 GoTo 动作跳转的内嵌目录项。没有可用目录时显示明确提示。
  • 修复跨行文本首次标注失效:点击工具条不会再误裁选区或移动按钮,下划线、高亮和删除线首次操作即可覆盖完整跨行选区。

扫描图片、没有链接的纯文字目录或位于前 24 页之外的目录暂不自动提取。

下载与安装

  • macOS 15 Sequoia 及以上,支持 Apple Silicon 和 Intel。
  • 版本 1.0.6,构建号 104,通用二进制 arm64 + x86_64
  • 打开 MarkPDF-1.0.6.dmg,将 MarkPDF 拖入 Applications。
  • 继续使用 ad-hoc 签名,未进行 Developer ID 签名与公证;首次打开方式见 README。
  • DMG SHA-256:727426b14650a9f025f99f5dd600f319e7618fbbf0859ad7a4ceecfd3b75821b

验证

  • 本批次 Swift 全量测试:651 通过、12 跳过、0 失败;最终目录/阅读状态专项复测 21/21 通过。
  • Web 测试 95/95 通过。
  • 真实文档目录提取核验:33、17、29 条;原生目录样本保留 170 条。
  • Release 双架构构建、签名、DMG 镜像与挂载、版本及 Applications 链接校验通过。

MarkPDF 1.0.5

Choose a tag to compare

@whyluna whyluna released this 29 Aug 16:25

本版更新

  • 统一 App 字体层级:16pt 面板标题、14pt 主内容、12pt 分区/控件/副文本、11pt 紧凑元数据,协调文件树、Markdown/PDF 目录、标注、反向链接与 AI 助手界面。
  • Markdown 默认正文调整为 16pt、固定版心调整为 830pt;仅迁移仍使用旧默认值的安装,保留用户自定义设置。
  • 修复全空表头 GFM 表格:兼容 | | | 键值表写法,阅读态隐藏空表头,并正确处理部分空表头、空单元格和缺列。

下载与校验

  • macOS 15 Sequoia 及以上
  • 通用二进制:Apple Silicon (arm64) + Intel (x86_64)
  • 当前采用 ad-hoc 签名,首次打开请右键应用并选择“打开”
  • MarkPDF-1.0.5.dmg SHA-256:b7fb8ad7d36d822f722a9310d98e1d02acdde18e86e028bdd4dc404489dcbbac

验证

  • Web 编辑器:95 项测试通过
  • Swift:645 项测试执行,12 项跳过,0 失败
  • DMG 已完成镜像校验、实际挂载、版本/构建号、签名、双架构与 Applications 链接检查

MarkPDF 1.0.4

Choose a tag to compare

@whyluna whyluna released this 23 Aug 08:43

下载

  • MarkPDF-1.0.4.dmg(14.5 MiB,通用二进制:arm64 + x86_64
  • SHA-256:5f443b42034ea8fc03113e3212978920e68747b3e52c2e8083e8f0576eb4e294
  • 当前采用 ad-hoc 签名、尚未公证;首次打开时请右键应用并选择“打开”

改进

  • PDF 与 Markdown 侧边目录支持整行 hover 和点击,标题右侧空白区域也能跳转
  • PDF 批注隐藏重复的原生气泡与下划线,颜色统一控制虚线框、连接线与卡片色条
  • 点击正文批注虚线框可直接打开批注,并可在编辑框内更改颜色
  • 批注卡片收窄并向页内缩进,避免越出 PDF 边缘
  • 虚线框和连接线按 1.0 × PDF 缩放倍率 绘制,最低保持一个物理像素(Retina 0.5pt)

验证

  • Web:92 项测试通过
  • Swift:643 项测试执行,12 项跳过,0 项失败
  • DMG 已完成校验、挂载、版本、架构、签名、Applications 软链接及二进制哈希一致性检查

MarkPDF 1.0.3

Choose a tag to compare

@whyluna whyluna released this 23 Aug 07:11

下载

  • MarkPDF-1.0.3.dmg(13.4 MB,通用二进制:arm64 + x86_64
  • SHA-256:91366aa9d384142ef7d2b62c621cd141decb91739e72b2b909e534e06c50fe24
  • 当前采用 ad-hoc 签名、尚未公证;首次打开时请右键应用并选择“打开”

视觉更新

  • 全新 macOS 应用图标,以编辑器画布、文本、插入光标、AI 分栏和四角星表达“文本编辑 + AI 助手”
  • 加粗文本、光标与分隔线并放大 AI 星标,提升 Dock 小尺寸下的识别度

验证

  • Web:92 项测试通过
  • Swift:639 项测试通过,12 项跳过,0 项失败
  • DMG 已完成挂载、版本、架构、签名、Applications 软链接及二进制哈希校验

MarkPDF 1.0.2

Choose a tag to compare

@whyluna whyluna released this 21 Aug 14:51

下载

  • MarkPDF-1.0.2.dmg(13.9 MB,arm64 + x86_64 通用二进制)
  • SHA-256:f12fe2351d17a1a1e90068ee832b72ffea328e8672152ce6aadc2f99a06fc64f
  • 当前为 ad-hoc 签名、未公证版本;首次打开请右键 MarkPDF.app →「打开」

修复

  • AI 右侧栏拖拽与滚动稳定性:面板宽度按显示帧合并发布,拖动期间不再重复写偏好或重建整棵视图;接管 SwiftUI List 底层 NSOutlineView 的完整行高表并保持可见行锚点,滚动条长度/位置不再乱跳或回到顶部;长回复与代码块改用原生 TextKit 连续选择,松手后不再延迟重建 SelectionOverlay,拖完可立即滚动
  • 后台/隐藏启动零窗口(存量):open -g / 启动器后台唤起会抑制 SwiftUI 初始建窗,此后激活 App(⌘Tab/启动器)永远无窗——现在激活与点 Dock 图标都会延迟探测补窗(恢复上次工作区现场),与 SwiftUI 可能的自建首窗互斥不撞双窗;Finder 双击文件到无窗口实例也从「静默丢弃」恢复为开窗(保留的 openWindow 动作 + open 事件转发双保险)
  • AI 面板「文档已变、按钮迟迟不切」:埋点实证应用链 0ms,延迟在整个会话转录的逐行 markdown 重新解析排版——历史消息内容未变即跳过重渲(Equatable 化),流式与卡片状态切换不再被长会话拖慢
  • AI 把「图片加载失败」文案写进源码(存量疑点收口):自动保存链全通道排查排除(所有文档文本均取自编辑器内核 state.doc 或磁盘,此版本 CM6 剪贴板也只走文档文本)——确认唯一活体路径是模型侧,且写作提示词本身含该字面串充当「教唆源」;规则重写不再出现字面文本,并明令禁止把占位/错误文案写入文件
  • AI 变更应用与撤销安全:新建使用原子排他创建,失败项目不再进入撤销清单;撤销前核验应用后内容,避免覆盖后续编辑或删除用户改过的新文件;写路径解析阻止符号链接逃逸,部分 diff 的局部行号偏移已修正
  • AI 会话隔离与配置恢复:新会话丢弃当前线程未封存提案,审批结果按文档线程隔离;安全撤销检查点可随会话恢复;自定义 Provider 的动态账号重启后仍显示已配置
  • PDF 标注兼容性:普通标注改写标准 /F ReadOnly 位,不再误用 Widget /Ff;页边批注与正文指认不再持久化 NoView,导出的 PDF 可在 Preview、Acrobat 等阅读器中正常显示和点击
  • 写作模式误报“已提议修改”但没有审查卡:模型一次提交多处编辑时,单个 old_text 模糊或失配不再丢弃其余有效修改,而是生成部分提案并跳过冲突项;工具失败改为红色失败状态,零提案提示会显示真实校验原因
  • 应用 AI 修改后当前 Markdown 仍显示旧内容:Web 内核完成整文替换后立即同步 Native EditorStore 并落盘,不再依赖防抖的内容回传;审查卡完成、当前标签和磁盘状态现在同步收敛,无需切换文档触发刷新

MarkPDF 1.0.1

Choose a tag to compare

@whyluna whyluna released this 19 Aug 15:04

[1.0.1] - 2026-08-19

新增

  • AI 写作(FR-AI.5/6):AI 助手新增「写作」模式——模型按本应用 Markdown 方言提案新建/修改文件与文件夹(Aider 式搜索替换块,唯一命中校验),提案绝不直接落盘;变更卡片逐变更段勾选(部分接受自动拼接)、全宽 diff 弹窗(红删绿增/绝对行号)、应用/拒绝/批级撤销(重启后仍可撤销与回看);应用后编辑器高亮改动行并跳到首处(Esc 淡出);卡片随会话持久化,重启后原样恢复
  • 多文档 AI 并行:每个文档的 AI 会话完全独立——切标签不再取消在途运行,两个文档可同时提问/写作互不干扰;停止按钮只作用于当前文档线程
  • 自定义 Provider:设置 → AI 新增「自定义 Provider」分区——任意添加 OpenAI 兼容或 Anthropic 端点,名称 / Base URL / 协议族 / 模型清单 / API Key 全部自行配置;与内置六家同权参与模型选择与自动回落
  • 写作独立回复上限:AI 助手设置新增「写作上限(tokens)」(默认 16384),与问答上限分开——写大文件不再被问答额度截断

修复

  • API Key「已配置却报未配置」:ad-hoc 签名每次构建二进制指纹变化,钥匙串条目 ACL 拒绝新二进制读明文(触发系统授权窗,取消即报未配置、重存无效)——Key 改存应用沙盒容器文件(0600,钥匙串只读兼容并自动迁移),重部署后零弹窗
  • AI 面板卡片状态不刷新(应用/拒绝要点多次):变更状态机是聊天对象的子对象,其发布不触发面板重渲——补 objectWillChange 转发
  • 应用修改永久转圈:应用链路内同步写编辑器 @published 与 SwiftUI 更新事务重入死锁(采样实锤)——高亮写入延迟 runloop、内核失败回调异步派发
  • 符号链接目录下图片「加载失败」(存量回归):macOS 25.6 起 resolvingSymlinksInPath() 对「存在的符号链接 + 不存在的尾段」不再解析链接段——退到最近存在祖先解析后拼回尾巴
  • 粘贴的 BaseURL 带空白/换行报「无法解析」:请求构造层与输入框双层清洗(含多余尾斜杠)

变更

  • AI 回复动作只留复制:插入光标/替换选区/存新笔记已由写作提案流取代;复制按钮改为圆形底衬+点击对勾反馈
  • 输入框交互:回车发送、⌘↵ 在光标处换行(原 ⌘↵ 发送)
  • 写工具与「检索工作区」开关解耦:检索开关回归纯隐私边界,写作走面板开关
  • FR-AI.7 PDF 笔记流 / FR-AI.8 Token 用量统计:按用户决策取消(写作工具为工作区级,PDF 场景已可用)

MarkPDF 1.0.0

Choose a tag to compare

@whyluna whyluna released this 17 Aug 13:04

MarkPDF 1.0.0

2026-08-17

新增

  • 标签拖拽重排全面重做(VSCode 式):拖起标签以同形等宽的幽灵卡片跟随鼠标(左上角对齐光标),悬浮竖线指示插入位置,松手动画归位——全程不用系统拖放会话,鼠标下永远不会再出现「+」拷贝徽标;组内重排、分栏跨栏移入(左右双向、按悬停位置插入)、拖到窗口右缘分栏/移入最右栏一整套手势直算落点
  • 标签栏细滚动条:标签溢出可横向滚动时,栏底 3pt 专用条带内显示胶囊拇指(系统指示条无法调粗细,自绘实现),位置随滚动实时移动
  • 关闭钮悬停反馈:鼠标移到「x」上变小手光标、图标提亮并出现圆角底衬点亮命中范围;图标与命中区放大(11pt 字号 / 18×18pt)
  • 左侧边栏收起/展开按钮(工具栏导航位)

修复

  • 拖动标签时标签栏被撑成大块下拉框 / 持续闪烁:让位间隙曾是布局子节点,逐帧增删把横向 ScrollView 内容高度反复伸缩——改为悬浮竖线后拖拽期间标签栏布局零变化,结构上根治
  • 拖右侧面板时顶部工具栏跟着一起动:宽度/显隐状态整体迁入独立的 PanelLayoutStore,工具栏不再随拖拽逐帧重算;顺带消除拖拽期间每帧同步写 UserDefaults 的磁盘 IO
  • 右侧面板拖到最窄再往右拖会整个消失:改为复刻检查器材质的自定义面板(280–360pt 钳制、持久化),拖拽永不触发收起,显隐只由工具栏按钮控制
  • 标签标题两侧大片空白frame(maxWidth:) 弹性框架贪满上限、标题居中悬浮——补 fixedSize 抱紧内容,短标题零空白、长标题定点截断;悬停不再改变标签宽度
  • 左侧边栏拖拽漂移/震荡:两栏均为自管宽度面板,宽度由状态直接指定,无系统列宽协商

MarkPDF 0.1.8

Choose a tag to compare

@whyluna whyluna released this 16 Aug 18:08

MarkPDF 0.1.8

2026-08-17

修复

  • 试卷/题库类 PDF 点击文字弹蓝框,划词选字、双击选词全部失效:题干+ABCD 选项这种行列对齐的排版会被 macOS 26 PDFKit 的「文档分析」误判为表单——点击即弹出带缩放手柄的蓝色选框并劫持后续鼠标操作,长按划词选不中、双击选不出词、无法施加高亮标注。现关闭该文档分析开关(私有 API,系统更新若移除此键会自动退回现状不影响运行),所有文字恢复原生选择行为:单击无蓝框、拖拽逐行贴合、双击正常选词、高亮/下划线/删除线照常可用
  • AI 助手输入区上下拖动:改为系统 NSSplitView 原生分栏(同左右边栏手感);hosting sizingOptions=[] 防内容高度顶回布局、两栏 holdingPriority 相等防拖动时外框被改(整体移动/松手回位根因)、不对外报告固有尺寸
  • AI 助手输入区占位符与光标不对齐:实测 TextEditor 光标行顶格 y=0 高 17pt、lineFragmentPadding=5,占位符去掉顶部 padding、只补 leading 5,与光标同行同列

MarkPDF 0.1.7

Choose a tag to compare

@whyluna whyluna released this 14 Aug 18:10

MarkPDF 0.1.7

新增

  • 右侧面板改为系统检查器:可整栏收起/展开(工具栏右侧开关);宽度独立于左侧边栏——边栏收放、拖动都只影响正文,互不染指;限宽 240–360pt
  • 左侧边栏分隔条加宽命中带:边栏右缘内嵌拖拽条,含中下部全高度悬停出左右箭头;按下事件重定向给系统拖动轨道,手感与右栏一致;列宽上限 360pt 封死「拖大布局崩坏」区间
  • PDF 侧栏「目录」排首位并默认打开;从缩略图/标注段切回目录时回到当前阅读节

修复

  • 输入法组字期按回车误关批注编辑框:拼音选字确认上屏的回车不再当成「提交并关闭」
  • 切换标签页丢阅读位置/缩放:标签复用的视图其 coordinator 停在首个文档(「答案」的存档全写到「讲义」名下)→ parent 每轮跟随;防抖挂起的存档跨文档污染(新文档第 1 页覆盖旧存档)→ 切文档前先落定 + 落定闭包加目标闸;记录改用视口中心页
  • 捏合缩放切标签后失效/弹回:PDFKit 原生 pinch 在文档重挂载后只瞬态预览不落 scaleFactor(数字冻结),响应链又被间歇吞事件——改窗口级事件通道接管(实测从不丢事件),就地直改 scaleFactor,脱离自适应防弹回
  • 反复拖右侧面板概率闪退:显示周期内的 @published 写入让托管视图中途失效窗口约束(AppKit trap)——滚动/缩放/翻页/选区通知里的写入全部挪出显示周期
  • 正文与右侧面板间的白色空隙收窄(标签拖放区 28→10pt)

  • 安装:下载 MarkPDF-0.1.7.dmg,拖入「应用程序」替换旧版
  • 要求:macOS 15+
  • 自签名构建,首次打开如被 Gatekeeper 拦截:右键 → 打开

MarkPDF 0.1.6

Choose a tag to compare

@whyluna whyluna released this 13 Aug 14:15

MarkPDF 0.1.6

新增

  • PDF 目录与 md 大纲跟随阅读位置:当前正在阅读/光标所在的小节以 accent 底高亮,并随翻页/光标移动自动滚到可见;PDF 侧栏「书签」段更名「目录」(用户书签保留在目录页内)
  • 点选标注即可改色:点击已有高亮/下划线/删除线,虚线框旁的编辑条除删除外新增四色选择(与顶部色板同一套黄/绿/蓝/红),点一下即改、连续试色位置不跳
  • 批注编辑框键位:回车保存并退出(等同点空白处),⌘↵ 换行

修复

  • PDF 目录列表向下滚动抽搐:滚动期 currentPage 持续发布导致递归大纲树每秒重建几十次 → 扁平化条目按文档缓存,换文档才重建
  • md 大纲要点两次正文才跟随:嵌套 ObservableObject 的 @published 不冒泡,大纲改直接订阅 EditorStore;内核光标上报防抖 500→150ms,跟随延迟 ~1s 消失
  • 数据安全(严重):标注写回可能把一份 PDF 的内容整份写进另一份文件。切标签/分栏时,视图侧的 URL 先更新、PDF 文档要等异步加载完才替换,这个空窗里的焦点认领会把「旧文档 + 新路径」登记成写回目标,随后写回就把 A 文档序列化进 B 文件(实测把「讲义答案」整份覆盖到「讲义」上,112 页原稿只剩 45 页答案内容,靠首次写回前留下的 .bak 恢复)。现在写回目的地一律以 document.documentURL(文档自带路径,唯一不会错配的事实来源)为准,落盘前再校验文档与目的地是否同一文件,不一致直接拒写并记录错误
  • 部分页面点正文冒出蓝色方框且无法标注:这些页的批注留有 PDFKit 自动生成的 Popup 伴侣窗(128×64pt,压在正文上),它参与命中测试 → PDFView 给它画带手柄的选中框并吃掉那块区域的划词。根因是伴侣从磁盘加载回来的类名是基类 PDFAnnotation(不是 PDFAnnotationPopup),按类判一直漏摘 → 改按子类型判,并连带摘除父标注挂着的伴侣
  • 标注点不中(只能从右侧列表右键删除):点选改走 PDFView 的 mouseDown 通道(PDFKit 自己的手势会吃掉标注上的点击),并把 PDF 自带的超链接/表单域/图形标注排除在点选之外——此前点目录跳转会冒出红虚线框 + 垃圾桶
  • 每次标注动作后主线程卡 0.4~1.5 秒(新建批注要等一会儿才能打字、点色不跟手、关框后划词/滚动不跟手):主线程采样定位到大头是 PDFDocument.dataRepresentation()——PDFKit 写回会把每一页重新绘制一遍,其中约一半时间耗在嵌入字体按 glyph 名查找抛 C++ 异常的栈展开。改成主线程只把标注收成纯数据(毫秒级),后台串行队列自己开一份私有 PDF 副本、重放本应用标注后落盘(PDFKit 对象不能跨线程共享,故用主线程从不触碰的独立对象图)。写回同时做到:PDF 自带的超链接/表单域原样保留、反复写回不重复堆积、删除能落地;批注编辑期间的变更仍只标脏、交互结束统一写
  • 点空白处退出空批注后,页面上的高亮/虚线/图标还赖约一秒:两处叠加——① 失效通知打在了 PDFView 自己,而页面是画在它的内层 documentView 里的,标脏错了视图页面层就不会重画(要等滚动之类的下一次刷新);② 批注内容落定与空批注丢弃挂在 popoverDidClose,它要等关闭动画走完才到。现在失效通知打到 documentView(仍只涉及改动过的那几页,绘制只发生在可见区域),落定提前到 popoverWillClosedidClose 留作兜底,两者都先比对是否当前那个编辑框)
  • 使用批注即闪退:选区包围盒为 CGRect.null 时页→视图变换会算出 NaN,AppKit 遇非法几何直接 trap → 面板定位加几何守卫;捏合比例加除零与有限性守卫
  • PDF 里点目录跳转失效、鼠标不变小手:标注设只读后 PDFKit 不再接管超链接,改由自己识别 Link 并处理光标与跳转(页内目标 / GoTo / URL / 翻页命名动作)
  • 用 × 关掉全部窗口后重开恢复的是更早的工作区:窗口清单在关窗与状态变化时即时发布,退出前冻结
  • 分栏后在右栏打开文件会把右栏收掉:空组收起挪到标签就位之后执行(此前清场阶段就把刚分出来的空右组一并收起,文件落回左栏)

  • 安装:下载 MarkPDF-0.1.6.dmg,拖入「应用程序」替换旧版
  • 要求:macOS 15+
  • 自签名构建,首次打开如被 Gatekeeper 拦截:右键 → 打开