在 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 时显示

强制浏览器在 chrome、firefox 上打印背景图像

怎么用PDF虚拟打印机给PDF添加背景

OL3 和以 OSM 为背景层的 geoserver 打印模块

EXCEL VBA:循环正在工作,但在打印到 PDF 文件之前不刷新

CSS打印样式。需要让水印背景重复打印,水印图片要怎么设置才能打印出来?