html - 使用自定义渲染器的本地 HTML 到 PDF 仅添加最近查看的图像

标签 html objective-c ios pdf

这里有一个问题要问大家。我在设备上本地存储了一个 html 文档,其中包含本地存储的图像(不在 bundle 中,在磁盘上)。我在 UIWebView 中显示 html 页面,用户可以选择将页面转换为 PDF 并通过电子邮件发送页面。 pdf 是使用 UIMarkupTextFormatter 和自定义 UIPrintPageRenderer 生成的,而不是通过将网页制作成图像并将图像呈现为 PDF。这是因为 PDF 需要可搜索。

无论如何,这工作得很好。但是,客户现在要求我们将大页面分成分页 block ,而不是在 uiwebview 中只有一个页面。导出功能仍然需要整个网页不被分解成要导出的页面。

现在出现问题,导出的 PDF 仅包含当前显示页面的图像。因此,例如,如果我将整个 html 页面分成 4 个较小的页面,并且用户在按导出时正在查看第 3 页,那么 pdf 将正确包含所有网页信息,但仅包含第 3 页上的图像。 pdf 不包含空白图像或格式错误的图像,它们只是不存在。如果我然后更改到其他页面之一并再次导出,我将获得该阶段的图像。 HTML 是在开始时生成的,所以唯一的区别是是否显示图像。

现在,我的猜测是 UIMarkupTextPrintFormatter 只显示缓存中的图像。这是有道理的,因为用户通常希望打印他们看到的页面,因此渲染器不必在缓存之外寻找资源。 html 文档中的图像的路径指向文件在磁盘上的位置,例如 'file:///var/mobile/Applications/C409BDBD-1254-4ADA-BAD8-F9BE5C171C93/Documents/Export/SoMeJobN/Images/915F0470-785D-40BF-A3E7-9945646843A7.jpg' 并且我已验证该位置存在所有图像。

我还覆盖了 NSURLCache 并设置了自定义缓存。我发现 markupformatter 正在调用

 -(NSCachedURLResponse *) cachedResponseForRequest:(NSURLRequest *)request

网页中不在当前页面上的每个图像的方法,因此它从缓存中请求不在当前网页上的 Assets !

我尝试使用以下代码返回从磁盘加载的图像。

NSString *pathString = [[request URL] absoluteString];


    // Load the data
    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:pathString]];
            // Create the cacheable response
    UIImage *img  = [UIImage imageWithData:data];
    NSLog(@"%@",img);

    NSURLResponse *response =
    [[[NSURLResponse alloc]
      initWithURL:[request URL]
      MIMEType:@"image/jpeg"
      expectedContentLength:-1
      textEncodingName:nil]
     autorelease];
    NSCachedURLResponse *cachedResponse =
    [[[NSCachedURLResponse alloc] initWithResponse:response data:data] autorelease];


    return cachedResponse;

并且我已验证 UIImage 已正确加载,因此数据是正确的。但它没有显示在 PDF 中。那么,有没有人知道为什么会发生这种情况,以前遇到过这个问题,或者能想到其他任何让我尝试的事情。我可以重构代码以依次加载所有页面并导出每个页面的 PDF 部分,但这似乎是解决问题的不雅方法。

最佳答案

建议:在创建 pdf 之前,对其他页面执行 jquery.get(...) 调用。按正确的顺序将它们组合成单个 html 对象,然后通过 ajax 或通过 javascript form.submit()

将 html 发送到您的 html-pdf 转换器

关于html - 使用自定义渲染器的本地 HTML 到 PDF 仅添加最近查看的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13850440/

相关文章:

android - 如何为移动设备应用不同的 CSS,而不仅仅是基于媒体宽度/高度

ios - 如何使单行TextView仅水平滚动

iphone - 如何在iPhone的手机上显示倒数计时器?

ios - 显示所选位置周围的圆圈

ios - 如何调试应用程序 :openURL:sourceApplication:annotation?

html - Logo 和导航不在标题中居中

html - 具有反向可折叠行的响应式 HTML 表格

html - 离线网络应用案例

iphone - 在 iOS 设备上启动应用程序时出现 XCode 4.4 错误

iphone - Universal Ad-Hoc 版本确实安装在 ipad 上,但没有安装在 iphone 上