Нарисуйте NSString в PDF (водяной знак)

Этот вопрос я задавал много раз, но до сих пор не могу найти правильный ответ. Моя цель - загрузить PDF-файл (отсканированные страницы вопросника), пометить каждую страницу номером страницы и сохранить каждую в отдельных файлах JPEG для дальнейшего использования. Все работает нормально, за исключением того, что NSString не отрисовывается. Я отлично работал, когда создал NSGraphicsContext из растрового представления, но разрешение изображения было слишком низким. Итак, я пришел к выводу, что это проблема с PDF, но не мог понять, что это такое.

    let PDFAsData = try Data(contentsOf: pathname)
    let dataInPDF = NSPDFImageRep(data: PDFAsData)!
    let numberOfPages = dataInPDF.pageCount

    for i in 0..<numberOfPages {
        let pdfPage=pdfDocument.page(at: i+1)!
        let mediaBoxRect = pdfPage.getBoxRect(.mediaBox)
        let scale:CGFloat = 200.0/72.0
        let width = Int(mediaBoxRect.width * scale)
        let height = Int(mediaBoxRect.height * scale)
        let context = CGContext(data: nil, width: width, height: height, bitsPerComponent: 8, bytesPerRow: 0, space: colorSpace, bitmapInfo: bitmapInfo)!
        context.interpolationQuality = .high
        context.scaleBy(x: scale, y: scale)
        context.drawPDFPage(pdfPage)
        context.saveGState()
        do {
             let paragraphStyle = NSMutableParagraphStyle.default().mutableCopy() as! NSMutableParagraphStyle
             paragraphStyle.alignment = NSTextAlignment.left
             let textFontAttributes = [NSFontAttributeName: NSFont(name: "Arial Bold", size: 10.0)!,
             NSForegroundColorAttributeName: NSColor.black,
             NSParagraphStyleAttributeName: paragraphStyle]
             let text = "\(fileNameNSString), page: \(i+1)" as NSString
             text.draw(at: CGPoint(x:10, y:10), withAttributes: textFontAttributes)
         }
         context.flush()
         context.restoreGState()
         let image=context.makeImage()!  // Creates and returns a CGImage to be saved as JPEG
    }

Я нашел часть решения с помощью CATextLayer, но пока не могу изменить положение строки на странице ... let textLayer = CATextLayer () textLayer.string = "(fileNameNSString), page: (i + 1)" textLayer.font = "Arial Bold" как CFTypeRef? textLayer.fontSize = 10.0 textLayer.foregroundColor = CGColor.black textLayer.alignmentMode = kCAAlignmentLeft textLayer.frame = CGRect (x: 0, y: 0, ширина: 500, высота: 50) textLayer.draw (in: context) let image = context.makeImage ()!

user8889350 10.07.2018 15:38
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
167
1

Ответы 1

Вы используете PDFKit в своем проекте? Если да, загрузите образец кода Apple здесь. и замените строку:

let string: NSString = "U s e r   3 1 4 1 5 9" 

с этой строкой:

let string: NSString = NSString(format: "Page %@", "\(self.pageRef?.pageNumber ?? 0)")

Другие вопросы по теме