【问题标题】:Is it possible to draw a pdf vector image inside a larger pdf page?是否可以在较大的 pdf 页面内绘制 pdf 矢量图像?
【发布时间】:2016-03-03 21:29:27
【问题描述】:

我有一个 pdf 矢量文件,我想将它显示为 pdf 文档的一部分。我真的不想将其更改为 UIImage 文件。我只是觉得这样做会降低质量。我试图做的是获取 pdf 的 url 并将其添加到主要的 pdf 文档中。我已经计算出我的 pdf 向量的大小并创建了一个 CGRect,如下所示:

func drawPDFfromURL(url: NSURL) {
    guard let document = CGPDFDocumentCreateWithURL(url) else { return nil }
    guard let page = CGPDFDocumentGetPage(document, 1) else { return nil }

    let pageRect = CGPDFPageGetBoxRect(page, .MediaBox)

    let size = pageRect.size

    pdfImagePageRect = CGRectMake(0, 0, size.width, size.height)

    print("The size of the pdf is \(size)")

}

然后我想只使用以下内容,但意识到我不能,因为 UIImage 目前不支持 pdf 矢量图像

 let image:UIImage = UIImage(contentsOfFile: fileName2)!

    image.drawInRect(pdfImagePageRect)

我只是觉得必须有一种方法可以将pdf矢量图像插入pdf文档。有什么建议吗?

【问题讨论】:

    标签: ios swift pdf core-graphics


    【解决方案1】:

    虽然 UIImage 不支持 PDF 文件,但 Apple 确实提供了一种将 PDF 绘制到图形上下文中的方法(无论它是什么):

    func CGContextDrawPDFPage(_ c: CGContext?, _ page: CGPDFPage?)
    

    这将允许您获取正在编写的 PDF 的图形上下文、打开第二个 PDF 文件、获取对页面的引用并将页面呈现到您的 PDF 上下文中。

    唯一困难的部分是您需要设置正确的转换矩阵,以便您正在渲染的 PDF 文件被绘制在正确的位置并具有您想要的缩放比例。

    还请查看此页面:https://www.cocoanetics.com/2010/06/rendering-pdf-is-easier-than-you-thought/,其中显示了如何绘制传入 PDF 文件的正确部分。该链接的基本代码是:

    // url is a file URL
    CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL((CFURLRef)url);
    CGPDFPageRef page1 = CGPDFDocumentGetPage(pdf, 1);
    
    // get the rectangle of the cropped inside
    CGRect mediaRect = CGPDFPageGetBoxRect(page1, kCGPDFCropBox);
    CGContextScaleCTM(ctx, rect.size.width / mediaRect.size.width,
        rect.size.height / mediaRect.size.height);
    CGContextTranslateCTM(ctx, -mediaRect.origin.x, -mediaRect.origin.y);
    
    // draw it
    CGContextDrawPDFPage(ctx, page1);
    

    【讨论】:

      猜你喜欢
      • 2015-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 2014-03-11
      • 1970-01-01
      相关资源
      最近更新 更多