【发布时间】:2016-08-15 00:16:06
【问题描述】:
Xcode 7.3.2、Swift 2、Cocoa (Mac)。
我的应用程序涉及用户输入一些文本,这些文本可以导出为 PDF。
在我的应用程序的 iOS 版本中,我可以使用 CoreText 框架相对轻松地创建 PDF:
let html = "<font face=\'Futura\' color=\"SlateGray\"><h2>\(title)</h2></font><font face=\"Avenir\" color=\"SlateGray\"><h4>\(string)</h4></font>"
let fmt = UIMarkupTextPrintFormatter(markupText: html)
// 2. Assign print formatter to UIPrintPageRenderer
let render = UIPrintPageRenderer()
render.addPrintFormatter(fmt, startingAtPageAt: 0)
// 3. Assign paperRect and printableRect
let page = CGRect(x: 10, y: 10, width: 595.2, height: 841.8) // A4, 72 dpi, margin of 10 from top and left.
let printable = page.insetBy(dx: 0, dy: 0)
render.setValue(NSValue(cgRect: page), forKey: "paperRect")
render.setValue(NSValue(cgRect: printable), forKey: "printableRect")
// 4. Create PDF context and draw
let pdfData = NSMutableData()
UIGraphicsBeginPDFContextToData(pdfData, CGRect.zero, nil)
for i in 1...render.numberOfPages {
UIGraphicsBeginPDFPage();
let bounds = UIGraphicsGetPDFContextBounds()
render.drawPage(at: i - 1, in: bounds)
}
UIGraphicsEndPDFContext();
// 5. Save PDF file
path = "\(NSTemporaryDirectory())\(title).pdf"
pdfData.write(toFile: path, atomically: true)
但是,UIMarkupTextPrintFormatter、UIPrintPageRenderer、UIGraphicsBeginPDFContextToData 和 UIGraphicsEndPDFContext 在 OS X 上都不存在。我怎样才能执行与此 iOS 代码完全相同的操作(创建一个基本的 PDF使用 Mac 和 Cocoa 从一些 HTML 写入到某个文件路径作为分页 PDF)?
编辑:这个问题的答案在这里:Create a paginated PDF—Mac OS X。
【问题讨论】:
-
请参阅developer.apple.com/library/mac/documentation/GraphicsImaging/…,“创建 PDF 文件”作为起点。您可以用 HTML 制作一个 NSAttributedString 并绘制它。
-
不在我的电脑前,但您需要查看如何在 NSGraphicsContext 中设置 CGContextRef,然后您将能够使用 NSAttributedString 的绘制方法。
-
如果您遇到更具体的问题,欢迎您编辑您的问题。不过,我在工作的 Windows 机器上。
-
@zneak 我在将所有 Objective-C 转换为 Swift 时遇到问题,我不断收到错误消息“无法将
CG[whatever]转换为UnsafePointer<void>” -
用什么方法调用?