【问题标题】:How to convert (.doc,.xls,.ppt) to pdf using objective c? [closed]如何使用objective c将(.doc、.xls、.ppt)转换为pdf? [关闭]
【发布时间】:2014-09-25 11:45:47
【问题描述】:

我可以在 pdf 文件上实现注释并将其导出。

但在 doc、xls 和 ppt 的情况下,我无法使用 Objective c 应用注释?

所以我打算将 (.doc,.xls,.ppt) 文件转换为 pdf 格式。

使用 UIKit 或 Quartz 框架可以实现吗?

【问题讨论】:

  • 当然有可能,但工作量很大。
  • @Droppy 感谢您的建议。 .你能推荐任何苹果的方法或例子吗?
  • 您了解要克服的问题吗?
  • 是的,我能理解..但我不知道如何启动?

标签: ios objective-c uikit quartz-core


【解决方案1】:

您可以使用 google docs API 来做到这一点。

我已经实现了this

试一试,很容易实现……

第二个选项:使用以下,我从here找到的。


(1)使用UIWebView显示PPT的内容。格式良好的 (!) HTML 允许您解析它。使用

获取html
NSString *htmlContent = [self.webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"];

(2)统计div class = 'slide的个数得到幻灯片个数

(4) 您需要使用以下代码解析 HTML 以获取样式和 div

(5) 获取所有样式

- (NSString *)getStyles:(int)slideCount forView:(UIWebView *)view {

    NSString *getElementByTag = [[NSString alloc] init];
    NSString *allStyles = [[NSString alloc] init];

    for (int i = 0; i < slideCount; i++) {
        getElementByTag = [NSString stringWithFormat:@"document.getElementsByTagName('style')[%d].innerHTML", i];
        NSString *style =  [[view stringByEvaluatingJavaScriptFromString:getElementByTag] stringByAppendingString:@"\n"];
        allStyles = [allStyles stringByAppendingString:style];
    }

    allStyles = [@"<style type='text/css'>" stringByAppendingString: allStyles];

    return [allStyles stringByAppendingString:@"</style>"];
}

(6) 将步骤 5 中的所有样式与 div 标记内容连接起来。定义一个NSMutableArray 变量来存储所有带有样式的幻灯片以供将来参考。定义NSMutableArray *slides 存储所有幻灯片

- (void)makeSlides:(int)slideCount forView:(UIWebView *)view {

    self.slides = [[NSMutableArray alloc] init];

    for (int i = 0; i < slideCount; i++) {
        NSString *slideBody = [NSString stringWithFormat:@"document.getElementsByClassName('slide')[%d].innerHTML", i];
        NSString *div = [view stringByEvaluatingJavaScriptFromString:slideBody];

        NSString *slide = [self.slideStyles stringByAppendingString:div];
        [self.slides addObject:slide];
    }
}

希望对你有帮助

【讨论】:

  • 感谢 Roman C,提供指导。我正在改变它
  • 投反对票,因为您刚刚复制并粘贴了另一个 stackoverflow 答案。如果您回答只是链接,那么它不是答案,应该放在 cmets 下。
  • 感谢山姆·布达。但有人建议我不要仅通过堆栈溢出发布链接。这就是为什么我粘贴了整个答案。顺便说一句,我承认我在粘贴之前从另一个答案中找到了这个。
  • 除非答案不正确,否则您不应仅仅因为粘贴而拒绝投票。
  • 如果您没有添加任何实际代码或详细说明,而仅显示“去查看此处链接”,那么它的“不是”答案。您只需要在用户 cmets 下添加这些链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-05
  • 1970-01-01
  • 1970-01-01
  • 2016-05-17
  • 2011-04-22
  • 2020-10-11
  • 2010-11-16
相关资源
最近更新 更多