SimplePDFBuilder 0.1.0

SimplePDFBuilder 0.1.0

MaksBelenko 维护。



  • 作者
  • MaksBelenko

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表格样式

现代 严格
Modern PDF Table Style Strict PDF Table Style

添加空白区域

创建空白区域有两种方式:英寸和厘米

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)

许可信息

License