macOS中把微信公众号的文章保存成PDF(并存入资料库)
对于macOS/iOS生态,将微信公众号的文章保存成PDF是项总出小bug的事情,主要问题可能出在网页编码上。保存成的PDF看起来是没有问题的,但是如果想复制其中的文字,要么是乱码,要么会出现重字;再或者说是没有图片。具体的我就不细说了,有需求的自然明白其中痛苦。
那么,今天我就给出一个曲折却可自动化的方案,彻底解决这一问题。程序文件已上传至GitHub,遵循GLP开源协议,“安装”方法可见GitHub上的README.md。
PS:虽然标题说是保存微信公众号文章,但其实应该也适用于保存任何网页文章。
把微信公众号文章保存到OneNote
-
用微信中自带的保存到OneNote的功能。需要搜索“微软云笔记”的公众号,之后有使用说明。
示例
- 用Safari中的OneNote Clipper保存到OneNote中。OneNote Web Clipper 安装网页里提供了插件下载和教程。
建议用保存成“文章”的形式
把OneNote的文章变成PDF
这一套自动化的方案是通过macOS中的Automator实现的。
![流程鸟瞰](http://oiht6on69.bkt.clouddn.com/macOS%E4%B8%AD%E6%8A%8A%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7%E7%9A%84%E6%96%87%E7%AB%A0%E4%BF%9D%E5%AD%98%E6%88%90PDF/%E6%B5%81%E7%A8%8B%E9%B8%9F%E7%9E%B0.png)
复制OneNote中的一篇文章,然后运行Automator的应用程序。这个程序先是用一个AppleScript将其复制到Word里再调用宏保存成PDF。第二个AppleScript是添加到Together 3里。
Together 3是一个资料库App,可以添加(常见格式)文档、图片、影音、网页、链接等内容,并可按组、文件夹、标签来分来,适合用来做研究时进行资料收集整理,不像文献管理软件那样专注于学术文献而功能狭隘。
on run {input, parameters}
tell application "/Applications/Microsoft Word.app"
create new document
paste special (text object of selection)
run VB macro macro name "调整"
set theActiveDoc to the active document
select sentence 1 of theActiveDoc
set title to content of text object of selection
set filename to " " & title & ".pdf"
save as theActiveDoc file format format PDF file name filename
close theActiveDoc saving no
end tell
return filename
end run
注1:tell application "/Applications/Microsoft Word.app"
中的路径是你的Word的路径。如果你电脑中只有一个Word,那直接写成tell application "Microsoft Word"
都可以。
注2:通过OneNote Webclipper添加的文章,正文中是不含标题的,因此要我们自己手动添加上标题,这样放到Word里也才有文章标题,如图:
![手动添加好标题](http://oiht6on69.bkt.clouddn.com/macOS%E4%B8%AD%E6%8A%8A%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7%E7%9A%84%E6%96%87%E7%AB%A0%E4%BF%9D%E5%AD%98%E6%88%90PDF/%E6%B7%BB%E5%8A%A0%E4%B8%8A%E6%A0%87%E9%A2%98.png)
“调整”宏的VBA代码:
Sub 调整()
'为了将微信公众号保存成PDF所做的调整
Dim iSha As InlineShape
For Each iSha In ActiveDocument.InlineShapes
If iSha.Type = wdInlineShapePicture Then
iSha.LockAspectRatio = msoTrue '锁定纵横比
iSha.Width = CentimetersToPoints(15) '宽15CM,这是为了让图片不会宽到超出页面
End If
Next
Selection.WholeStory
Selection.Font.Shrink '字号小一号
With ActiveDocument.PageSetup '调整下页边距到我喜欢的数值,可自定义,单位CM
.TopMargin = CentimetersToPoints(1.5)
.BottomMargin = CentimetersToPoints(1.5)
.LeftMargin = CentimetersToPoints(1.5)
.RightMargin = CentimetersToPoints(1.5)
End With
End Sub
PDF添加进Together 3
这是Automator流程的第二部分,作为诸位的可选方案。
on run {input, parameters}
tell application "/Applications/Together 3.app"
import files input
end tell
end run
注:input
是上个applescript中返回的filename,也就是PDF文件的完整路径
网友评论