我有一个pdf矢量文件,我希望将其显示为pdf文档的一部分。我真的不想将其更改为UIImage文件。我只是觉得这样做会降低质量。我试图做的是获取pdf的url并将其添加到主pdf文档中。我已经计算出我的pdf向量的大小并创建了一个CGRect,如下所示:
class
然后我想到只使用以下但是意识到我不能因为UIImage目前不支持pdf矢量图像
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)")
}
我只是觉得必须有一种方法将pdf矢量图像插入到pdf文档中。有什么建议吗?
答案 0 :(得分:2)
虽然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);