В настоящее время я пытаюсь распечатать 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)
}
Если вы укажете нам какой-то код, чтобы мы могли видеть, как вы это делаете, вы можете получить полезные комментарии к этому. Но в целом я бы подумал, что UIPrintPageRenderer будет делать трюк, так как вы можете определить, как будет выводиться контент (что означало бы, что вы можете масштабировать свой входящий файл PDF, пока вы размещаете его на печатной странице). –
@DavidvanDriessche Я добавил код. И для средства визуализации страниц, даже если я установил его на размер A5, он все еще печатает его по вертикали в бумаге формата А4 с меньшим размером. Но я хочу, чтобы он был на A5 или половину страницы формата А4 горизонтально. – Lee
Или у вас есть предложения по поводу настройки? потому что я устанавливаю его в формате A4, поэтому, когда он сохраняет в PDF, он выглядит лучше. – Lee