是否可以使用iOS图表(Daniel Gindi)在iOS上生成pdf文档中的图形
我正在使用(Daniel Gindi)在iOS应用程序中生成图形,我希望能够生成一份PDF报告,其中包含在报告正文中的图形。谁能解释一下怎么做。理想情况下,我不想从应用程序中显示的UIView生成图像,因为大小/分辨率不适合PDF文档 据我所知,有几种选择:是否可以使用iOS图表(Daniel Gindi)在iOS上生成pdf文档中的图形,pdf,ios-charts,Pdf,Ios Charts,我正在使用(Daniel Gindi)在iOS应用程序中生成图形,我希望能够生成一份PDF报告,其中包含在报告正文中的图形。谁能解释一下怎么做。理想情况下,我不想从应用程序中显示的UIView生成图像,因为大小/分辨率不适合PDF文档 据我所知,有几种选择: 使用pdf文档的图形上下文绘制图形-不清楚在使用图表库时是否可以这样做 以某种方式使用UIView生成图形并从中生成PDF图像数据,将此图像嵌入到PDF报告中 似乎选项1可能是获得最佳分辨率/控制的首选方法-有些推测性-这样做意味着您应该
好的,这就是我所做的 选项1:使用UIView.layer在PDF CGContect上渲染
func drawLineGraph(x: CGFloat, y: CGFloat)->CGRect{
let width = (pageSize.width - 2*kBorderInset - 2*kMarginInset)/2.0 - 50.0
let renderingRect = CGRect(x: x, y: y + 50.0, width: width, height: 150.0)
// Create a view for the Graph
let graphController = LineChartController(rect: renderingRect, building: self.building)
if let currentContext = UIGraphicsGetCurrentContext() {
let frame = graphController.chartView.frame
currentContext.saveGState()
currentContext.translateBy(x:frame.origin.x, y:frame.origin.y);
graphController.chartView.layer.render(in: currentContext)
currentContext.restoreGState()
}
return renderingRect
}
graphController
只是一个对象,它的功能与通常包含图形的父对象ViewController
基本相同。设置图形参数和数据
完成后,将调用下面的函数在PDF页面上下文中呈现
需要一点翻译才能将图表置于正确的位置
选项2:在PDF页面CGContect上绘图
func drawLineGraph(x: CGFloat, y: CGFloat)->CGRect{
let width = (pageSize.width - 2*kBorderInset - 2*kMarginInset)/2.0 - 50.0
let renderingRect = CGRect(x: x, y: y + 50.0, width: width, height: 150.0)
// Create a view for the Graph
let graphController = LineChartController(rect: renderingRect, building: self.building)
if let currentContext = UIGraphicsGetCurrentContext() {
let frame = graphController.chartView.frame
currentContext.saveGState()
currentContext.translateBy(x:frame.origin.x, y:frame.origin.y);
graphController.chartView.layer.render(in: currentContext)
currentContext.restoreGState()
}
return renderingRect
}
而解决办法是…嗒嗒
func drawBarGraph(x: CGFloat, y: CGFloat)->CGRect{
let width = (pageSize.width - 2*kBorderInset - 2*kMarginInset)/2.0 - 50.0
let renderingRect = CGRect(x: x + width + 50, y: y + 50.0, width: width, height: 150.0)
// Create a view for the Graph
let graphController = BarChartController(rect: renderingRect, building: self.building)
if let currentContext = UIGraphicsGetCurrentContext() {
let frame = graphController.chartView.frame
currentContext.saveGState()
currentContext.translateBy(x:frame.origin.x, y:frame.origin.y)
//graphController.chartView.layer.render(in: currentContext)
graphController.chartView.draw(frame)
currentContext.restoreGState()
}
return renderingRect
}
由于当前上下文设置为PDF页面的上下文,因此只需调用chartsdraw()
函数直接传递框架矩形即可
我错过了什么,能这么容易吗
您可以找到。的副本,但它将如何绑定数据?你确定它会生成带有图表数据的pdf吗?如果我知道如何将pdf附加到我的答案,我会附加输出。我将附加一个png与放大视图,这样你可以看到自己。graphController提供数据源。为了完整性,我也会发布控制器类。@CodeChanger-我已经用生成的PDF文件的链接更新了我的答案-你可以自己查看。我将在某个时候发布更多的代码。