SimplePDFBuilder
创建复杂 PDF 文件的工具。
简介
SimplePDFBuilder
是建立在 PDFKit 之上的库,能够让您轻松地在应用程序中创建 PDF 文件。这是一个可定制的库,允许您添加文本、图片和其他元素,包括复杂的表格,使 PDF 文件的创建非常简单,无需从头开始绘制一切。
目录
如何使用 PDFBuilder
为了创建一个没有任何内容的简单 PDF 文件,您需要将 SimplePDFBuilder 导入到您想要使用它的地方:
import SimplePDFBuilder
构建 pdf 数据
您可以使用如下方式: | 或者这样: |
let pdf = PDFBuilder()
//pdf.someChosenMethod ...
let pdfData = pdf.build() |
let pdfData = PDFBuilder()
//.someChosenMethod ...
.build() |
pdfData 包含了 PDF 的数据,这些数据用于 PDFView 的 PDFKit 的文档属性中。有关更多信息,请参阅 如何创建自定义 PDF 预览 部分。
PDF 文档参数
为了给您的 PDF 文件添加元数据,请使用以下方法
(示例显示创建带元数据的空 PDF 文件)
let data = PDFBuilder()
.withMetaAuthor("AuthorName")
.withMetaCreator("CreatorName")
.withMetaTitle("Title")
.build()
还有一些其他参数可以设置
(示例显示创建带默认参数的空 PDF 文件)
let pdf = PDFBuilder()
pdf.withPaperSize(.A4) // default value
pdf.withPaperOrientation(.Portrait) // default value
pdf.withTextSpacing(1.08) // default value (Also Word's default)
pdf.withPaperMargins(.Normal) // default value
let data = pdf.build()
- withPaperSize: 支持从 .A1 到 .A7 的纸张大小
- withPaperOrientation: 可以是 .Album 或 .Portrait
- withTextSpacing:文本间的间距,单位为 CGFloat
- withPaperMargins:
- .Normal - 每边 1 英寸 (2.54 厘米)
- .Narrow - 每边 0.5 英寸 (1.27 厘米)
- .Moderate - 上下各 1 英寸 (2.54 厘米),左右各 0.75 英寸 (或 1.91 厘米)
- .Wide - 上下各 1 英寸 (2.54 厘米),左右各 2 英寸 (5.08 厘米)
添加文本
要添加文本,使用 addText 方法。添加的文本可以是多行的,这意味着如果字符串太长不适合一行,它会在下一行中折行。
pdf.addText(text: "BILL TO:",
alignment: .left, // default value
font: .boldArial(ofSize: 11), // default value
colour: .black) // default value
- alignment - 页面上文本的对齐方式
- font - 文本字体
- colour - 文本颜色
请参考右侧的示例
pdf.addText(text: "Text", alignment: .left, font: .boldSystemFont(ofSize: 30))
pdf.addText(text: "Text", alignment: .centre, font: .boldSystemFont(ofSize: 25))
pdf.addText(text: "Text", alignment: .right, font: .systemFont(ofSize: 20))
pdf.addText(text: someLongText)
添加图片
为了将图片添加到 PDF 文件中,请使用以下方法
pdf.addImage(image: UIImage(named:"Put Your Image Here"),
maxWidth: 150,
alignment: .right)
- image - 在 PDF 中显示的图片的 UIImage
- maxWidth - 图片宽度的点数(72 点相当于 1 英寸)
- alignment - 页面上文本的对齐方式
请参考右侧的示例
pdf.addImage(image: #imageLiteral(resourceName: "ShowLogo"), maxWidth: 300, alignment: .left)
pdf.addSpace(inches: 1)
pdf.addImage(image: #imageLiteral(resourceName: "ShowLogo"), maxWidth: 200, alignment: .centre)
pdf.addSpace(inches: 1)
pdf.addImage(image: #imageLiteral(resourceName: "ShowLogo"), maxWidth: 150, alignment: .right)
要了解 addSpace 的作用,请参阅 添加空间 部分内容
添加页脚
要给 PDF 添加页脚,请使用以下方法
pdf.addFooter(pagingEnabled: true,
text: "© Company copyrights reserved example.",
colour: UIColor.black.withAlphaComponent(0.5))
但是,如果从当前 PDF 页面添加页脚,则页脚将从第二页开始绘制(示例)
pdf.newPage() // start new PDF page
pdf.addFooter(pagingEnabled: true,
text: "© Company copyrights reserved example.",
colour: UIColor.black.withAlphaComponent(0.5))
添加表格
要创建表格,首先需要创建标题和行。如果行达到了底部页边距,则将开始新的一页PDF
按照以下方式创建标题:
let headers = [ PDFColumnHeader(name: "QTY", alignment: .left, weight: 1),
PDFColumnHeader(name: "DESCRIPTION", alignment: .centre, weight: 4),
PDFColumnHeader(name: "PRICE", alignment: .right, weight: 2)]
- 名称 - 会在表列标题中显示的文本
- 对齐方式 - 整个列的对齐方式
- 宽度 - 相对于其他列的宽度。在上面的示例中,第二个列是第一个列宽度的4倍,是第三个列宽度的2倍
按照以下方式创建表格行:
let tableRows = [ PDFTableRow(["1", "description", "10"]),
PDFTableRow(["2", "description", "15"]) ]
从标题和表格行中绘制表格
do {
try pdf.addTable(headers: headers,
rows: tableRows,
tableStyle: .Modern, // Default value
font: .systemFont(ofSize: 11), // Default value
tableColour: .darkGray) // Default value
} catch {
print(error.localizedDescription)
}
- 表格颜色 - 表格的主题颜色
- 字体 - 表格中文本的字体
- 表格样式 - 目前支持2种类型
PDF表格样式
现代 | 严格 |
---|---|
![]() |
![]() |
添加空白区域
创建空白区域有两种方式:英寸和厘米
pdf.addSpace(inches: 1.25)
pdf.addSpace(centimeters: 3.4)
pdf.addSpace(inches: -0.5) //Note: it can be negative if needed
开始新PDF页面
要开始新的一页PDF,请使用以下命令
pdf.newPage()
newPage的示例使用
let data = PDFBuilder()
.addText(text: "First page text", alignment: .centre, font: .boldSystemFont(ofSize: 30))
.newPage()
.addText(text: "Second page text", alignment: .centre, font: .boldSystemFont(ofSize: 30))
.build()
线条保持
线条保持功能可以使您在页面上绘制具有相同顶部偏移的多个元素。
pdf.holdLine()
pdf.addText(text: "LEFT TEXT", font: .systemFont(ofSize: 20))
pdf.addText(text: "CENTER TEXT", alignment: .centre, font: .systemFont(ofSize: 20))
pdf.addText(text: "RIGHT TEXT", alignment: .right, font: .systemFont(ofSize: 20))
pdf.releaseLine()
pdf.addSpace(inches: 1)
pdf.holdLine()
pdf.addImage(image: #imageLiteral(resourceName: "ShowLogo"), maxWidth: 200,alignment: .left)
pdf.addImage(image: #imageLiteral(resourceName: "ShowLogo"), maxWidth: 200,alignment: .right)
pdf.releaseLine()
如何使用内置PDF预览视图控制器
该库附带一个名为 PDFPreviewVC
的内置控制器。这在readme的第一幅图(顶部)中展示。如果您想使用它,以下是代码。确保您的应用程序使用 NavigationController
let pdf = PDFBuilder()
pdf.metaAuthor = "Maks"
pdf.metaCreator = "Maks"
pdf.metaTitle = "My PDF"
pdf.addFooter(pagingEnabled: true,
text: "© Company copyrights reserved footer.",
colour: UIColor.black.withAlphaComponent(0.5))
pdf.addText(text: "Sample text")
// Build PDF Data
let data = pdf.build()
let pdfController = PDFPreviewVC(pdfData: data)
navigationController?.pushViewController(pdfController, animated: true)
PDFPreviewVC 视图控制器有一些可以传递的参数
let pdfController = PDFPreviewVC(pdfData: data,
pdfFileName: "Testname",
removeFileOnClose: true) // Default value
- pdfData - 由
PDFBuilder
使用 .build() 生成并由PDFPreviewVC
生成的PDF数据 - pdfFileName - 如果用户决定分享文件,那么它将是文件名。
- removeFileOnClose - 为了重命名和分享文件,应用程序将其保存到应用程序临时目录并分享它。如果您不想保留文件,将其设置为true,则在ViewController消失时将其删除。
如何创建自定义PDF预览
如果您想将自定义 ViewController 作为PDF预览构建,首先您需要包含
import PDFKit
您需要在您的ViewController中创建一个属性
private var pdfView = PDFView()
自定义PDF视图控制器示例
import UIKit
import PDFKit
class CustomPDFViewController: UIViewController {
var pdfData: Data?
private var pdfView = PDFView()
override func viewDidLoad() {
super.viewDidLoad()
pdfView.backgroundColor = .white
view.addSubview(pdfView)
pdfView.translatesAutoresizingMaskIntoConstraints = false
pdfView.topAnchor.constraint(equalTo: view.topAnchor, constant: 0).isActive = true
pdfView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true
pdfView.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 0).isActive = true
pdfView.rightAnchor.constraint(equalTo: view.rightAnchor, constant: 0).isActive = true
pdfView.autoScales = true
pdfView.displayMode = .singlePageContinuous
pdfView.displaysPageBreaks = true
// Create PDFDocument from data
guard let data = pdfData else { return }
pdfView.document = PDFDocument(data: data)
pdfView.autoScales = true
}
}
然后,在您想要创建PDF的方法中使用它
let pdfData = PDFBuilder()
.addText(text: "First page text")
.build()
let customPDFViewController = CustomPDFViewController()
customPDFViewController.pdfData = pdfData
self.present(customPDFViewController, animated: true)
许可信息
- MIT许可
- 版权所有2020 © MaksBelenko。