func drawOnPDF(path: String)
{
// Get existing Pdf reference
let pdf = CGPDFDocumentCreateWithURL(NSURL(fileURLWithPath: path))
// Get page count of pdf, so we can loop through pages and draw them accordingly
let pageCount = CGPDFDocumentGetNumberOfPages(pdf);
// Write to file
UIGraphicsBeginPDFContextToFile(path, CGRectZero, nil)
// Write to data
// var data = NSMutableData()
// UIGraphicsBeginPDFContextToData(data, CGRectZero, nil)
for index in 1...pageCount {
let page = CGPDFDocumentGetPage(pdf, index)
let pageFrame = CGPDFPageGetBoxRect(page, kCGPDFMediaBox)
UIGraphicsBeginPDFPageWithInfo(pageFrame, nil)
var ctx = UIGraphicsGetCurrentContext()
// Draw existing page
CGContextSaveGState(ctx);
CGContextScaleCTM(ctx, 1, -1);
CGContextTranslateCTM(ctx, 0, -pageFrame.size.height);
CGContextDrawPDFPage(ctx, page);
CGContextRestoreGState(ctx);
// Draw image on top of page
var image = UIImage(named: "signature3")
image?.drawInRect(CGRectMake(100, 100, 100, 100))
// Draw red box on top of page
//UIColor.redColor().set()
//UIRectFill(CGRectMake(20, 20, 100, 100));
}
UIGraphicsEndPDFContext()
}
我的问题是PDF转换为图像,但是如何在View中打开图像,然后向左,向右,向上和向下滑动可能
Swift 3:
func convertPDFPageToImage(page:Int) {
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let filePath = documentsURL.appendingPathComponent("pathLocation").path
do {
let pdfdata = try NSData(contentsOfFile: filePath, options: NSData.ReadingOptions.init(rawValue: 0))
let pdfData = pdfdata as CFData
let provider:CGDataProvider = CGDataProvider(data: pdfData)!
let pdfDoc:CGPDFDocument = CGPDFDocument(provider)!
pageCount = pdfDoc.numberOfPages;
let pdfPage:CGPDFPage = pdfDoc.page(at: page)!
var pageRect:CGRect = pdfPage.getBoxRect(.mediaBox)
pageRect.size = CGSize(width:pageRect.size.width, height:pageRect.size.height)
print("\(pageRect.width) by \(pageRect.height)")
UIGraphicsBeginImageContext(pageRect.size)
let context:CGContext = UIGraphicsGetCurrentContext()!
context.saveGState()
context.translateBy(x: 0.0, y: pageRect.size.height)
context.scaleBy(x: 1.0, y: -1.0)
context.concatenate(pdfPage.getDrawingTransform(.mediaBox, rect: pageRect, rotate: 0, preserveAspectRatio: true))
context.drawPDFPage(pdfPage)
context.restoreGState()
let pdfImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
self.imageView.image = pdfImage
}
catch {
}
}
我在UIImage中获得了Pdf页面转换的解决方案。此代码PDF页面在Uiimage中转换并保存在图像文档目录中。PDF下载和页面计数可将单独的台虎钳图像转换。
func drawOnPDF(path: String)
{
var urlstr: NSURL = NSURL.fileURLWithPath(path)!
var pdf: CGPDFDocumentRef = CGPDFDocumentCreateWithURL(urlstr)
var page: CGPDFPageRef;
var frame: CGRect = CGRectMake(0, 0, 100, 200)
var pageCount: Int = CGPDFDocumentGetNumberOfPages(pdf);
for (var i = 0; i < pageCount; i++)
{
var mypage: CGPDFPageRef = CGPDFDocumentGetPage(pdf, i+1)
frame = CGPDFPageGetBoxRect(mypage, kCGPDFMediaBox)
UIGraphicsBeginImageContext(CGSizeMake(600, 600*(frame.size.height/frame.size.width)))
var ctx: CGContextRef = UIGraphicsGetCurrentContext()
CGContextSaveGState(ctx)
CGContextTranslateCTM(ctx, 0.0, frame.size.height)
CGContextScaleCTM(ctx, 1.0, -1.0)
CGContextSetGrayFillColor(ctx, 1.0, 1.0)
CGContextFillRect(ctx, frame)
page = CGPDFDocumentGetPage(pdf, i + 1)
var pdfTransform: CGAffineTransform = CGPDFPageGetDrawingTransform(page, kCGPDFMediaBox, frame, 0, true)
CGContextConcatCTM(ctx, pdfTransform);
CGContextSetInterpolationQuality(ctx, kCGInterpolationHigh)
CGContextSetRenderingIntent(ctx, kCGRenderingIntentDefault)
CGContextDrawPDFPage(ctx, page)
var thumbnailImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()
CGContextRestoreGState(ctx)
var documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last! as! String
documentsPath = documentsPath.stringByAppendingFormat("/Page%d.png", i+1)
UIGraphicsEndImageContext()
imagedata = UIImagePNGRepresentation(thumbnailImage)
imagedata.writeToFile(documentsPath, atomically: true)
array.addObject(documentsPath)
}
let dirPath = array.objectAtIndex(0) as? String
let image = UIImage(contentsOfFile: dirPath!)
NSUserDefaults.standardUserDefaults().setObject(array, forKey: "Array")
println("\(array)")
}
自iOS 13和macOS 10.15起,您可以使用thumbnailOfSize:forBox: