在 iOS 上打印 PDF,背景图像不打印
Posted
技术标签:
【中文标题】在 iOS 上打印 PDF,背景图像不打印【英文标题】:Printing PDF on iOS, background image not printing 【发布时间】:2014-04-30 03:16:10 【问题描述】:我正在尝试在 ios 上的 Cordova 应用程序中打印 PDF 文件。
文件是在 Cordova 应用程序中使用 jsPDF 生成的,然后我修改了 katzer cordova-plugin-printer 以接受原始 PDF 数据作为字符串,将其转换为 NSData 并打印出来。
- (void) printPDFFromData:(CDVInvokedUrlCommand*)command
if (!self.isPrintingAvailable)
return;
NSArray* arguments = [command arguments];
NSString* documentData = [arguments objectAtIndex:0];
NSData* pdfData = [documentData dataUsingEncoding:NSUTF8StringEncoding];
UIPrintInteractionController* controller = printController;
[self adjustSettingsForPrintController:controller];
controller.printingItem = pdfData;
[self openPrintController:controller];
[self commandDelegate];
使用 iOS 打印模拟器(我无法使用 AirPrint 打印机),PDF 似乎可以打印出来,只是没有打印背景图像,只是覆盖了它的矢量图。
保存到 PDF 文件时相同的原始输出数据将显示背景图像,当您打印该文件时,将打印背景图像。
这只是打印机模拟器的异常,还是我需要以某种方式设置打印控制器才能打印文档中的图像?
【问题讨论】:
【参考方案1】:我找到了解决问题的方法。在将字符串数据从 javascript 解码到 Objective-C 时,有些东西丢失了。
为了解决这个问题,我在我的 JS 端对 PDF 文档进行 Base64 编码,然后将其发送到插件:
var startIndexOfBase64Data = 28;
var base64Document = doc.output('dataurlstring').substring(startIndexOfBase64Data);
window.plugin.printer.printPDFFromData(base64Document);
然后我需要添加
NSData+Base64.m 和 NSData+Base64.h
从this sample project到我的插件目录,允许这行代码将Base64字符串转换成NSData:
NSData* pdfData = [NSData dataFromBase64String:documentData];
然后文件就被打印出来了。
现在我要去看看能否让它在 android 上运行。
【讨论】:
我还需要从 PhoneGap 应用程序 (iOS) 打印原始 base64 pdf 数据——您是否碰巧拥有您使用的修改后的 katzer 插件的公共分支?以上是关于在 iOS 上打印 PDF,背景图像不打印的主要内容,如果未能解决你的问题,请参考以下文章
在 IE 和 Mozilla Firefox 中,背景颜色和背景图像未在打印到 PDF 时显示
OL3 和以 OSM 为背景层的 geoserver 打印模块