我试图在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文件时的相同原始输出数据将显示背景图像,当您打印该文件时,将打印背景图像。
这只是打印机模拟器的异常吗?还是我需要以某种方式将打印控制器设置为能够在文档中打印图像?
答案 0 :(得分:0)
我找到了解决问题的方法。在将字符串数据从JavaScript解码为Objective-C时,有些东西丢失了。
为了解决这个问题,我在我的JS方面编写了PDF文档,然后将其发送到插件中:
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。