繁体   English   中英

从 base64 字符串打印 NSImage

[英]Print NSImage from base64 string

我想打印一个 base64 编码图像(从 web 视图中的 canvas 传入)。 如何读取/打印 base64 字符串? 这是我到目前为止所拥有的:

- (void) printImage:(NSString *)printerName andData:(NSString *)base64img andW:(float)paperW andH:(float)paperH {
    
    NSImage *img = [base64img dataUsingEncoding:NSDataBase64Encoding64CharacterLineLength];
    
    NSPrintInfo *printInfo = [NSPrintInfo sharedPrintInfo];
    [printInfo setTopMargin:0.0];
    [printInfo setBottomMargin:0.0];
    [printInfo setLeftMargin:0.0];
    [printInfo setRightMargin:0.0];
    [printInfo setHorizontalPagination:NSFitPagination];
    [printInfo setVerticalPagination:NSFitPagination];
    
    [printInfo setPaperSize:NSMakeSize(paperW, paperH)];
    [printInfo setPrinter:[NSPrinter printerWithName:printerName]];
    
    NSPrintOperation *op = [img printOperationForPrintInfo: printInfo autoRotate: YES];
    
    [op setShowsPrintPanel:NO];
    [op setShowsProgressPanel:NO];
    [op runOperation];
}

提前致谢!

此行至少有三个错误:

NSImage *img = [base64img dataUsingEncoding:NSDataBase64Encoding64CharacterLineLength];
  • 首先, dataUsingEncoding:消息要求字符串将自身编码为数据,但您需要解码操作,而不是编码操作。

  • 其次, dataUsingEncoding:方法需要一个NSStringEncoding参数,并且NSDataBase64Encoding64CharacterLineLength不是NSStringEncoding (它是一个NSDataBase64EncodingOptions 。)

    不幸的是,因为您使用的是 Objective-C 而不是 Swift,所以编译器不会拒绝此代码。 (也许它会发出警告?我没有尝试过。)

  • 第三, dataUsingEncoding:返回一个NSData ,而不是一个NSImage 我很确定编译器至少会为此发出警告。

您需要使用initWithBase64EncodingString:options:将字符串解码为NSData ,然后您需要使用initWithData:NSData创建一个NSImage

NSData *data = [[NSData alloc] initWithBase64EncodedString:base64img
    options:NSDataBase64DecodingIgnoreUnknownCharacters];
if (data == nil) {
    return;
}

NSImage *img = [[NSImage alloc] initWithData:data];
if (img == nil) {
    return;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM