이것은 코드 내 문서 생성 및 페이지 작업을 특징으로하는 Apple의 PDFkit에 대한 세 번째 기사입니다.
- 첫 번째 기사는 PDFKit 기본 사항 및 잉크 주석에 관한 것입니다.
- 두 번째 는 PencilKit, 텍스트 주석 및 자동 저장에 관한 것입니다.
iOS 장치에서 새 PDF 파일을 만들어야하는 경우 실제로 PDFKit을 전혀 사용할 필요가 없습니다. 이를위한 간단한 UIKit 메서드는 거의 없습니다.
먼저 UIGraphicsPDFRendererFormat
작성자 등의 PDF 문서 메타 데이터를 제공 하기 위해 객체 를 생성해야합니다 .
let format = UIGraphicsPDFRendererFormat()
let metaData = [
kCGPDFContextTitle: "Hello, World!",
kCGPDFContextAuthor: "John Doe"
]
format.documentInfo = metaData as [String: Any]
둘째, PDF 페이지 크기를 계산해야합니다. PDF 문서는 72 DPI의 기본 해상도를 사용합니다. 페이지 크기는 다음과 같습니다.
// US Letter
Width: 8.5 inches * 72 DPI = 612 points
Height: 11 inches * 72 DPI = 792 points
// A4 would be [W x H] 595 x 842 points
let pageRect = CGRect(x: 0, y: 0, width: 595, height: 842)
let renderer = UIGraphicsPDFRenderer(bounds: pageRect,
format: format)
let data = renderer.pdfData { (context) in
// Perform your drawing here
}
간단한 "Hello, world!"를 그리려면 텍스트는 다음 코드 예제를 사용합니다.
let data = renderer.pdfData { (context) in
context.beginPage()
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = .center
let attributes = [
NSAttributedString.Key.font: UIFont.boldSystemFont(ofSize: 14),
NSAttributedString.Key.paragraphStyle: paragraphStyle
]
let text = "Hello, World!"
let textRect = CGRect(x: 100, // left margin
y: 100, // top margin
width: 200,
height: 20)
text.draw(in: textRect, withAttributes: attributes)
}
- 새로운 PDF 페이지를 시작했습니다.
- 텍스트
NSParagraphStyle
에 .center
정렬 을 추가하기 위해 새 개체를 만들었습니다 .
attributes
글꼴 및 단락 스타일을 포함하는 사전을 만들었습니다 .
- 생성 된 텍스트 문자열.
textRect
텍스트가 그려 질 특정 사각형을 설명하는 구조체를 생성했습니다 .
.draw
문자열 객체의 호출 된 메서드입니다.
마지막으로 PDF 컨텍스트를 장치의 파일에 저장해야합니다. 렌더링 된 Data
객체를 반환 할 때 문서를 저장하는 방법에는 두 가지가 있습니다.
PDFKit
의 PDFDocument(data:)
객체를 초기화 하고 파일에 쓰기
let pdfDocument = PDFDocument(data: data)
let path = PATH_TO_DESIRED_FILE
pdfDocument.write(to: path)
let data = renderer.pdfData { (context) in
let url = URL_TO_DESIRED_FILE
try? rendered.writePDF(to: url) { (context) in
...
}
PDF 문서에 페이지를 추가하거나 제거하려면 Apple의 PDFKit
방법 을 사용해야 합니다.
먼저 2 개의 PDF 문서를 초기화해야합니다. 하나는 페이지가 삽입 될 것이고 다른 하나는 삽입 할 페이지를 가져올 것입니다.
let firstPDFDocument = PDFDocument(url: URL_TO_YOUR_FIRST_DOC)
let secondPDFDocument = PDFDocument(url: URL_TO_YOUR_SECOND_DOC)
// let's assume we want to insert 5th page of 2nd doc to 1st doc
let page = secondDocument.page(at: 5)
// And insert this page as first
firstDocument.insert(page, at: 0)
firstDocument.write(to: URL_TO_YOUR_FIRST_DOC)
페이지를 제거하는 것도 쉽습니다.
let pdfDocument = PDFDocument(url: URL_TO_YOUR_DOC)
pdfDocument.removePage(at: 0) // removing the first page
firstDocument.write(to: URL_TO_YOUR_DOC)