目标C-创建PDF(Mac OSX / Cocoa)

时间:2019-01-21 14:09:49

标签: objective-c cocoa quartz-2d ios-pdfkit

我正在按照本指南创建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:

  

-(无效)MyCreatePDFFile:(CGRect)pageRect文件名:(const char *)文件名;

我需要编码-(void)myDrawContent:(CGContextRef)pdfContext;我想在图像顶部设置标题,在图像之后设置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 个答案:

答案 0 :(得分:1)

诸如PDFDocumentPDFPage之类的PDFKit类不允许您添加文本。如果需要使用文本创建PDF,请使用Quartz框架中的数据结构CGContext创建PDF上下文以创建PDF文件,并使用Core Text在PDF上下文中绘制文本。

要创建PDF上下文,请创建一个CGContext对象。您必须提供PDF文件的URL。第二个参数是指定页面大小的矩形。如果需要标准的8.5 x 11英寸页面,则可以传递NULL。第三个也是最后一个参数是可选的辅助信息字典。您可以为此选项传递NULL。

调用CGContext函数beginPDFPage,以创建一个可插入的PDF页面。绘制图像。对于少量文本,请调用Core Text函数CTLineCreateWithAttributedString为文本创建一行。调用Core Text函数CTLineDraw以在PDF上下文中绘制文本。如果要绘制大量文本,则需要创建一个Core Text框架设置器,并使用它来创建和绘制文本框架。

调用CGContext函数endPDFPage完成页面绘制。重复对beginPDFPageendPDFPage的调用以绘制其他页面。完成后,调用CGContext函数closePDF以关闭PDF上下文并保存PDF文件。