Удалять пробелы при сохранении pdf - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь экспортировать PDF-файл, созданный с использованием html. PDF-файл отображается с использованием WKWebView. Я могу сохранить свой PDF-файл, используя UIActivityViewController, однако у меня возникли проблемы с удалением пробелов вокруг него. Можно ли экспортировать только контент, который находится в синей области?

func exportAsPdfFromWebView() -> String {
        let pdfData = createPdfFile(printFormatter: self.webView.viewPrintFormatter())
        return self.saveWebViewPdf(data: pdfData)
    }

    func createPdfFile(printFormatter: UIViewPrintFormatter) -> NSMutableData {
        let originalBounds = self.webView.bounds
        self.webView.bounds = CGRect(x: originalBounds.origin.x,
                             y: webView.bounds.origin.y,
                             width: self.webView.bounds.size.width,
                             height: self.webView.scrollView.contentSize.height)
        let pdfPageFrame = CGRect(x: 0, y: 0, width: self.webView.bounds.size.width,
                                  height: self.webView.scrollView.contentSize.height)
        let printPageRenderer = UIPrintPageRenderer()
        printPageRenderer.addPrintFormatter(printFormatter, startingAtPageAt: 0)
        printPageRenderer.setValue(NSValue(cgRect: UIScreen.main.bounds), forKey: "paperRect")
        printPageRenderer.setValue(NSValue(cgRect: pdfPageFrame), forKey: "printableRect")
        self.webView.bounds = originalBounds
        return printPageRenderer.generatePdfData()
    }

    func saveWebViewPdf(data: NSMutableData) -> String {

        let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
        let docDirectoryPath = paths[0]
        let pdfPath = docDirectoryPath.appendingPathComponent("export.pdf")
        if data.write(to: pdfPath, atomically: true) {
            return pdfPath.path
        } else {
            return ""
        }
    }
}


extension UIPrintPageRenderer {

    func generatePdfData() -> NSMutableData {
        let pdfData = NSMutableData()
        UIGraphicsBeginPDFContextToData(pdfData, self.paperRect, nil)
        self.prepare(forDrawingPages: NSMakeRange(0, self.numberOfPages))
        let printRect = UIGraphicsGetPDFContextBounds()
        for pdfPage in 0..<self.numberOfPages {
            UIGraphicsBeginPDFPage()
            self.drawPage(at: pdfPage, in: printRect)
        }
        UIGraphicsEndPDFContext();
        return pdfData
    }
}

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...