我有一个简单的函数,创建PDF文件并返回其路径.
func createPDFFileAndReturnPath() -> String {
let fileName = "pdffilename.pdf"
let paths = NSSearchPathForDirectoriesInDomains(.LibraryDirectory, .UserDomainMask, true)
let documentsDirectory = paths[0]
let pathForPDF = documentsDirectory.stringByAppendingString("/" + fileName)
UIGraphicsBeginPDFContextToFile(pathForPDF, CGRectZero, nil)
UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, 100, 400), nil)
let text = "text" //how to print this in whatever place?
//text.drawInRect - this doesn't work
UIGraphicsEndPDFContext()
return pathForPDF
}
Run Code Online (Sandbox Code Playgroud) 我的iPhone应用程序创建PDF文件(Arial字体).普通的iPhone 3.1.x版本运行良好(除了在iPhone Docs或BlackBerry上无法正确查看iPhone上创建的PDF文件的已知问题).
当我更新我的OS 3.2和iPad项目时,它的工作原理相同,而且iPhone,iPad和Mac OS X(预览应用程序)上的PDF文件看起来仍然很棒.但是现在在Windows(Vista)上,Acrobat 9.3.1说"无法提取嵌入字体'XYZABC + ArialMT'.某些字符可能无法正确显示或打印".
事实上,Acrobat然后使用一些通用字体而不是Arial(或我尝试的任何其他字体).
每次创建PDF文件时,Quartz 3.2似乎都会生成这些"随机"嵌入字体名称(每次XYZABC都会发生变化).我不知道问题是否只是带有加号的有点奇怪的"临时"嵌入字体名称,或者Quartz 3.2嵌入字体的方式.
我已经尝试了我现有的代码(使用CGPDFContext*函数),以及新支持的UIGraphics*函数,结果相同.
如何在iPad上创建PDF文件以在Windows上正确显示?
我正在尝试将PDF注释添加到iOS中的现有PDF文件中.
据我所知,使用FASTPDFKit/CGPDFContext,可以读取(但不能编辑)现有PDF文件中的几乎所有信息(如果我错了,请纠正我).
我也明白使用libHaru,在新的PDF文件上创建注释是一件小事.但libHaru不支持阅读现有的PDF文件.
是否有任何约束组合这两个库,以便我可以添加注释到现有的PDF文件?
谢谢
我继承了一些iOS代码,它打开源PDF并创建一个CGContextRef从源文档中绘制单个页面的代码.问题是,某些文档有一个文档,遗憾的是我们的帮助文档导致此代码崩溃.
最终目标是一次缓存8个页面以改善用户体验.
CFMutableDataRef consumerData = CFDataCreateMutable(kCFAllocatorDefault, 0);
CGDataConsumerRef contextConsumer = CGDataConsumerCreateWithCFData(consumerData);
CGPDFPageRef page = CGPDFDocumentGetPage(sourceDocument, pageNumber);
const CGRect mediaBox = CGPDFPageGetBoxRect(page, kCGPDFCropBox);
CGContextRef pdfOutContext = CGPDFContextCreate(contextConsumer, &mediaBox, NULL);
CGContextDrawPDFPage(pdfOutContext, page); //If I comment out this line, no exception occurs
CGPDFPageRelease(page);
CGPDFContextEndPage(pdfOutContext);
CGPDFContextClose(pdfOutContext); //EXC_BAD_ACCESS
CGContextRelease(pdfOutContext);
Run Code Online (Sandbox Code Playgroud)
(这是代码的简化版本,原来打开一个源文件和一个网页,检查对空page和ctx,然后写入ctx到一个新的文件.)
如果不是绘制到PDF上下文,而是绘制到如此创建的UIGraphics上下文,那就没有问题了:
CGContextRef graphicsContext = UIGraphicsGetCurrentContext();
当我在PDF上下文中绘制其他内容时也没有问题.
此外,这适用于99%的文档和违规文档中75%的页面.违规文档在多个PDF查看器中正确呈现.
所以我认为我不会有内存问题.我相信CGPDF代码中有一些东西是错误的(我说只有花了一个星期才试图解决这个问题).
我的问题是,还有其他方式我应该/可以这样做吗?
有谁知道如何使用核心图形来绘制像iBooks中的PDF格式.我已经可以使用核心图形绘制一个pdf页面,但很奇怪iBooks如何显示每个页面的低质量视图,因此它加载速度很快,然后当你在页面上停留时间更长时,它会呈现完整的质量.这使得它能够打开pdf,而不必让用户像你在ipad上看到的大多数杂志应用程序一样等待.任何想法都会有帮助!
cgpdfcontext ×5
ipad ×2
iphone ×2
pdf ×2
fonts ×1
ios ×1
ios8 ×1
libharu ×1
objective-c ×1
swift ×1