2016-03-03 237 views
0

我目前正在嘗試通過AirPrint從iPad打印PDF。當我直接打印PDF時,我用A4尺寸和肖像直接打印了PDF。橫向打印A5尺寸的PDF

但是,現在我希望將PDF打印爲A5尺寸並且是縱向的,就像我現在無法制作的A4紙的一半大小一樣。任何人都有這個想法,或者我應該調整PDF文件(不是首選)或有其他方式來做到這一點

即時通訊使用UIPrintInteractionController和它的代表打印,而源是從viewPrintFormatter來自webView加載PDF。

PageRenderer:

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) 
     } 
+0

如果您向我們展示一些代碼,以便我們可以看到您是如何做到這一點的,那麼您可能會收到有用的評論。但是總的來說,我認爲UIPrintPageRenderer會執行這個技巧,因爲您可以定義如何輸出內容(這意味着您可以在將您的傳入PDF文件放在打印頁面上時對其進行縮放)。 –

+0

@DavidvanDriessche我已經添加了代碼。對於頁面渲染器,即使將其設置爲A5尺寸,仍然會以較小尺寸的A4紙垂直打印。但我希望它在A5或A4的一半水平。 – Lee

+0

或者你有任何關於設置的建議?因爲即時將它設置爲A4尺寸,所以當它保​​存爲PDF時,它看起來更好。 – Lee

回答

3

您可以更改PDF的 「紙張大小」通過設置圖形上下文調用的第二個參數。

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

指定PDF頁面的默認大小和位置的矩形。 (此值用作每個新頁面的默認媒體框。)矩形的原點通常應爲(0,0)。指定空矩形(CGRectZero)將默認頁面大小設置爲8.5×11英寸(612×792點)。