Objective c 如何使用ScriptingBridge保存当前safari选项卡

Objective c 如何使用ScriptingBridge保存当前safari选项卡,objective-c,safari,scripting-bridge,Objective C,Safari,Scripting Bridge,我试图使用脚本桥告诉Safari将当前页面保存为PDF “Safari.h”头文件中存在SafariItem类的保存方法: - (void) saveAs:(NSString *)as in:(NSURL *)in_; 所以我用了这个,但它不起作用: [safariCurrentTab saveAs:@".PDF" in:filePath]; 后来我注意到Safari.app中的打印选项中有另存为PDF,所以我尝试使用此功能 - (void) print:(NSURL *)x printDi

我试图使用脚本桥告诉Safari将当前页面保存为PDF

“Safari.h”头文件中存在SafariItem类的保存方法:

- (void) saveAs:(NSString *)as in:(NSURL *)in_;
所以我用了这个,但它不起作用:

[safariCurrentTab saveAs:@".PDF" in:filePath];
后来我注意到Safari.app中的打印选项中有另存为PDF,所以我尝试使用此功能

- (void) print:(NSURL *)x printDialog:(BOOL)printDialog withProperties:(SafariPrintSettings *)withProperties;
但是,当我尝试初始化SafariPrintSettings对象时,它导致编译错误:

Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_SafariPrintSettings", referenced from:
  objc-class-ref in AppDelegate.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
编译器似乎没有找到该类,但我确实包含了头文件并添加了ScriptingBridge框架

有人能帮忙吗


提前感谢。

因此
saveAs:
SafariPrintSettings
都不起作用

Safari应用程序中的“另存为…”功能仅提供HTML,而脚本桥仅为您提供这些选项。这是需要记住的一点:编写脚本桥是一种自动化您将在接口中执行的操作的方法

“打印为PDF”除外。没有用于生成PDF的打印机对象。OSX调用一个(或多个,很难说)实用程序将HTML转换为PDF

使用
NSTask的可能解决方案
在
/System/Libary/Printers/Libraries/
中可以找到
convert
(不要将其与系统范围的ImageMagick convert混淆…它们不一样!)。如果要执行此操作,必须先将页面保存为HTML文件,然后可以使用
NSTask
运行
convert
命令,如下所示:

NSTask *convert = [[NSTask alloc] init];
[convert setLaunchPath:@"/System/Libary/Printers/Libraries/convert"];
[convert setArguments:[NSArray arrayWithObjects:@"-f",@"fileYouSaved.html",@"-o","foo.pdf",nil]];
//set output and so on...
[convert launch];
//this runs the command as if it were "convert -f fileYouSaved.html -o foo.pdf"
但它看起来很脆弱;在我尝试过的一些更广泛的网站上,一些元素挂在“可打印”页面上

最简单可行的解决方案 有一个第三方命令行app/Ruby gem,它可能会删除大量名为
wkpdf
的工作。您只需执行以下操作:

wkpdf——源代码http://www.apple.com --输出apple.pdf

它可以在线抓取页面,做你需要的事情。或者,一旦您在系统上安装了它,您也可以使用
NSTask
在应用程序中调用它,如果您需要对PDF文件执行更多步骤

您可以在这里找到
wkpdf