objective-c - Objective C - 创建 PDF (Mac OSX / Cocoa)
问题描述
我正在按照本指南创建 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,我该怎么做?
Adccionaly:为此,我找到了以下代码:
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,但我如何添加文本?谢谢
解决方案
PDFKit 类喜欢PDFDocument
并且PDFPage
不允许您添加文本。如果需要创建带有文本的 PDF,使用CGContext
Quartz 框架中的数据结构创建 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
完成页面绘制。重复调用beginPDFPage
和endPDFPage
绘制其他页面。完成后,调用该CGContext
函数closePDF
关闭 PDF 上下文并保存 PDF 文件。
推荐阅读
- android - 使用 Query 或使用 Normal Reference 哪个更好 Firebase
- linux - 为什么我需要在安装我的二进制文件后设置 LD_LIBRARY_PATH?
- postgresql - 如何在 postgres 中创建复制功能的路径?
- javascript - SyntaxError:预期的表达式,在 mongoDB 中得到 '}' @(shell):1:0
- prometheus - 有状态集的 RollingUpdate 不会重新启动 pod,并且来自更新的 ConfigMap 的更改不会反映
- javascript - 如何在没有错误的情况下让“npm run configure”工作?
- javascript - 在服务器上反应 getInitialProps req 失败:未捕获的承诺:GET(未找到)
- java - 为什么eclipse插件在运行时找不到谷歌语音库类?
- r - 根据某个值 ggplot2 省略部分图例
- python - 如何使用 pandastable 在表格中设置数字格式