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

标签 html macos cocoa pdf webview

运行 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];

上面的代码是做什么的?

  1. WebView 用于加载使用 img 标签嵌入 PDF 的 HTML。查看 html 源代码 here

  2. 加载 webview 后,尝试使用 NSView 的 dataWithPDFInsideRect 方法从文档 View 中获取 PDF 数据

  3. 内存中的PDF数据写入磁盘

结果

  • Mavericks 之前的版本(即 10.8 和 10.7) 上面的代码片段生成了一个内容可读的高质量 PDF 文档。在预览应用程序中打开输出 PDF 时,可以看到以高质量呈现的 PDF 内容,并且在缩放时会发生缩放,而不会影响图像质量。 See Mountain Lion output PDF here

  • 在 Mavericks (10.9) 上,上述代码片段生成一个 PDF 文档,其内容因图像质量下降而变得模糊 See Mavericks output PDF here

问题

  1. dataWithPDFInsideRect: 是否不能在 Mavericks 上工作,因为它在以前的 OSX 版本上工作?

  2. 我必须将 PDF 嵌入 HTML 中(从 Mavericks 开始)以便 Webkit 正确地在屏幕外呈现它们的方式是否有变化?

  3. 是否有其他方法可以从相同的 HTML 获取 pdf 以在 Mavericks 上获得更好的质量?

最佳答案

PDF 是一种专有文件格式,Apple 出于各种主要是公司政治原因故意决定不能很好地使用它。您最终获得的 PDF 的质量完全取决于您使用的库 - 从它的声音来看,您最新的 Mavericks 使用的是不同的驱动程序库,这不太理想。

如果您要呈现为 HTML/使用 Webkit,则 Mavericks 存在一个已知问题,即默认情况下 Safari 无法正确处理 PDF。要更新它,请从您的服务器终端运行此命令。

defaults write com.apple.Safari WebKitOmitPDFSupport -bool NO

下载最新版本的 Adob​​e Reader 并安装它可能会给您/重新安装/刷新适当的驱动程序,如果这不起作用。

关于html - 为什么 WebView 的 dataWithPDFInsideRect 不能在 Mavericks 上创建高质量的 PDF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23229655/

相关文章:

swift - 如何在用户编辑时更新 NSTextField 对象的值?

xcode - 如何将 IBAction 和菜单项连接到 First Responder?

cocoa - IBOutlet 属性薄弱和 ARC 问题

javascript - 创建交互式非矩形 HTML 元素的最佳方式

javascript - 在所有图像加载无效后执行js

El Capitan 升级后 Mysql 不工作

macos - 去除 webview 的弹性

objective-c - 如何在 OSX 应用程序中拉伸(stretch)图像?

javascript - 杂散开始标记脚本

javascript - 单击时菜单不想打开