0

我的 iOS 应用程序调用 .NET Web 服务来恢复 PDF 时遇到一个奇怪的问题。

  • Web 服务做一些事情,并返回一个 PDF 文档作为 Web 服务的参考(通过out 参数
  • iOS 应用程序调用 Web 服务,接收答案并处理接收到的 XML。

首先,Web 服务只返回一个“简单”的 pdf(在 Word 中创建)。我测试了我的应用程序,一切运行良好。

当时我很开心 :)。然后,我使用 Microsoft Report Viewer 来真正生成 PDF...

所以我真的实现了我的 web 服务来使用 ReportViewer ( http://msdn.microsoft.com/en-us/library/ms251671(v=vs.80).aspx ) 创建 PDF。生成的pdf是正确的,我可以在生成时在我的服务器上打开它。但是当我在 iOS 应用程序中收到答案时,我无法打开它,因为它已损坏

这是我从 Web 服务收到的 XML 的不同之处:

因此,主要区别在于图像参数与简单 PDF为一体,与 ReportViewer PDF拆分。

实际上我不知道为什么字节数组会被拆分,而且我不知道我能做些什么来接收有效的 PDF。

再一次,用 ReportViewer 生成的 PDF 很好,我可以在服务器上打开它,当我通过电子邮件发送时,我可以在我的 iPad 上打开它。当 Web 服务将 PDF 作为字节数组返回给我时,问题就来了……

4

2 回答 2

1

“分割”图像实际上是 Web 服务尝试解析图像以查找行分隔符(即 0d0a == 回车/换行)的产物。如果幸运的话,您可以通过获取每条记录(包括 0d0a)并将它们连接起来来重新组合图像。这可能比解决真正的问题更容易,即您的 Web 服务不会向您发送单个 blob,而是尝试将图像解析为“行”。

于 2013-05-30T12:28:39.817 回答
0

没关系,我通过连接图像数组中包含的所有数据解决了我的问题。

因此,考虑到我从 Web 服务 ( http://pastie.org/7982811 ) 收到的 XML,这是我构建正确 NSData (pdf) 的 Objective-c 代码:

NSMutableData *concatData = [NSMutableData data];
NSArray *partsData = [result objectForKey:@"image"];

for(NSDictionary *dicPdfDataLine in partsData) {            // Foreach parts of data
    NSArray *arrayPdfDataLine = [dicPdfDataLine allValues];
    NSData *dataLine = [arrayPdfDataLine objectAtIndex:0];  // Get the NSData of the current part part
    [concatData appendData:dataLine];                       // Concat the data
}
于 2013-05-31T09:09:53.693 回答