当前位置: 首页 > 面试题库 >

使用Swift for iOS以编程方式创建和存储PDF文档

子车凯泽
2023-03-14
问题内容

我有一个可以查看项目中已经存储的PDF的应用程序。我希望能够创建一个新的PDF文档并将其存储在app目录中,以便以后在已经存在的查看器中查看。将通过var todoList: [String] = []显示在上的数组创建PDF
UITableView。我知道要创建PDF,必须创建文件名,路径和目录。我不知道该怎么做。我在网上看到了有关URL和URL请求的参考,但是我不确定这是否是我想要做的正确方法。有人可以给我一些建议和指导吗?我所能找到的一切都是针对Objective-
C的。


问题答案:

我使用此代码创建和保存文件(使用HTML)

func createPDF() {
    let html = "<b>Hello <i>World!</i></b> <p>Generate PDF file from HTML in Swift</p>"
    let fmt = UIMarkupTextPrintFormatter(markupText: html)

    // 2. Assign print formatter to UIPrintPageRenderer

    let render = UIPrintPageRenderer()
    render.addPrintFormatter(fmt, startingAtPageAt: 0)

    // 3. Assign paperRect and printableRect

    let page = CGRect(x: 0, y: 0, width: 595.2, height: 841.8) // A4, 72 dpi
    let printable = page.insetBy(dx: 0, dy: 0)

    render.setValue(NSValue(cgRect: page), forKey: "paperRect")
    render.setValue(NSValue(cgRect: printable), forKey: "printableRect")

    // 4. Create PDF context and draw

    let pdfData = NSMutableData()
    UIGraphicsBeginPDFContextToData(pdfData, .zero, nil)

    for i in 1...render.numberOfPages {
        UIGraphicsBeginPDFPage();
        let bounds = UIGraphicsGetPDFContextBounds()
        render.drawPage(at: i - 1, in: bounds)
    }

    UIGraphicsEndPDFContext();

    // 5. Save PDF file

    let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]

    pdfData.write(toFile: "\(documentsPath)/file.pdf", atomically: true)
}

然后,UIWebView使用以下代码将其从documents目录加载到其中:

func loadPDF(filename: String) {
    let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
    let url = URL(fileURLWithPath: documentsPath, isDirectory: true).appendingPathComponent(filename).appendingPathExtension("pdf")
    let urlRequest = URLRequest(url: url)
    webView.loadRequest(urlRequest)
}


 类似资料:
  • 问题内容: 我知道我可以使用Java中的 api 以编程方式创建文件,如下所示: 但是是否有任何 API 可以构建树?(例如Dom之类的api) 我需要这样的东西: 和: 提前致谢。 问题答案: 由于XSLT也是XML,因此您可以简单地使用相同的策略: 等等… 但这不是很优雅。您应该改用库或框架,但应该很容易找到一个谷歌浏览器。

  • 是否有无论如何创建pem和pk8文件由我的应用程序本身使用java编程?

  • 问题内容: 我一直在尝试以编程方式重做我的应用程序上的工作。(不使用情节提要) 除了手动制作导航控制器外,我几乎完成了。 我一直在做一些研究,但找不到任何手动实现此方法的文档。(我开始将应用程序制作为单视图应用程序) 目前,我只有1个ViewController。当然是appDelegate 导航控制器将在应用程序的所有页面中使用。 如果有人可以帮助我,或发送指向一些适当文档的链接以编程方式进行此

  • 我正试图弄清楚如何使用ANTLR,但我很难消化我所发现的东西。到目前为止,以下是我的资源: 如何使用ANTLR4创建AST? 如何使用Gradle 2.10将一个ANTLR lexer语法导入到另一个语法中? https://github.com/antlr/grammars-v4/tree/master/java8 https://dzone.com/articles/parsing-any-l

  • 我想创建一个具有此形状的xml,在其中我将内部元素插入循环中,并在元素上设置属性。 这是我目前掌握的代码: 我得到了一个ModifyException,因为我给insertAfterHead打了两次电话。如何生成所需的xml形状?我还不完全理解如何将偏移量放到正确的位置。

  • 问题内容: 我有一个自动化的集成测试工具,想简化日志记录(使用log4j实现) 我有许多高级测试,每个测试都有一个ID,并且每个测试都需要一个 单独的 日志文件。由于测试是随机创建的,因此直到运行时才知道ID。 因此,我想确保将每个高级测试中的日志记录写到该测试的日志文件中。 我不想创建自定义日志级别,也不想将日志发送到所有附加程序。 有人知道这样做的方法吗? 问题答案: 您可以轻松地以编程方式调