Objective C - 创建 PDF (Mac OSX / Cocoa)
Posted
技术标签:
【中文标题】Objective C - 创建 PDF (Mac OSX / Cocoa)【英文标题】:Objective C - Create PDF (Mac OSX / Cocoa) 【发布时间】:2019-01-21 14:09:48 【问题描述】:我正在按照本指南创建 PDF,但我不明白我必须在 myDrawnContent 函数上编写什么代码:https://developer.apple.com/library/archive/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_pdf/dq_pdf.html#//apple_ref/doc/uid/TP30001066-CH214-CJBFFHHA
使用本指南,我可以使用以下功能创建 PDF:
-(void) MyCreatePDFFile:(CGRect)pageRect 文件名:(const char *)filename;
我需要编写 -(void)myDrawContent:(CGContextRef) pdfContext;我想在顶部设置一个 Tittle,在图像之后设置一个 NSImage 和一个 NSString,我该怎么做?
Adiccionaly:为此我找到了这段代码:
NSString * path = @"/Users/admin/Downloads/prueba.pdf";
PDFDocument * pdf = [[PDFDocument alloc]init];
NSImage *image = [self getRepImage];
PDFPage * page = [[PDFPage alloc ] initWithImage:image];
[pdf insertPage:page atIndex: [pdf pageCount]];
[pdf writeToFile:path];
它创建一个带有 NSImage 的 pdf,但我如何添加文本? 谢谢
【问题讨论】:
【参考方案1】:PDFDocument
和 PDFPage
等 PDFKit 类不允许您添加文本。如果需要创建带文本的PDF,使用Quartz框架中的数据结构CGContext
创建PDF上下文创建PDF文件,使用Core Text在PDF上下文中绘制文本。
要创建 PDF 上下文,请创建 CGContext
对象。您必须提供 PDF 文件的 URL。第二个参数是一个指定页面大小的矩形。如果您想要一个标准的 8.5 x 11 英寸页面,您可以传递 NULL。第三个也是最后一个参数是辅助信息的可选字典。您可以为此选项传递 NULL。
调用CGContext
函数beginPDFPage
来创建一个您可以在其中绘图的PDF 页面。绘制您的图像。对于少量文本,调用核心文本函数CTLineCreateWithAttributedString
为文本创建一行。调用核心文本函数CTLineDraw
在 PDF 上下文中绘制文本。如果要绘制大量文本,则需要创建 Core Text 框架设置器并使用它来创建和绘制文本框架。
调用CGContext
函数endPDFPage
完成页面绘制。重复调用beginPDFPage
和endPDFPage
以绘制更多页面。完成后,调用CGContext
函数closePDF
关闭PDF 上下文并保存PDF 文件。
【讨论】:
很好的解释。不过要添加的一件事是将 NSAttributedString 传递给 CTLineCreateWithAttributedString,这不需要类型转换。以上是关于Objective C - 创建 PDF (Mac OSX / Cocoa)的主要内容,如果未能解决你的问题,请参考以下文章
如何用XCode创建Objective-c和C++的混编工程?
Objective C - 创建文本文件以在 Cocoa 中逐行读取和写入