在iPhone上以编程方式从HTML生成PDF

4
我正在寻找一种以编程方式(使用obj-c)从本地html文件生成PDF文件的方法。我正在根据用户输入动态生成html,需要创建PDF并将其发送给用户(通过电子邮件)。我在PDF生成部分遇到了困难。
我有使用CGPDFContextCreateWithURL创建PDF的代码,但在使用quartz绘制页面时遇到了困难。
我已经在SO和互联网上进行了广泛的搜索,但没有结果。
非常感谢任何帮助!
6个回答

5

1
我写了一小段代码,可以从 DTCoreText 中获取 NSAttributedString 并将其渲染成分页的 PDF 文件。您可以在我的GitHub Repository上找到它。它无法呈现图像或复杂的 HTML,但对于大多数用途应该足够了。此外,如果您熟悉 CoreText,可以扩展我的 PDF 框架设置器以生成这些项目。
现在它做什么:给它一个 HTML 字符串,它将使用 DTCoreText 生成一个 NSAttributedString,然后将其渲染成 PDF。它将返回保存 PDF 文件的位置,保存在应用程序的文档文件夹中。

0
我从未尝试过这个,所以不知道它是否有效,但是你可以将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。也许我漏掉了什么。 - JWD

0
为什么不使用 WebService,将 HTML 页面发送到其中并检索 PDF 文件呢?
这样,您可以使用 iTextSharp 和 C#,大约 2 分钟即可完成。 此外(如果您是邪恶的),您可以存储和查看服务器上的所有数据。

我最初想使用 Web 服务,但客户希望将应用程序完全隔离。看起来我要采取这种方法,因为这样更加容易。感谢您的快速回复。 - JWD
如果您的客户希望保持数据机密性,请使用SSL,如果这还不够,Web服务必须在客户端服务器上运行。在这种情况下,您可能还会发现以下内容很有趣:https://dev59.com/RFDTa4cB1Zd3GeqPLbM6 - Stefan Steiger
实际上,如果您从Objective-C中调用它,一个简单的HTTP(S) POST比Web服务要容易得多。您可以在通用处理程序(ashx)中处理它。 - Stefan Steiger

0

我自己还没有尝试过这个,所以没有具体的建议,但我想在 iPhone 上肯定有一种简单的方法来实现这个,因为它具备图像模型。我建议你深入研究文档。

至于向客户提出反对意见,这取决于你自己,但保持所有内容本地化可能有多个原因。坦白说,如果我雇佣的人告诉我他无法完成这个特定任务,我会非常不高兴。所以你需要好好考虑一下是否要提出反对意见。而且,即使你提出反对意见,选择一个网络服务器也不是一个明智的选择。我建议你再往前推一步,调查一下为什么你首先需要用 HTML 来实现某些功能。


除了这个特定问题之外,还有其他原因需要将其上线。此外,将其推送到Web服务器并不是一个不好的选择,请尽量回答所提出的问题。 - JWD
@JWD:他一直在坚持问题。你问了如何从本地HTML文件生成PDF,并标记了iPhone,这意味着在iPhone上。你从未说过“服务器端解决方案可接受”。 - JeremyP

0

我是按照这个SO的方法做的:https://dev59.com/wmgv5IYBdhLWcg3wCsg8#13342906

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接