2016-11-17 4 views
3

Я создал pdf-таблицу для просмотра всех ячеек. но я создал pdf, он не отображает все данные tableview & также, когда высота страницы pdf задана в соответствии с данными ячеек. Я не знаю, как решить эту проблему. Я использую этот код для создания pdf.please, помогите мне.Создать pdf-файл для просмотра всех данных

let _: NSData! 
     do { 
      let priorBounds = table_view.bounds 
      let fittedSize = table_view.sizeThatFits(CGSizeMake(priorBounds.size.width, .infinity)) 
      table_view.bounds = CGRectMake(0, 0, fittedSize.width, fittedSize.height) 
      let pdfPageBounds = CGRectMake(0, 0, 612, 800) 
      let pdfData = NSMutableData() 
      UIGraphicsBeginPDFContextToData(pdfData, pdfPageBounds, nil) 
      do { 
       var pageOriginY = 0 
       while pageOriginY < Int(fittedSize.height) { 
        UIGraphicsBeginPDFPageWithInfo(pdfPageBounds, nil) 
        CGContextSaveGState(UIGraphicsGetCurrentContext()!) 
        do { 
         CGContextTranslateCTM(UIGraphicsGetCurrentContext()!, 0, -CGFloat(pageOriginY)) 
         table_view.layer.renderInContext(UIGraphicsGetCurrentContext()!) 
        } 
        CGContextRestoreGState(UIGraphicsGetCurrentContext()!) 
        pageOriginY += Int(pdfPageBounds.size.height) 
       } 
      } 
      UIGraphicsEndPDFContext() 
      table_view.bounds = priorBounds 
      if let documentDirectories = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first { 
       let documentsFileName = documentDirectories + "/" + (filename as String) 
       debugPrint(documentsFileName) 
       pdfData.writeToFile(documentsFileName, atomically: true) 
      } 
     } 

ответ

2

Попробуйте это.

func createPdfFromTableView() 
{ 
    let priorBounds: CGRect = self.tblView.bounds 
    let fittedSize: CGSize = self.tblView.sizeThatFits(CGSize(width: priorBounds.size.width, height: self.tblView.contentSize.height)) 
    self.tblView.bounds = CGRect(x: 0, y: 0, width: fittedSize.width, height: fittedSize.height) 
    self.tblView.reloadData() 
    let pdfPageBounds: CGRect = CGRect(x: 0, y: 0, width: fittedSize.width, height: (fittedSize.height)) 
    let pdfData: NSMutableData = NSMutableData() 
    UIGraphicsBeginPDFContextToData(pdfData, pdfPageBounds, nil) 
    UIGraphicsBeginPDFPageWithInfo(pdfPageBounds, nil) 
    self.tblView.layer.render(in: UIGraphicsGetCurrentContext()!) 
    UIGraphicsEndPDFContext() 
    let documentDirectories = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first 
    let documentsFileName = documentDirectories! + "/" + "pdfName" 
    pdfData.write(toFile: documentsFileName, atomically: true) 
    print(documentsFileName) 
} 
+0

Как вы можете поделиться созданным файлом с помощью UIactivityviewcontroller? –

0

Одно дополнения к ответу Rajeskumar по ниже следующим образом:

Если UITableView не занимает весь экрана устройства с его оригинальными часами, вы можете вставить следующую строку:

self.tblview.bounds = priorBounds 

после рендера (in :) step. В противном случае таблица будет нарисована на устройстве таким образом, чтобы он покрывал больше места, которое первоначально предназначалось.

+0

hi где добавить эту строку? –

+0

После рендера (в: шаг. – Diskprotek