Swift代码如何实现强制打印机按指定比例打印的功能?
Swift强制按指定比例打印图片实现方案
因为UIPrintInfo与UIPrintInteractionController未提供直接的缩放控制接口,我们可以通过预先重绘图片为目标比例尺寸的方式实现需求,重绘后的图片传入打印控制器即可强制按指定比例输出。
完整实现代码
/// 按指定缩放比例打印图片 /// - Parameters: /// - image: 原始待打印图片 /// - scale: 缩放比例,1.0为原图尺寸打印,小于1为缩小,大于1为放大 static func printImage(image: UIImage, scale: CGFloat = 1.0) { // 计算缩放后的目标尺寸 let targetSize = CGSize( width: image.size.width * scale, height: image.size.height * scale ) // 重绘生成指定尺寸的新图片 let scaledImage = UIGraphicsImageRenderer(size: targetSize).image { _ in image.draw(in: CGRect(origin: .zero, size: targetSize)) } // 原有打印逻辑 let printInfo = UIPrintInfo(dictionary: nil) printInfo.outputType = .general printInfo.jobName = "Printing" let printController = UIPrintInteractionController.shared printController.printInfo = printInfo printController.printingItem = scaledImage let containerView = UIImageView(frame: CGRect(origin: .zero, size: targetSize)) printController.present(from: containerView.bounds, in: containerView, animated: true) }
固定宽高比适配逻辑
如果需要强制固定宽高比(比如3:2、4:3)而非全局缩放,替换尺寸计算和重绘逻辑即可:
// 示例:强制按4:3比例打印,图片居中留白不拉伸 let targetAspect: CGFloat = 4.0 / 3.0 let originalAspect = image.size.width / image.size.height let fitScale = min(targetSize.width / image.size.width, targetSize.height / image.size.height) let drawRect = CGRect( x: (targetSize.width - image.size.width * fitScale) / 2, y: (targetSize.height - image.size.height * fitScale) / 2, width: image.size.width * fitScale, height: image.size.height * fitScale ) // 重绘时使用drawRect替代原先的zero origin rect let scaledImage = UIGraphicsImageRenderer(size: targetSize).image { _ in image.draw(in: drawRect) }
注意事项
- 重绘操作默认保留原图分辨率,不会造成画质损失
- 如果需要适配打印纸张尺寸,可通过
UIPrintInteractionController.printPaper属性获取纸张尺寸后再动态计算目标比例 - 复杂打印布局场景可替换为
UIPrintPageRenderer自定义页面边距、多页内容等配置
内容的提问来源于stack exchange,提问作者Dan Selig
相关产品推荐
相关产品推荐

