Создание PDF из UIView в Swift - PullRequest
0 голосов
/ 03 апреля 2020

Я застрял / исследовал эту проблему в течение нескольких дней, метод ниже успешно создает PDF из обычного размера UIView. Тем не менее, мне нужно содержимое моего контейнера, который находится внутри UIScrollview. Высота моего containerView составляет 5000. Может кто-нибудь помочь мне визуализировать containerView на нескольких страницах PDF или направить меня к лучшему способу сделать это. `fun c exportAsPdfFromView () -> String {

    func screenShotScrollview() -> String {

    let scrollView = waiverViews.scrollView

    let pageDimensions = scrollView.bounds

    let pageSize = pageDimensions.size
    let totalSize = scrollView.contentSize

    let numberOfPagesThatFitVertivally = Int(ceil(totalSize.height/pageSize.height))

    let outputData = NSMutableData()

    UIGraphicsBeginPDFContextToData(outputData, pageDimensions, nil)

    let savedContentOffset = scrollView.contentOffset
    let savedContentInset = scrollView.contentInset

    scrollView.contentInset = UIEdgeInsets.zero

    let origin = CGRect(x: 0, y: 0, width: pageSize.width, height: pageSize.height)

    if let context = UIGraphicsGetCurrentContext() {

        for indexVertical in 0..<numberOfPagesThatFitVertivally {

            UIGraphicsBeginPDFPageWithInfo(origin, nil)

            let offsetVertical = CGFloat(indexVertical) * pageSize.height

            scrollView.contentOffset = CGPoint(x: 0, y: offsetVertical)

            context.translateBy(x: 0, y: -offsetVertical)

            scrollView.layer.render(in: context)

        }
        UIGraphicsEndPDFContext()


        scrollView.contentInset = savedContentInset
        scrollView.contentOffset = savedContentOffset
    }

    return self.saveViewPdf(data: outputData)
}

1 Ответ

0 голосов
/ 03 апреля 2020

По сути, scrollView не захочет все время визуализировать содержимое на своем слое, пока он не будет просмотрен.

Я предполагаю, что это возвращает только снимок текущего окна UIScrollView?

Чтобы сделать несколько снимков целого содержимого contentBounds UIScrollView, вы могли бы потенциально setTheContentOffset просмотра прокрутки в его общем contentBounds.height/frame.height, который будет возвращать страницы. А затем сгенерируйте PDF-файлы в l oop?

, например, что-то вроде этого, а затем в UX, скройте представление прокрутки. Пока это генерируется, покажите его, когда оно будет завершено.

for i in 0..<pages {
    scrollView.setContentOffset(.init(x: 0, y: i*scrollViewHeight))
    //PDF Generation flow
    //set the url to something like "pdf_file_\(i).pdf"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...