Objective c 从PDF流上的TJ回调生成的CGPDFArray中复制CGPDFString
好的,我在分析PDF内容流,发现TJ回调产生一个字符串数组,所以我抓取它并开始遍历它以获得字符串值,如下所示:Objective c 从PDF流上的TJ回调生成的CGPDFArray中复制CGPDFString,objective-c,c,pdf-generation,cgpdfdocument,cgpdf,Objective C,C,Pdf Generation,Cgpdfdocument,Cgpdf,好的,我在分析PDF内容流,发现TJ回调产生一个字符串数组,所以我抓取它并开始遍历它以获得字符串值,如下所示: static void Op_TJ(CGPDFScannerRef s, void *info) { CGPDFArrayRef array; bool success = CGPDFScannerPopArray(s, &array); if(success) { NSMutableString *actualString = [[NS
static void Op_TJ(CGPDFScannerRef s, void *info)
{
CGPDFArrayRef array;
bool success = CGPDFScannerPopArray(s, &array);
if(success) {
NSMutableString *actualString = [[NSMutableString alloc] init];
NSLog(@"array count:%zu",CGPDFArrayGetCount(array));
for(size_t i = 0; i < CGPDFArrayGetCount(array); i++) {
CGPDFStringRef string;
CGPDFArrayGetString(array, i, &string);
NSString *stringData = (NSString *)CGPDFStringCopyTextString(string);
[actualString appendString:stringData];
NSLog(@"string Data:%@",stringData);
}
NSLog(@"actual string:%@",actualString);
}
}
如果I
等于一个可被2整除的数字,我会退出for循环,但这是非常草率的,而且似乎效率低下,所以我想知道是否有人有解决方案或知道问题可能是什么。。。我尝试了多个PDF文件,结果相同
我的简单快速修复方法是从以下内容更改for循环:
for(int i = 0; i < CGPDFArrayGetCount(array); i++)
for(int i=0;i
为此:
for(int i = 0; i < CGPDFArrayGetCount(array); i+=2)
for(int i=0;i
CGPDFArrayGetString定义为如果指定索引处有PDF字符串,则返回为true的布尔值,否则返回为false
您没有检查返回值
我的猜测是,在没有PDF字符串的情况下,每两次就有一次以上(并且函数返回false)
在这些情况下,函数不会覆盖与上一周期相同的字符串
只是一个猜测。我的快速修复方法是改变for循环:TJ运算符的参数是字符串或数字的数组,例如“[(a)120(W)120(a)95(Y)]TJ”。这些数字用于字形定位。-因此,这似乎是正确的答案(如果您将“PDF流”替换为“PDF字符串”)。在苹果的文档中,他们谈到了“PDF流”。请参见函数CGPDFArrayGetString返回对PDF字符串的引用。完美!解决了这个问题!谢谢。:)
for(int i = 0; i < CGPDFArrayGetCount(array); i+=2)