Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以使用iOS图表(Daniel Gindi)在iOS上生成pdf文档中的图形_Pdf_Ios Charts - Fatal编程技术网

是否可以使用iOS图表(Daniel Gindi)在iOS上生成pdf文档中的图形

是否可以使用iOS图表(Daniel Gindi)在iOS上生成pdf文档中的图形,pdf,ios-charts,Pdf,Ios Charts,我正在使用(Daniel Gindi)在iOS应用程序中生成图形,我希望能够生成一份PDF报告,其中包含在报告正文中的图形。谁能解释一下怎么做。理想情况下,我不想从应用程序中显示的UIView生成图像,因为大小/分辨率不适合PDF文档 据我所知,有几种选择: 使用pdf文档的图形上下文绘制图形-不清楚在使用图表库时是否可以这样做 以某种方式使用UIView生成图形并从中生成PDF图像数据,将此图像嵌入到PDF报告中 似乎选项1可能是获得最佳分辨率/控制的首选方法-有些推测性-这样做意味着您应该

我正在使用(Daniel Gindi)在iOS应用程序中生成图形,我希望能够生成一份PDF报告,其中包含在报告正文中的图形。谁能解释一下怎么做。理想情况下,我不想从应用程序中显示的UIView生成图像,因为大小/分辨率不适合PDF文档

据我所知,有几种选择:

  • 使用pdf文档的图形上下文绘制图形-不清楚在使用图表库时是否可以这样做
  • 以某种方式使用UIView生成图形并从中生成PDF图像数据,将此图像嵌入到PDF报告中
  • 似乎选项1可能是获得最佳分辨率/控制的首选方法-有些推测性-这样做意味着您应该能够指定准确的位置和大小,并获得正确的字体大小、线条粗细等

    使用选项2意味着您必须计算UIView和PDF页面视图之间的缩放比例,我不确定它们如何相互映射

    任何人都可以就以下方面提供建议:

  • 是否可以使用图表在PDF文档中生成图形,如果可以,如何生成
  • 如果没有,还有什么其他选项,没有编写自定义图形代码

  • 好的,这就是我所做的

    选项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页面的上下文,因此只需调用charts
    draw()
    函数直接传递框架矩形即可

    我错过了什么,能这么容易吗


    您可以找到。

    的副本,但它将如何绑定数据?你确定它会生成带有图表数据的pdf吗?如果我知道如何将pdf附加到我的答案,我会附加输出。我将附加一个png与放大视图,这样你可以看到自己。graphController提供数据源。为了完整性,我也会发布控制器类。@CodeChanger-我已经用生成的PDF文件的链接更新了我的答案-你可以自己查看。我将在某个时候发布更多的代码。