html – 为什么来自WebView的dataWithPDFInsideRect不能在Mavericks上创建高质量的PDF?

运行 sample project并观察名为SaveWebPage.pdf的桌面上生成输出PDF

粘贴感兴趣的代码片段

NSURL *url = [[NSBundle mainBundle] URLForResource:@"Page" withExtension:@"html"];
NSURLRequest *req = [NSURLRequest requestWithURL:url];

[[self.webview mainFrame] loadRequest:req];
NSView *view = [[[self.webview mainFrame] frameView] documentView];
NSData *data = [view dataWithPDFInsideRect:[view bounds]];

NSArray* deskTopArrayPaths = NSSearchPathForDirectoriesInDomains(NSDesktopDirectory,NSUserDomainMask,YES);
Nsstring* deskTopPath = [deskTopArrayPaths objectAtIndex:0];
Nsstring* pdfPath = [Nsstring stringWithFormat:@"%@/SaveWebPage.pdf",deskTopPath];

PDFDocument *doc = [[PDFDocument alloc] initWithData:data];
[doc writetoFile:pdfPath];

上面的代码做了什么?

> WebView用于加载使用img标签嵌入PDF的HTML.见html source here
>加载webview后,尝试使用NSView的dataWithPDFInsideRect方法从文档视图中获取PDF数据
>内存中的PDF数据写入磁盘

结果

>在小牛队之前的版本(即10.8和10.7)上面的代码片段生成一个高质量且内容可读的PDF文档.在预览应用程序中打开输出PDF时,可以看到高质量的PDF内容,并且在缩放时可以在不影响图像质量的情况下进行缩放. See Mountain Lion output PDF here
>在Mavericks(10.9)上,上面的代码片段生成一个PDF文档,其内容模糊,图像质量下降See Mavericks output PDF here

问题

> dataWithPDFInsideRect:在以前版本的OSX上工作时不能使用Mavericks吗?
>我是否需要在HTML中嵌入PDF(从Mavericks开始),以便Webkit在屏幕外正确渲染它们?
>是否有另一种方法可以从同一个HTML获得pdf,从而在小牛队中获得更好的质量?

解决方法

PDF是一种专有的文件格式,Apple故意决定不会出于各种主要的公司政治原因.您最终得到的PDF的质量完全取决于您正在使用的库 – 从最初的Mavericks的声音来看,您使用的是不同的驱动程序库,这是不太理想的.

如果您使用Webkit渲染HTML /,则Mavericks存在一个已知问题,即Safari认情况下不会正确处理PDF.要更新此命令,请从服务器终端运行此命令.

defaults write com.apple.Safari WebKitOmitPDFSupport -bool NO

下载最新的Adobe Reader& amp;安装它可能会给你/重新安装/刷新正确的驱动程序,如果这不起作用.

相关文章

我正在用TitaniumDeveloper编写一个应用程序,它允许我使用Ja...
我的问题是当我尝试从UIWebView中调用我的AngularJS应用程序...
我想获取在我的Mac上运行的所有前台应用程序的应用程序图标....
我是一名PHP开发人员,我使用MVC模式和面向对象的代码.我真的...
OSX中的SetTimer在Windows中是否有任何等效功能?我正在使用...
我不确定引擎盖下到底发生了什么,但这是我的设置,示例代码和...