【问题标题】:Setting pages to be printed for UIPrintPageRenderer / UIPrintInteractionController为 UIPrintPageRenderer / UIPrintInteractionController 设置要打印的页面
【发布时间】:2016-01-21 06:37:10
【问题描述】:

我有一个要在我的 iOS 应用程序中使用 AirPrint 打印的 HTML 字符串。但是,字符串是可自定义的,并且允许用户设置边距/填充、字体/字体大小、方向等。

因此,有时输出可能超过 2 页,其中第二页为空白。在那里我想为要打印的页面设置一个范围。实际上,无论输出是什么,我都只想打印第一页。

这是打印交互控制器对话框,你可以看到没有设置范围并且输出超过一页:

这是我的代码:

// create an html output text
let markupText = "<div style='width: 100%; text-align: center;'><div style='display: inline-block; margin-top: 35mm; margin-left: 45mm;'>Hello, printer.</div></div>"

// initialize print formatter
let formatter = UIMarkupTextPrintFormatter(markupText: markupText)
formatter.contentInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
formatter.startPage = 0

// initialize print renderer and set its formatter
let printRenderer = UIPrintPageRenderer()
printRenderer.addPrintFormatter(formatter, startingAtPageAtIndex: 0)
printRenderer.prepareForDrawingPages(NSMakeRange(0, 1))

// initialize print controller to present print dialog
let printController = UIPrintInteractionController.sharedPrintController()
printController.printPageRenderer = printRenderer
printController.presentAnimated(true, completionHandler: nil)

我无法找到有关设置范围的足够信息,但我认为prepareForDrawingPages 方法可以解决问题。关于实现这一点的任何想法?

【问题讨论】:

    标签: ios swift airprint uiprintinteractioncntrler uiprintpagerenderer


    【解决方案1】:

    如果您想使用UIPrintPageRenderer 的自定义子类,还有一个numberOfPages 方法可以覆盖以计算页数。但是,我相信您可能只是忘记将UIPrintInteractionController 属性showsPageRange 设置为YES

    我通过将我的 html 写入 PDF (NSData) 并将 printingItem 属性设置为该项目来解决此问题。我的代码在 Objective-c 中,但同样的原则也适用。

    printingItem documentation

    Generating PDF content

    【讨论】:

    • numberOfPages 属性是只读的:“无法赋值:函数调用返回不可变值”。是否将 showPageRange 设置为 true,但没有任何变化,输出相同。
    • PDF 是个好主意。 UIPrintPageRenderer 的 drawPageAtIndex 方法成功地创建了一个单页 PDF 文件,因此在拥有该 1 页 PDF 之后一切顺利。在gist.github.com/nyg/b8cd742250826cb1471f 的帮助下创建了文件
    • @kubilay numberOfPages 也是一种计算页数的方法,但是你必须创建一个UIPrintPageRenderer 的自定义子类来覆盖它。我一直在使用自定义子类,直到我发现 PDF 的事情要容易得多。我将进行编辑以确认它仅适用于自定义子类。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-02
    • 2013-09-30
    • 1970-01-01
    相关资源
    最近更新 更多