在iOS上打印PDF,不打印背景图像

时间:2014-04-30 03:16:10

标签: ios objective-c pdf cordova

我试图在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 个答案:

答案 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。