Ios 将PDF转换为UIImage
我的问题是PDF转换为图像,但如何在视图中打开图像,然后向左、向右、向上和向下滑动如何可能我得到了UIImage中PDF页面转换的解决方案。 此代码PDF页面在Uiimage中转换并保存在图像文档目录中。 PDF下载和页面计数,以单独的页面虎钳图像转换Ios 将PDF转换为UIImage,ios,swift,pdf-generation,uigraphicscontext,Ios,Swift,Pdf Generation,Uigraphicscontext,我的问题是PDF转换为图像,但如何在视图中打开图像,然后向左、向右、向上和向下滑动如何可能我得到了UIImage中PDF页面转换的解决方案。 此代码PDF页面在Uiimage中转换并保存在图像文档目录中。 PDF下载和页面计数,以单独的页面虎钳图像转换 func drawOnPDF(path: String) { // Get existing Pdf reference let pdf = CGPDFDocumentCreateWithURL(NSURL(fileURLWith
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()
}
func drawOnPDF(路径:字符串)
{
var urlstr:NSURL=NSURL.fileURLWithPath(路径)!
var pdf:CGPDFDocumentRef=CGPDFDocumentCreateWithURL(urlstr)
变量页:CGPDFPageRef;
变量帧:CGRect=CGRectMake(0,0100200)
变量pageCount:Int=CGPDFDocumentGetNumberOfPages(pdf);
对于(变量i=0;i
Swift 3:
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)")
}
我找到了一个很酷的解决办法。 从这里借来:
所有这些解决方案都将单个pdf页面转换为
UIImage
。以下是我将多页pdf转换为一张图片的发现
func-drawPDFfromURL(url:url)->UIImage?{
guard let document=CGPDFDocument(url作为CFURL)else{return nil}
变量宽度:CGFloat=0
变量高度:CGFloat=0
//计算总页面大小
对于1…document.numberOfPages中的索引{
打印(“索引:\(索引)”)
如果let page=document.page(at:index){
设pageRect=page.getBoxRect(.mediaBox)
宽度=最大值(宽度,页面直接宽度)
高度=高度+页面垂直高度
}
}
//现在创建图像
let renderer=UIGraphicsImageRenderer(大小:CGSize(宽度:宽度,高度:高度))
让image=renderer.image{(ctx)在
ctx.cgContext.scaleBy(x:1.0,y:-1.0)
对于1…document.numberOfPages中的索引{
如果let page=document.page(at:index){
设pageRect=page.getBoxRect(.mediaBox)
ctx.cgContext.translateBy(x:0.0,y:-pageRect.height)
ctx.cgContext.drawPDFPage(第页)
}
}
ctx.cgContext.scaleBy(x:1.0,y:-1.0)
}
返回图像
}
Swift中PDF转换为图像的最佳解决方案:)@巴尔加维·布莱恩。我试着运行你的代码,但是{}阻止不执行。你知道为什么吗?你可以在上找到类似的答案(这是一个更好的可重用函数,URL作为输入,UIImage作为返回),它在iOS14.2和Swift 5上非常适合我
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 {
}
}
func drawPDFfromURL(url: URL) -> UIImage? {
guard let document = CGPDFDocument(url as CFURL) else { return nil }
guard let page = document.page(at: 1) else { return nil }
let pageRect = page.getBoxRect(.mediaBox)
let renderer = UIGraphicsImageRenderer(size: pageRect.size)
let img = renderer.image { ctx in
UIColor.white.set()
ctx.fill(pageRect)
ctx.cgContext.translateBy(x: 0.0, y: pageRect.size.height)
ctx.cgContext.scaleBy(x: 1.0, y: -1.0)
ctx.cgContext.drawPDFPage(page)
}
return img
}