【问题标题】:Programmatically Generate PDF from HTML on iPhone在 iPhone 上以编程方式从 HTML 生成 PDF
【发布时间】:2011-04-25 16:04:08
【问题描述】:

我正在寻找一种以编程方式(在 obj-c 中)从本地 html 文件生成 PDF 文件的方法。我正在从用户输入动态生成 html,我需要创建 PDF 并将其发送给用户(通过电子邮件)。我在 PDF 生成部分遇到了困难。

我有使用 CGPDFContextCreateWithURL 创建 PDF 的代码,但我正在努力使用石英绘制页面。

我在 SO 和互联网上进行了广泛搜索,但无济于事。

非常感谢任何帮助!

【问题讨论】:

    标签: iphone objective-c pdf-generation


    【解决方案1】:

    要从 HTML 生成 pdf,您需要将 html 呈现到 Web 视图中,并拍摄 Web 视图的快照,并将它们呈现到图像上下文中。 该教程可能会有所帮助:

    http://www.ioslearner.com/convert-html-uiwebview-pdf-iphone-ipad/

    【讨论】:

      【解决方案2】:

      我编写了一小段代码,它从DTCoreText 获取NSAttributedString,并将其呈现为分页的PDF 文件。你可以在我的GitHub Repository 上找到它。它不会渲染图像或复杂的 html,但它应该适用于大多数用途。另外,如果您熟悉 CoreText,您可以扩展我的 PDF 框架设置器来生成这些项目。

      那么它现在做了什么:给它一个 HTML 字符串,它会使用 DTCoreText 生成一个 NSAttributedString,然后将其渲染成 PDF。它将 PDF 文件保存在应用程序的 Documents 文件夹中的位置交回。

      【讨论】:

        【解决方案3】:

        为什么不使用 WebService,将 HTML 页面发送到此并检索 PDF 文件?

        这样您就可以使用 iTextSharp 和 C#,大约 2 分钟即可完成。
        另外(如果你是邪恶的)你可以在你的服务器上存储和查看所有数据。

        【讨论】:

        • 我最初想使用 Web 服务,客户端希望保持应用程序完全隔离。它看起来更像是我要走这条路,这太容易了。感谢您的快速回复。
        • 如果您的客户端想要对数据保密,请使用 SSL,如果这还不够,则 Web 服务必须在客户端的服务器上运行。在这种情况下,您可能还会发现这很有趣:stackoverflow.com/questions/3787386/…
        • PS:实际上,如果您从 Objective-C 调用它,一个简单的 HTTP(S) 帖子将比 Web 服务容易得多。您可以在通用处理程序 (ashx) 中处理。
        【解决方案4】:

        我自己没有尝试过这个,所以我没有什么可以提供具体的,但我不得不想象由于成像模型,在 iPhone 上必须有一种简单的方法来做到这一点。我会更深入地研究文档。

        至于与客户的回击取决于您,但可能有多种原因希望将所有内容都保留在本地。坦率地说,我雇来的人来这里,他无法完成这项特殊任务,我一点也不高兴。因此,请仔细考虑这次反击。哦,即使您确实推回网络服务器也是一个糟糕的选择。我会更进一步,研究为什么你首先需要 HTML 中的东西。

        【讨论】:

        • 除此特定问题外,还有其他原因将其放到网上。此外,将其推送到 Web 服务器也不是一个糟糕的选择,请尽量坚持回答所提出的问题。
        • @JWD:他坚持这个问题。您询问了如何从本地 HTML 文件生成 PDF,并将其标记为 iPhone,这意味着在 iPhone 上。您从未说过“服务器端解决方案是可以接受的”。
        【解决方案5】:

        我从来没有尝试过,所以我不知道它是否会起作用,但是如何将 HTML 加载到 UIWebView 中,然后让视图将自身绘制到 PDF 上下文中?例如

        UIWebView *webview = [[UIWebView alloc] initWithFrame:CGRectMake(...)];
        [webview loadHTMLString:html baseURL:...];
        

        然后:

        - (void)webViewDidFinishLoad:(UIWebView *)webview {
            CGPDFContextRef pdfContext = CGPDFContextCreateWithURL(...);
            [webview.layer drawInContext:pdfContext];
            ...
        }
        

        【讨论】:

        • 感谢您的输入,我正在试一试,但只是想出了一个空白(白色)pdf。不过,我可能在这里遗漏了一些东西。
        【解决方案6】:

        我是按照这个 SO 做到的:https://stackoverflow.com/a/13342906/448717

        为了保持相同的内容比例,我不得不将 WKWebView 的大小乘以为 UIPrinterRenderer 设置的 printableRect 大小的 1.25 倍,因为屏幕点与 PostScript 的不同......我猜。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-12-11
          • 1970-01-01
          • 2011-05-20
          • 1970-01-01
          • 2010-09-21
          • 2016-07-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多