我在Swift 3.0中根据html内容创建了pdf文件:
/**
*
*/
func exportHtmlContentToPDF(HTMLContent: String, filePath: String) {
// let webView = UIWebView(frame: CGRect(x: 0, y: 0, width: 694, height: 603));
// webView.loadHTMLString(HTMLContent, baseURL: nil);
let pdfPrinter = PDFPrinter();
let printFormatter = UIMarkupTextPrintFormatter(markupText: HTMLContent);
// let printFormatter = webView.viewPrintFormatter();
pdfPrinter.addPrintFormatter(printFormatter, startingAtPageAt: 0);
let pdfData = self.drawPDFUsingPrintPageRenderer(printPageRenderer: pdfPrinter);
pdfData?.write(toFile: filePath, atomically: true);
}
/**
*
*/
func drawPDFUsingPrintPageRenderer(printPageRenderer: UIPrintPageRenderer) -> NSData! {
let data = NSMutableData();
UIGraphicsBeginPDFContextToData(data, CGRect.zero, nil);
printPageRenderer.prepare(forDrawingPages: NSMakeRange(0, printPageRenderer.numberOfPages));
let bounds = UIGraphicsGetPDFContextBounds();
for i in 0...(printPageRenderer.numberOfPages - 1) {
UIGraphicsBeginPDFPage();
printPageRenderer.drawPage(at: i, in: bounds);
}
UIGraphicsEndPDFContext();
return data;
}
除了我的base64编码图像外,其他所有内容都可以正常渲染。在Web视图中或在Safari或chrome浏览器中的HTML内容本身可以正确显示,并且可以正确显示所有图像。但是图像永远不会渲染到pdf中。
为什么不渲染图像?如何使它们渲染?
我找到了解决方案!
导出到PDF会在渲染过程完成之前进行。如果您放入很小的图片,它将显示在PDF中。如果图片太大,则渲染过程会花费太多时间,但是PDF导出不会等待渲染完成。
因此,我要做的就是以下几点:
在导出为PDF之前,我先在WebView中显示HTML的结果。WebView可以正确呈现所有内容,现在当我按导出到PDF时,PDF可以正确显示其中的所有图像。
因此,我认为这是一个巨大的滞后,无法告诉PDF导出器等待渲染过程完成。
问题内容: 我的Node.js服务器的外观如下所示: 这是一个包含PNG图像的Base64表示形式的字符串。有什么方法可以将其发送给客户端,该客户端访问编码并显示为图像的路由(例如,可以在标记中使用URL )? 问题答案: 是的,您可以对base64字符串进行编码,然后将其作为图像返回给客户端:
问题内容: 我正在开发游戏,但扫描仪遇到了一个小问题。我收到了一个从未关闭过的资源泄漏扫描程序。 但是我认为我的扫描仪在没有关闭之前就可以正常工作。但是现在不是。有人可以帮我吗? 问题答案: 我假设您正在使用Java 7,因此会收到编译器警告,当您不关闭资源时,通常应在finally块中关闭扫描程序。 甚至更好:使用新的 Try with resource语句 :
问题内容: 看过很多论坛,但没有找到答案…简单的东西,用@PostLoad注释的方法永远不会被调用…通过@EntityListeners添加了侦听器,但问题仍然存在。我正在使用基于SessionFactory的配置。 问题答案: 当使用基于基础的配置时,EJB3 注释不起作用,后期加载方法将永远不会被调用。 使用Hibernate的Interceptor或事件或基于基本的配置。
问题内容: 我正在使用Flask-WTF: 这是我的表格: 这是控制器: 现在的问题是,如果您查看我的打印语句,它将始终打印已提交的内容,但从不打印有效的内容,并且永远不会执行validate_on_submit()。为什么? 问题答案: 您没有在HTML表单中插入CSRF字段。 添加到模板(docs)后,表单将按预期验证。 验证表单后添加,以查看出现的错误。 在验证之前将为空。在这种情况下,会出
1)我的plist配置提供背景模式: 2) 在中,我有: 3) 我在委托中声明了协议。 4)我实现了以下方法,但它永远不会被触发。(只有当我用“XCode-”模拟获取时才有效 为什么?这是DP5测试错误吗?我应该雷达这个吗?
我已经开始维护一个遗留的JSF应用程序。它使用myFaces 1.1。x和战斧1.1.6。我需要打印tag作为元素的第一个元素,否则IE会忽略它。 它将产生 如何强制元标记成为第一个元素?我尝试了纯HTML HEAD元素,但它也不起作用。 我需要 更新: 其中一些Java脚本和样式是由于以下标记而呈现的: 剩下的javascript来自 问题是我是否可以强制执行我给t:documentHead的内