【发布时间】:2016-10-25 18:46:21
【问题描述】:
我正在使用 PDFKit(swift 编程语言,macOS)中的 PDFView 来显示一些 PDF 文档。 我想显示同一个 PDF 的多个页面。 一种解决方案是从同一个 PDF 创建多个 PDFView,但这样我必须多次分配相同的内存,这对于图像丰富的 PDF 来说可能是个问题。 有没有什么快速的方法可以在 4/8 种不同的视图中显示同一 PDF 的不同页面?
编辑: @danielv 给这段代码带来的宝贵建议
import Cocoa
import Quartz
class PDFPageView: NSView {
var pdfPage: PDFPage?
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
if(pdfPage != nil) {
let context = NSGraphicsContext.current()
let pdfBox = PDFDisplayBox.mediaBox
let pdfBounds = pdfPage?.bounds(for: pdfBox)
let scaleX = visibleRect.width/(pdfBounds?.width)!
let scaleY = visibleRect.height/(pdfBounds?.height)!
let scale = min(scaleX,scaleY)
context?.cgContext.scaleBy(x: scale, y: scale)
pdfPage?.draw(with: pdfBox, to: (context?.cgContext)!)
}
}
}
【问题讨论】:
-
“同一个 pdf 的多页”是什么意思? PDFView 已经使用滚动视图显示了多个页面,您要以不同的方式显示它们吗?
-
@danilev 最终我想做的是拥有一个“三重单页”,因此拥有三个关于同一个 PDF 的 PDFView,但我不想将使用的内存重复三倍。
标签: swift pdf macos-sierra