当前位置: 首页 > news >正文

使用AppleScript自动滚动预览

天冷了,在Mac预览里看PDF时,滚动页面非常冻手。预览虽然能够实现幻灯片播放,但是不支持逐行滚动。这里我们使用AppleScript来控制页面的滚动。

我们先将页面分成指定行数linesOfPage,根据自己的阅读速度设定滚动时间间隔intval。然后读取PDF的页面数量pageNum,这样我们就能计算出每次的滚动量dy= 1.0/pageNum/linesOfPage。每次滚动的时候,我们先获取当前的滚动位置,然后加上滚动量,将其设置为滚动条的新位置值。

注:获取UI元素要用到UI Browser。

完整代码如下:

set linesOfPage to 20
set intval to 2tryset theDuration to (text returned of (display dialog "Enter the scroll times" default answer "10"))set theDuration to theDuration as integer
end tryactivate application "Preview"
tell application "System Events"tell process "Preview"set pageText to (get value of the last static text of front window)-- get page numberset {currentPage, totalPage} to my splitString(pageText)set pageNum to totalPage as numberset dy to 1.0 / pageNum / linesOfPage-- range is from 0.0 to 1.0, so to scroll halfway you would use 0.5set scrollbarValue to a reference to scroll bar 1 of scroll area 2 of splitter group 1 of front windowrepeat with i from theDuration to 1 by -1set inputValue to (get value of scrollbarValue)set value of scrollbarValue to inputValue + dydelay intvalend repeatend tell
end tellon splitString(someString)tryset tempTID to AppleScript's text item delimiters -- save current delimitersset AppleScript's text item delimiters to "/"set pieces to text items of someString -- split the stringset AppleScript's text item delimiters to tempTID -- restore old delimitersset firstPart to item 1 of piecesset secondPart to item 2 of pieceson error errmess -- delimiter not foundlog errmessreturn {firstPart, ""} -- empty string for missing itemend tryreturn {firstPart, secondPart}
end splitString

相关文章:

  • 关于“Python”的核心知识点整理大全26
  • 【数据结构】八大排序之直接插入排序算法
  • 正则表达式入门与实践
  • C 库函数 - time()
  • 06 Rust 枚举类
  • dapper使用Insert或update时部分字段不映射到数据库
  • 什么是Symbol?在实际开发中怎么用?
  • 软件设计师——信息安全(一)
  • java.lang.ClassNotFoundException:javax.xml.bind.DatatypeConverter 报错解决
  • 数据库原理与应用——简答题练习(数据管理技术发展、数据库主要特征、数据模型、关系模型、实体性之间的关系、DBMS的功能、相关术语解释、数据库系统)
  • arcgis api for js 中使用API的代理页面(跨越配置)
  • 【docker 】Dockerfile指令学习
  • 爬虫工作量由小到大的思维转变---<第三章 搞多大的盘>
  • c++程序设计定义一个 (图书)类,在该类定义中包括
  • 【数据结构】树状数组总结
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • Laravel5.4 Queues队列学习
  • leetcode讲解--894. All Possible Full Binary Trees
  • MySQL QA
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • Vue 重置组件到初始状态
  • 大数据与云计算学习:数据分析(二)
  • 高程读书笔记 第六章 面向对象程序设计
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 前端面试之CSS3新特性
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 如何优雅地使用 Sublime Text
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 通信类
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • AI算硅基生命吗,为什么?
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • (第30天)二叉树阶段总结
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (附源码)计算机毕业设计大学生兼职系统
  • (三)SvelteKit教程:layout 文件
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景
  • (一)为什么要选择C++
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • [BetterExplained]书写是为了更好的思考(转载)
  • [C#]扩展方法
  • [Golang] go-kit 介绍和使用 (微服务实现工具)
  • [HCTF 2018]WarmUp (代码审计)
  • [hdu 1711] Number Sequence [kmp]
  • [Invalid postback or callback argument]昨晚调试程序时出现的问题,MARK一下
  • [javaSE] 看知乎学习工厂模式
  • [JavaWeb]—Spring入门
  • [Json.net]快速入门