SWIFT PDFKIT断字不适用于对齐文本

问题描述

对连字符的连字符在UITextView中可用,但在使用PDFKit的PDF(PDFView)上绘制的文本中似乎不起作用。

PDFView on the left,UITextView on the right

将在PDFView上绘制的相同属性字符串分配给UITextView属性字符串值。有什么建议吗?

仅当文本对齐时才会发生。使用其他文本对齐方式也可以在PDFView上正确显示断字。

以下是在pdfData的{​​{1}}方法中在PDFView上绘制的代码

UIGraphicsPDFRenderer

我只是将相同的属性字符串分配给文本视图:

let paragraphStyleArticle = NSMutableParagraphStyle()
            paragraphStyleArticle.hyphenationFactor = 1.0
            paragraphStyleArticle.lineBreakMode = .byWordWrapping
            paragraphStyleArticle.alignment = .justified

            let attributesArticle = [
                NSAttributedString.Key.font: UIFont.systemFont(ofSize: 13),NSAttributedString.Key.paragraphStyle: paragraphStyleArticle
            ]
            let article = "Lorem ipsum dolor sit amet,consectetur adipiscing elit. Aenean id nulla in nisl egestas blandit vitae viverra velit. Vestibulum est diam,vestibulum vel tristique interdum,consequat vitae ex. Morbi cursus nulla ut dignissim vestibulum. Sed placerat eget mauris quis interdum. Fusce consequat orci a hendrerit auctor. Etiam vulputate tincidunt magna vel pellentesque. Donec sit amet lacinia est,vel soDales velit. Phasellus pharetra dolor nec blandit venenatis. Donec vel commodo odio. Integer iaculis lectus sit amet ex ultrices cursus. Pellentesque quis orci vel purus porttitor pretium sit amet vitae urna. Interdum et malesuada fames ac ante ipsum primis in faucibus.\n\nLorem ipsum dolor sit amet,vel soDales velit. Phasellus pharetra dolor nec blandit venenatis. Donec vel commodo odio. Integer iaculis lectus sit amet ex ultrices cursus. Pellentesque quis orci vel purus porttitor pretium sit amet vitae urna. Interdum et malesuada fames ac ante ipsum primis in faucibus."
            let attributedPDFArticle = NSAttributedString(string: article,attributes: attributesArticle)
            let textSizeArticle = attributedPDFArticle.boundingRect(with: CGSize(width: pdfView.bounds.width - 10,height: CGFloat.greatestFiniteMagnitude),options: .usesLineFragmentOrigin,context: nil)
            let textRectArticle = CGRect(x: pdfView.bounds.width / 2 - textSizeArticle.width / 2,y: 40,width: textSizeArticle.width,height: textSizeArticle.height)
            
            article.draw(in: textRectArticle,withAttributes: attributesArticle)

解决方法

看起来像。合理 hyphenationFactor 不起作用。因为您的目的是使文本对齐方式与hyphenationFactor对齐,所以它适用于UITextView。另一种解决方案是使用UITextView并将其转换为PDFData。您不需要 article.draw 。这是示例:

let textView = UITextView(frame: textRectArticle)
textView.attributedText = attributedPDFArticle
textView.layer.render(in: context.cgContext)
// Remove this code
// article.draw(in: textRectArticle,withAttributes: attributesArticle)

这是输出。

enter image description here