Converting uiimageview to pdf - Swift

后端 未结 3 1738
旧时难觅i
旧时难觅i 2020-12-15 13:33

I am trying to create an iOS app using swift that will let the user either take a photo or choose an image from their gallery, and convert it to a pdf file that they are abl

相关标签:
3条回答
  • 2020-12-15 14:15

    PDF Generator written in swift.it will help to generate PDF with image path, image binary, image ref (CGImage)

    https://github.com/sgr-ksmt/PDFGenerator

    0 讨论(0)
  • 2020-12-15 14:28

    in swift 5 using PDFKit : First Import PDFKit

    tan use this array Extension :

    import UIKit
    import PDFKit
    
    
    extension Array where Element: UIImage {
    
          func makePDF()-> PDFDocument? {
            let pdfDocument = PDFDocument()
            for (index,image) in self.enumerated() {
                let pdfPage = PDFPage(image: image)
                pdfDocument.insert(pdfPage!, at: index)
            }
            return pdfDocument
        }
    }
    
    

    and use this :

    let imageArray = [UIImage(named: "1")!,UIImage(named: "2")!] let yourPDF = imageArray.makePDF()

    0 讨论(0)
  • 2020-12-15 14:34

    Answers Updated:

    Since Apple introduced PDFKit to iOS 11.0, you can use the code below to convert uiimage to pdf, I only tried the osx below, but it should work the same way on 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)
    

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

    Actually there're a lot similar questions and good enough answers. Let me try to answer this again.

    Basically generating PDF is similar to the drawing in iOS.

    1. Create a PDF context and push it onto the graphics stack.
    2. Create a page .
    3. Use UIKit or Core Graphics routines to draw the content of the page.
    4. Add links if needed .
    5. Repeat steps 2, 3, and 4 as needed.
    6. End the PDF context to pop the context from the graphics stack and, depending on how the context was created, either write the resulting data to the specified PDF file or store it into the specified NSMutableData object.

    So the most simple way would be something like this:

    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
    }
    

    That created all the NSData for the PDF file, then we need to save the data to file:

    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)
    

    Read more here: Generating PDF Content

    0 讨论(0)
提交回复
热议问题