【问题标题】:Print PDF in A5 size in landscape以 A5 尺寸横向打印 PDF
【发布时间】:2016-03-03 07:48:37
【问题描述】:

我目前正在尝试通过 AirPrint 从我的 iPad 打印 PDF。当我直接打印 A4 尺寸和纵向的 PDF 时,一切正常。

但是,现在我希望打印的 PDF 为 A5 大小并且是纵向的,就像我现在无法制作的 A4 纸大小的一半。任何人都对此有所了解,要么我应该调整 PDF 文件的大小(不是最好的),要么有其他方法可以做到这一点

我使用UIPrintInteractionController,它是打印的委托,而源来自加载PDF的webView的viewPrintFormatter

页面渲染器:

    let fmt = webView.viewPrintFormatter()

    // 2. Assign print formatter to UIPrintPageRenderer

    let render = UIPrintPageRenderer()
    render.addPrintFormatter(fmt, startingAtPageAtIndex: 0)

    // 3. Assign paperRect and printableRect

    let page = CGRect(x: 0, y: 0, width:595.2, height: 841.8) // A4, 72 dpi
    let printable = CGRectInset(page, 0, 0)

    render.setValue(NSValue(CGRect: page), forKey: "paperRect")
    render.setValue(NSValue(CGRect: printable), forKey: "printableRect")

    // 4. Create PDF context and draw

    let pdfData = NSMutableData()
    UIGraphicsBeginPDFContextToData(pdfData, CGRectZero, nil)

    for i in 1...render.numberOfPages() {

        UIGraphicsBeginPDFPage();
        let bounds = UIGraphicsGetPDFContextBounds()
        render.drawPageAtIndex(i - 1, inRect: bounds)
    }

    UIGraphicsEndPDFContext();

然后将其保存为物理文件:

    let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]

    let url = NSURL(fileURLWithPath: "\(documentsPath)/file.pdf")
    pdfData.writeToFile("\(documentsPath)/file.pdf", atomically: true)

最后打印出来:

        if UIPrintInteractionController.canPrintURL(url) {
            let printInfo = UIPrintInfo(dictionary: nil)
            printInfo.jobName = url.lastPathComponent!
            printInfo.outputType = .Grayscale
            printInfo.orientation = .Landscape

            let printController = UIPrintInteractionController.sharedPrintController()
            printController.printInfo = printInfo
            printController.showsPaperSelectionForLoadedPapers = true

            printController.showsNumberOfCopies = true
            printController.delegate = self
            printController.printingItem = url

            printController.presentAnimated(true, completionHandler: nil)
        }

【问题讨论】:

  • 如果你能向我们展示一些代码,以便我们了解你是如何做到这一点的,你可能会得到有用的 cmets。但总的来说,我认为 UIPrintPageRenderer 可以解决问题,因为您可以定义内容的输出方式(这意味着您可以在将传入的 PDF 文件放在打印页面上时对其进行缩放)。
  • @DavidvanDriessche 我已经添加了代码。对于页面渲染器,即使我将其设置为 A5 尺寸,它仍然会在较小尺寸的 A4 纸上垂直打印。但我希望它在 A5 或 A4 水平页面的一半。
  • 或者您对设置有什么建议吗?因为我将它设置为 A4 大小,所以当它保​​存为 PDF 时看起来更好。

标签: ios swift pdf uiprintinteractioncntrler


【解决方案1】:

您可以通过设置图形上下文调用的第二个参数来更改 PDF 的“纸张大小”。

UIGraphicsBeginPDFContextToData(data, CGRect(x: 0, y: 0, width: 792, height: 612), nil)

界限

指定 PDF 页面默认大小和位置的矩形。 (此值用作每个新页面的默认媒体框。)矩形的原点通常应为 (0, 0)。指定一个空矩形 (CGRectZero) 会将默认页面大小设置为 8.5 x 11 英寸(612 x 792 磅)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    相关资源
    最近更新 更多