【发布时间】:2018-09-10 20:24:01
【问题描述】:
我想在 PDFKit 的 PDFDocument 和 Core Graphics 的 CGPDFContext 之间移动数据,但我不知道该怎么做。我正在使用 python,但欢迎任何显示要使用的方法和对象的代码。
使用 CGPDFDocument 会很容易,但我需要使用 PDFDocument 是有原因的。你会认为他们会被免费桥接。
-
从 PDFDocument 创建上下文。
pdfDoc = PDFDocument.alloc().initWithURL_(pdfURL) pdfData = pdfDoc.dataRepresentation() CGPDFContextCreate(pdfData, None, metaDict)
但我得到:'deflateEnd: error -3: (null).'
-
我可以使用 drawWithBox ToContext 将 PDFPage 添加到 CGPDFContext,但这只是 10.12 及更高版本。我试过这个:
page = pdfDoc.pageAtIndex_(0) writeContext = CGPDFContextCreateWithURL(myURL, None, dictarray) CGContextBeginPage(writeContext, mbox) CGContextDrawPDFPage(writeContext, page.pageRef)
这给了我一个分段错误。 (通过注释掉 drawPDF 行,或将 page 替换为 CGPDFPage 对象而不是 PDFPage 来解决此问题。
- 使用来自 CGPDFContext 的数据初始化 PDFDocument 对象。
我可能不得不以某种方式使用 CGDataProviders 和 Consumers,但没有任何线索。
【问题讨论】:
-
您知道您可以使用
documentRef实例属性从PDFDocument获取CGPDFDocumentRef。见这里:developer.apple.com/documentation/pdfkit/pdfdocument/… -
@silicontrip 哦,谢谢。我会试一试的。如果我能记得我在做什么......!
-
您的第一段代码不起作用,因为
CGPDFContextCreate需要CGDataConsumerRef而不是NSData。它正在寻找写入数据的地方,而不是寻找要初始化的数据。
标签: python macos quartz cgpdfcontext