2016-03-03 3 views
0

В настоящее время я пытаюсь распечатать PDF-документ с моего iPad через AirPrint. У меня все получилось, когда я печатаю PDF напрямую, в формате А4 и в портрете.Печать PDF в формате A5 в ландшафте

Тем не менее, теперь я хочу, чтобы напечатанный PDF был размером A5 и был на портрете, наполовину размером с бумагу формата А4, которую я не могу сделать сейчас. Каждый получил представление об этом, или я должен изменить размер файла PDF (не желательно) или есть другой способ сделать что

Im используя 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, он все еще печатает его по вертикали в бумаге формата А4 с меньшим размером. Но я хочу, чтобы он был на A5 или половину страницы формата А4 горизонтально. – 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 балла).