【问题标题】:iOS PDF Generation: How Do I Draw an MkMapView in PDF?iOS PDF 生成:如何在 PDF 中绘制 MkMapView?
【发布时间】:2012-04-22 18:15:42
【问题描述】:

我正在寻找这方面的示例,但在任何地方都找不到。

这很简单。我有一个带有一堆注释的 MkMapView。我可以很容易地打印出来。

也就是说,我还想从中生成一个 PDF 文档。内容会与打印的不同,所以我会以自定义的方式绘制它。

然而,关于如何做这件事的例子似乎很少。我可以在我的视图中绘制几乎所有其他内容,但 MapKit 似乎遵循不同的规则。

我希望答案很简单,但缺乏示例让我怀疑这是否可能。

【问题讨论】:

标签: ios pdf uikit drawing mapkit


【解决方案1】:

使用以下代码创建图像:

let render = UIGraphicsImageRenderer(size: self.mapView.bounds.size)
let image = render.image { _ in
  self.mapView.drawHierarchy(in: self.mapView.bounds, afterScreenUpdates: true)
}

然后你可以把这张图片变成PDF:

    let imageView = UIImageView(image: image)

    let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
    let outputFileURL = documentDirectory.appendingPathComponent("mapView.pdf")

    print("URL:", outputFileURL) // When running on simulator, use the given path to retrieve the PDF file

    let pdfRenderer = UIGraphicsPDFRenderer(bounds: mapView.bounds)

    do {
        try pdfRenderer.writePDF(to: outputFileURL, withActions: { context in
            context.beginPage()
            imageView.layer.render(in: context.cgContext)
        })
    } catch {
        print("Could not create PDF file: \(error)")
    }

【讨论】:

    【解决方案2】:

    我尚未对其进行测试,但这就是我以编程方式截取视图的屏幕截图的方式...然后我将这些图像添加到 PDF:

    UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, 0.0);
    
    [self drawRect:self.frame];
    
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    
    UIGraphicsEndImageContext();
    

    您可以将self 替换为您正在处理的任何视图。同样,我还没有对此进行测试,但基本思想是创建一个新的图形上下文,然后告诉目标视图自己绘制,然后将所有图形上下文信息捕获到 UIImage 中。

    【讨论】:

    • 酷。当我有机会时(可能几天后),我会试试这个(并询问 Apple 是否允许我 PDF 地图)。
    • 这不适用于 MKMapView。它只是没有在图像中绘制任何内容。
    猜你喜欢
    • 2013-01-04
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    • 2013-06-10
    • 2016-01-02
    • 2013-11-29
    相关资源
    最近更新 更多