前提・実現したいこと
画像のように、PDFとPDFをくっつけてひとつのPDFにし、それをiPhone画面で確認できるようにした後、印刷できるようにしたいです。
ですが、どのようにPDFとPDFをくっつければいいのかわかりません。
左側はアプリ内でローカル保存したPDF。
右側はアプリ内にあらかじめ取り込んだPDFです。
あと、できれば真ん中に点線を入れたいです。
考え方など、ご教授よろしくお願いいたします。
該当のソースコード
ローカル保存するVC
Swift
1@IBAction func push(_ sender: Any) { 2 print("push") 3 4 5 let pdfData = NSMutableData() 6 UIGraphicsBeginPDFContextToData(pdfData, self.view.bounds, nil) 7 UIGraphicsBeginPDFPage() 8 9 guard let pdfContext = UIGraphicsGetCurrentContext() else { return } 10 self.view.layer.render(in: pdfContext) 11 UIGraphicsEndPDFContext() 12 13 if let documentDirectories = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first { 14 let documentsFileName = documentDirectories + "/test.pdf" 15 UserDefaults.standard.set(documentsFileName, forKey:"filePath") 16 debugPrint(documentsFileName) 17 pdfData.write(toFile: documentsFileName, atomically: true) 18 } 19 20 }
PDFとPDFを合成したいVC
Swift
1 2import UIKit 3import PDFKit 4 5class PhotoT: UIViewController { 6 7///A4+A4 8 9 10 @IBOutlet weak var left: UIImageView! 11 @IBOutlet weak var right: UIImageView! 12 13 override func viewDidLoad() { 14 super.viewDidLoad() 15 16 17 // プロジェクトにあらかじめ取り込んでおいたPDFの読み込み (右側に配置したいPDF) 18 let binsenhoge = UserDefaults.standard.integer(forKey: "selectedTag") 19 let binsenpath: String = Bundle.main.path(forResource: "huto(binsenhoge)", ofType: "pdf")! 20 print("くっつけるのは") 21 print(binsenpath) 22 23 24 drawPDFfromURL(url: binsenpath) 25 26 27 28 } 29 30 31 func drawPDFfromURL(url: URL) -> UIImage? { 32 33 34 guard let document = CGPDFDocument(url as CFURL) else { return nil } 35 guard let page = document.page(at: 1) else { return nil } 36 37 let pageRect = page.getBoxRect(.mediaBox) 38 let renderer = UIGraphicsImageRenderer(size: pageRect.size) 39 let img = renderer.image { ctx in 40 UIColor.white.set() 41 ctx.fill(pageRect) 42 43 ctx.cgContext.translateBy(x: 0.0, y: pageRect.size.height) 44 ctx.cgContext.scaleBy(x: 1.0, y: -1.0) 45 46 ctx.cgContext.drawPDFPage(page) 47 } 48 49 return img 50 } 51 52
##エラー
swift
1drawPDFfromURL(url: binpath)
Cannot convert value of type 'String' to expected argument type 'URL'
###アドバイスを受けて
該当のファイルを表示させることができるようになりました。
ですが不具合が起きています。
保存したPDFを確認すると上に余白はほとんどない状態なのですが、UIImageView(aspect fit)で表示すると下のように表示されてしまいます。
PDFとしてローカル保存した際のコード
Swift
1 @IBAction func push(_ sender: Any) { 2 print("push") 3 4 5 let x = getimage.frame.origin.x 6 let y = getimage.frame.origin.y 7 //UIImageView(getimage)のサイズ取得 8 let imageWidth = self.getimage.frame.width 9 let imageHeight = self.getimage.frame.height 10 11 12 let pdfData = NSMutableData() 13 // ↓ -yとすることでNavigationbarとステータスバーの下からPDFを保存することができました 14 UIGraphicsBeginPDFContextToData(pdfData, CGRect(x: x, y: -y, width: imageWidth, height: imageHeight), nil) 15 UIGraphicsBeginPDFPage() 16 17 guard let pdfContext = UIGraphicsGetCurrentContext() else { return } 18 self.view.layer.render(in: pdfContext) 19 UIGraphicsEndPDFContext() 20 21 if let documentDirectories = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first { 22 let documentsFileName = documentDirectories + "/test.pdf" 23 UserDefaults.standard.set(documentsFileName, forKey:"filePath") 24 debugPrint(documentsFileName) 25 pdfData.write(toFile: documentsFileName, atomically: true) 26 } 27 28 } 29 30
clip to Bounds
補足情報(FW/ツールのバージョンなど)
Swiftのversionは4.1.2
Xcodeのversionは9.4.1
回答2件
あなたの回答
tips
プレビュー