Как распечатать uiwebview, который имеет заголовок и uitableview с несколькими данными - PullRequest
2 голосов
/ 22 апреля 2019

Я создаю webview для печати данных.Согласно моему требованию, половина страницы содержит заголовки заголовков, а остальные начинаются с uitableview, в котором содержится содержимое таблицы.

Если содержимое tableview больше, мне нужно продолжить это содержимое на следующей странице.

func createPDF(_ currentWebView: UIWebView)
{        
    let date = Date()
    let calendar = Calendar.current
    let dateComponents: DateComponents = (calendar as NSCalendar).components([.month, .day, .year], from: date)
    let dateFormatter = DateFormatter()
    dateFormatter.dateStyle = DateFormatter.Style.medium
    let dateFormatter1 = DateFormatter()
    dateFormatter1.dateFormat = "MM/dd/yy"
    let strOrderDate = NSString(format: "Date: " + dateFormatter1.string(from: date) as NSString)
    let ID = UserDefaults.standard.value(forKey: "ID") as! String

    lblValue.text = ""
    lblValue.text = "Value: " + ID
    lblTotalItems.text = "Total items: " + (totalNumberofItems as String)

    lblDate.text = strOrderDate as String
    tblContainer.tableFooterView = UIView()
    tblContainer.reloadData()

    for eachView: UIView in self.view.subviews
    {
        if(eachView.isKind(of: UILabel.self) || eachView.isKind(of: UIView.self) )
        {
            if(eachView != self.view && eachView != currentWebView)
            {
                currentWebView.addSubview(eachView)
            }
        }
    }

   let heightStr: NSString = currentWebView.stringByEvaluatingJavaScript(from: "document.body.scrollHeight")! as NSString
   let height : Int = heightStr.integerValue
   let screenHeight: CGFloat = currentWebView.bounds.size.height;
   let pages = Int(ceil(screenHeight/CGFloat(height)))

    let frame: CGRect = currentWebView.frame
    var currentContext: CGContext = UIGraphicsGetCurrentContext()!

    for i: Int in 0..<pages
    {
        if (Int(CGFloat(i+1) * screenHeight) > height)
        {
            var f: CGRect = currentWebView.frame
            f.size.height = f.size.height - CGFloat((CGFloat(i + 1) * screenHeight) - CGFloat(height));
            currentWebView.frame = f
        }
        UIGraphicsBeginPDFPage();
        currentContext = UIGraphicsGetCurrentContext()!
        currentWebView.scrollView.setContentOffset(CGPoint(x: 0, y: screenHeight * CGFloat(i)) , animated: false)
        currentWebView.layer.render(in: currentContext)
    }
    currentWebView.frame = frame
}

Моя проблема: если содержимое табличного представления больше и прокручиваемо, я хочу отобразить это содержимое также на второй странице, но этого не происходит.

Обрезка табличного представления на той же странице.

Любое тело имеет представление об этом .. Пожалуйста, помогите!

Спасибо

1 Ответ

0 голосов
/ 30 апреля 2019

Я надеюсь, что вы не можете найти количество страниц для генерации.Пожалуйста, попробуйте следующий код для расчета страницы.

   let heightStr: NSString = currentWebView.stringByEvaluatingJavaScript(from:       "document.body.scrollHeight")! as NSString
   let height : Int = heightStr.integerValue
   let screenHeight: CGFloat = currentWebView.bounds.size.height
// ******** Change is here. *******
   let pages = Int(ceil(CGFloat(height)/screenHeight))

Надеюсь, это сработает.Удачного кодирования:)

...