2016-03-03 1 views
0

J'essaie actuellement d'imprimer un PDF à partir de mon iPad via AirPrint. Je l'ai bien quand j'imprime le PDF directement, en format A4 et portrait. Cependant, maintenant je veux que le PDF imprimé soit au format A5 et soit en format portrait, comme la moitié de la taille du papier A4, ce que je ne peux pas faire maintenant. Quelqu'un at-il idée à ce sujet, que ce soit je devrais redimensionne le fichier PDF (pas préférable) ou il y a un autre moyen de faire queImprimer PDF au format A5 dans le paysage

Im en utilisant UIPrintInteractionController et délégué de à imprimer, tandis que la source est de viewPrintFormatter de webView qui chargent les 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(); 

Enregistrez ensuite comme fichier physique:

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

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

Et enfin imprimer:

 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

Si vous souhaitez nous montrer du code afin que nous puissions voir comment vous faites cela, vous pourriez obtenir des commentaires utiles à ce sujet. Mais en général je pense que UIPrintPageRenderer ferait l'affaire car vous pouvez définir comment le contenu serait sorti (ce qui signifierait que vous pouvez mettre à l'échelle votre fichier PDF entrant pendant que vous le placez sur la page imprimée). –

+0

@DavidvanDriessche J'avais ajouté le code. Et pour le rendu de page, même si je le mets au format A5, il l'imprime toujours verticalement dans du papier A4 de plus petite taille. Mais je veux que ce soit dans A5 ou la moitié de la page de A4 horizontalement. – Lee

+0

Ou avez-vous des suggestions sur le réglage? parce que je le mets en format A4 alors quand il enregistre au format PDF, il semble plus agréable. – Lee

Répondre

3

Vous pouvez changer le "format papier" du PDF en définissant le second paramètre de l'appel de contexte graphique.

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

limites

Un rectangle qui spécifie la taille par défaut et l'emplacement des pages PDF. (Cette valeur est utilisée comme boîte de média par défaut pour chaque nouvelle page.) L'origine du rectangle doit généralement être (0, 0). La spécification d'un rectangle vide (CGRectZero) définit la taille de page par défaut à 8,5 par 11 pouces (612 par 792 points).