Создание UIMARKUPTEXTPRINTFORMATTER PDF с пользовательским фоном и прозрачным HTML-контентом
я использую UIPrintPageRenderer
вместе с UIMarkupTextPrintFormatter
для печати html-страницы, которая отображается в UIWebView
. Я пытаюсь достичь следующего:
Я хочу отобразить содержимое html в виде прозрачного слоя в контексте, но цвет фона содержимого html всегда белый при визуализации с помощью UIPrintPageRenderer
в контексте, покрывающем все содержимое ниже.
стиль HTML содержит следующий фрагмент кода:
body {
background-color: transparent !important;;
-webkit-print-color-adjust: exact;
}
на UIWebView
Я вижу что фон html действительно прозрачен, потому что я устанавливаю фон UIWebView
к другому цвету.
это код, который я использую для создания данных PDF:
let printPageRenderer = UIPrintPageRenderer()
let printFormatter = UIMarkupTextPrintFormatter(markupText: htmlContent)
printPageRenderer.addPrintFormatter(printFormatter, startingAtPageAt: 0)
let data = NSMutableData()
UIGraphicsBeginPDFContextToData(data, Constants.Pdf.rect, nil)
let context = UIGraphicsGetCurrentContext()!
for i in 0..<printPageRenderer.numberOfPages {
UIGraphicsBeginPDFPage()
let backCoverView = UIView(frame: Constants.Pdf.rect)
backCoverView.backgroundColor = UIColor(patternImage: UIImage(named: "background.png")!)
backCoverView.layer.render(in: context)
context.clear(printableRect)
printPageRenderer.setValue(NSValue(cgRect: printableRect), forKey: "printableRect")
printPageRenderer.drawPage(at: i, in: UIGraphicsGetPDFContextBounds())
}
UIGraphicsEndPDFContext()
моя проблема в том, что содержимое html, которое отображается поверх " фона.png " не является прозрачным, но имеет белый фон. Прозрачный атрибут в стиле html, похоже, игнорируется UIPrintPageRenderer
. Установка background-color
в стиле html, например blue
изменение отрисованный цвет фона html от белого до синего. Я также попытался сделать визуализированный html прозрачным, сделав контекст прозрачным с помощью context.clear(printableRect)
безрезультатно.
как я могу сделать UIPrintPageRenderer
печать содержимого html с прозрачным фоном, чтобы уже отображаемый фон в контексте не покрывался белым фоном html?
2 ответов
это не гарантия, но, как упоминала Ивонна, возможно, что ваш PDF-рендерер просто не поддерживает transparent
как цветовое значение.
Возможное Решение A
попробуйте создать 1px на 1px PNG-изображение с одним 100% прозрачным пикселем, затем установите его в качестве повторяющегося фонового изображения на вашем элементе.
Возможное Решение B
возможно, что сам элемент HTML Белый, когда эта библиотека отображает его. Вы можете применить CSS к html
тег так же, как вы сделали с body
.
Возможное Решение C
Если я правильно понимаю ваш случай, вы пытаетесь наложить визуализированный PDF, который находится внутри UIWebView поверх другого содержимого в приложении. Я не могу говорить о том, действительно ли PDF может поддерживать прозрачность. UIWebView может иметь свои собственные свойства (не говоря уже о том, что может быть просмотрщик PDF с фоном по умолчанию белого цвета в игре). Если у вас есть контроль над стилями UIWebView, возьмите посмотрите на это: как сделать прозрачный UIWebView
Возможное Решение D
возможно, было бы лучше использовать холст (HTML или Switft) для рендеринга изображения вместо PDF. Если это работает для вашего случая, это может быть гораздо лучшим вариантом в долгосрочной перспективе.
решил проблему, переключившись на другой UIPrintFormatter
. Переключено с UIMarkupTextPrintFormatter
to UIViewPrintFormatter
который почтил прозрачность.