2017-05-11 9 views
0

私はswiftを使ってiOSアプリケーションを作成しようとしています。ユーザーは写真を撮ったりギャラリーから画像を選んだり、保存できるPDFファイルに変換したりできます彼らの電話。私のコードは現在、カメラまたはギャラリーのいずれかを開いて画像を選択していますが、pdfに変換することはできません。 ヒントは本当に感謝します、ありがとう!uiimageviewをpdfに変換する - Swift

CameraViewControllerクラス

import UIKit 

class CameraViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate 
{ 

    @IBOutlet weak var myImg: UIImageView! 

    @IBAction func takePhoto(_ sender: AnyObject) { 
     if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera) { 
      let imagePicker = UIImagePickerController() 
      imagePicker.delegate = self 
      imagePicker.sourceType = UIImagePickerControllerSourceType.camera 
      imagePicker.allowsEditing = false 
      self.present(imagePicker, animated: true, completion: nil) 
     } 
    } 

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
     if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage { 
      myImg.contentMode = .scaleToFill 
      myImg.image = pickedImage 
     } 
     picker.dismiss(animated: true, completion: nil) 
    } 

    @IBAction func savePhoto(_ sender: AnyObject) { 
     let imageData = UIImagePNGRepresentation(myImg.image!) 
     let compressedImage = UIImage(data: imageData!) 
     UIImageWriteToSavedPhotosAlbum(compressedImage!, nil, nil, nil) 

     let alert = UIAlertController(title: "Saved", message: "Your image has been saved", preferredStyle: .alert) 
     let okAction = UIAlertAction(title: "Ok", style: .default, handler: nil) 
     alert.addAction(okAction) 
     self.present(alert, animated: true, completion: nil) 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

} 

GalleryViewControllerクラスswift.itに書き込まれた発電機は、画像パス、画像バイナリ、画像REFとPDFを生成するために役立つ

import UIKit 

class GalleryViewController: UIViewController { 

    @IBOutlet weak var myImg: UIImageView! 

    @IBAction func pickPhoto(_ sender: Any) { 
     if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.photoLibrary) { 
      let imagePicker = UIImagePickerController() 
      imagePicker.delegate = self as? UIImagePickerControllerDelegate & UINavigationControllerDelegate 
      imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary 
      imagePicker.allowsEditing = true 
      self.present(imagePicker, animated: true, completion: nil) 
     } 
    } 

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
     if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage { 
      myImg.contentMode = .scaleToFill 
      myImg.image = pickedImage 
     } 
     picker.dismiss(animated: true, completion: nil) 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

} 

答えて

2

Answers Upda ted:

AppleはiOS 11.0にPDFKitを導入して以来、以下のコードを使ってuiimageをpdfに変換できます。私は下のosxを試しましたが、iOSでも同じように動作します。

// Create an empty PDF document 
let pdfDocument = PDFDocument() 

// Load or create your UIImage 
let image = UIImage(....) 

// Create a PDF page instance from your image 
let pdfPage = PDFPage(image: image!) 

// Insert the PDF page into your document 
pdfDocument.insert(pdfPage!, at: 0) 

// Get the raw data of your PDF document 
let data = pdfDocument.dataRepresentation() 

// The url to save the data to 
let url = URL(fileURLWithPath: "/Path/To/Your/PDF") 

// Save the data to the url 
try! data!.write(to: url) 

=========================================== =====

実際、多くの同様の質問と十分な回答があります。これにもう一度お答えしよう。

基本的にPDFを生成することは、iOSの図と似ています。

  1. PDFコンテキストを作成し、グラフィックススタックにプッシュします。
  2. ページを作成します。
  3. UIKitまたはCore Graphicsルーチンを使用してページのコンテンツを描画します。
  4. 必要に応じてリンクを追加します。
  5. 必要に応じて手順2,3,4を繰り返します。
  6. グラフィックススタックからコンテキストをポップするためにPDFコンテキストを終了し、コンテキストの作成方法に応じて、結果のデータを指定されたPDFファイルに書き込むか、指定されたNSMutableDataオブジェクトに格納します。

だから、最も簡単な方法は、このようなものになるだろう。そして、私たちは、ファイルにデータを保存する必要があり、

func createPDF(image: UIImage) -> NSData? { 

    let pdfData = NSMutableData() 
    let pdfConsumer = CGDataConsumer(data: pdfData as CFMutableData)! 

    var mediaBox = CGRect.init(x: 0, y: 0, width: image.size.width, height: image.size.height) 

    let pdfContext = CGContext(consumer: pdfConsumer, mediaBox: &mediaBox, nil)! 

    pdfContext.beginPage(mediaBox: &mediaBox) 
    pdfContext.draw(image.cgImage!, in: mediaBox) 
    pdfContext.endPage() 

    return pdfData 
} 

PDFファイルのすべてのNSDataを作成:

let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! 
let docURL = documentDirectory.appendingPathComponent("myFileName.pdf") 

try createPDF(image: someUIImageFile)?.write(to: docURL, atomically: true) 

続きを読む:Generating PDF Content

関連する問題