この記事は学生エンジニア Advent Calendar15日目の記事です。
どこで使うんだよと言われればそれまでですが、以前インターン先で作ったので、共有しときます。
###使用した環境
Xcode 7.2
Swift 2.1
iOS 9.2(実機で確認 *なぜかSimulatorは動かない)
###必要なフレームワーク
- SystemConfiguration.framework
- StoreKit.framework
- Security.framework
- QuartzCore.framework
- MobileCoreServices.framework
- CoreLocation.framework
- CoreGraphics.framework
##全体のコード
ViewController.swift
import UIKit
class ViewController: UIViewController,UIDocumentInteractionControllerDelegate {
var pdfData: NSData?
var docController:UIDocumentInteractionController?
override func viewDidLoad() {
super.viewDidLoad()
var sampleImages: Array<UIImage> = []
sampleImages.append(UIImage(named: "g_sample001.jpg")!)
sampleImages.append(UIImage(named: "g_sample001.jpg")!)
pdfData = self.createPDF(sampleImages)!
}
@IBAction func showOpenIn(sender: AnyObject) {
let fileName = (NSTemporaryDirectory() as NSString).stringByAppendingPathComponent("tmp_file.pdf")
let url: NSURL! = NSURL(fileURLWithPath: fileName)
pdfData!.writeToURL(url, atomically: true)
if url != nil {
docController = UIDocumentInteractionController(URL: url)
docController?.delegate = self
docController?.presentOptionsMenuFromRect(self.view.frame, inView: self.view, animated: true)
}
if NSFileManager.defaultManager().fileExistsAtPath(fileName) {
print("existed")
}
}
//convert all images to a pdf
func createPDF(images: [UIImage]) -> NSData? {
//16:9 default image size
let imageWidth: CGFloat = 1136
let imageHeight: CGFloat = 640
let pdfData: NSMutableData = NSMutableData()
let pdfConsumer: CGDataConsumerRef = CGDataConsumerCreateWithCFData(pdfData as CFMutableDataRef)!
var mediaBox: CGRect = CGRectMake(0, 0, imageWidth, imageHeight)
let pdfContext: CGContextRef = CGPDFContextCreate(pdfConsumer, &mediaBox, nil)!
for var index = 0; index < images.count; ++index {
CGContextBeginPage(pdfContext, &mediaBox)
CGContextDrawImage(pdfContext, mediaBox, images[index].CGImage)
CGContextEndPage(pdfContext)
}
return pdfData
}
}
流れとしては
PDFに変換したい画像を配列に入れる
↓
配列に入っている画像をPDFに変換していく
↓
共有ボタン(Share)が押されたら、showOpenInの関数が呼ばれて他のアプリへ共有出来るようにする
ちなみにGithubにもコード載せています。
https://github.com/satoichiki/ConvertImageToPdf