以HTML格式获取文本文件的正确格式

时间:2013-06-07 06:04:29

标签: html iphone ios ios5

我使用以下代码将文本转换为pdf格式:

 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"All_lang_unicode" ofType:@"txt"];

NSString *str;
NSData *myData = [NSData dataWithContentsOfFile:filePath];
if (myData) {

    str = [[NSString alloc] initWithData:myData encoding:NSUTF16StringEncoding];
    NSLog(@"STRING : %@",str);  
}

NSString *html = [NSString stringWithFormat:@"<body>%@</body>",str];


UIMarkupTextPrintFormatter *fmt = [[UIMarkupTextPrintFormatter alloc]
                                   initWithMarkupText:html];
UIPrintPageRenderer *render = [[UIPrintPageRenderer alloc] init];
[render addPrintFormatter:fmt startingAtPageAtIndex:0];
CGRect page;
page.origin.x=0;
page.origin.y=0;
page.size.width=792;
page.size.height=612;


CGRect printable=CGRectInset( page, 0, 0 );
[render setValue:[NSValue valueWithCGRect:page] forKey:@"paperRect"];
[render setValue:[NSValue valueWithCGRect:printable] forKey:@"printableRect"];

NSLog(@"number of pages %d",[render numberOfPages]);

NSMutableData * pdfData = [NSMutableData data];
UIGraphicsBeginPDFContextToData( pdfData, CGRectZero, nil );

for (NSInteger i=0; i < [render numberOfPages]; i++)
{
    UIGraphicsBeginPDFPage();
    CGRect bounds = UIGraphicsGetPDFContextBounds();
    [render drawPageAtIndex:i inRect:bounds];

}

UIGraphicsEndPDFContext();
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString * pdfFile = [documentsDirectory stringByAppendingPathComponent:@"test.pdf"];
[pdfData writeToFile:pdfFile atomically:YES];

但问题是我没有得到正确的文本格式。当我使用NSLog()打印时;我得到了正确的内容,但是当我将字符串放在STRING中时,间距和换行符都丢失了......所有内容都在同一行。即连续。

(更新:)

NSLog OUTPUT :(正确)

新德里:Sachin Tendulkar的低分可能会对他的未来产生疑问,但BCCI高级官员和IPL主席Rajiv Shukla周一出来支持高级击球手说他需要查看他的“巨大记录” “在做任何评论之前。

“当他认为是他去的时候,他会挂靴子。他不需要任何建议。在评论他的表现之前,你必须看到他的巨大记录和他过去的表现,”Shukla在议会外告诉记者补充说,这位经验丰富的板球运动员将在即将到来的比赛中强势回归。

,我得到了:

新德里:Sachin Tendulkar的低分可能会对他的未来产生疑问,但BCCI高级官员和IPL主席Rajiv Shukla周一出来支持高级击球手说他需要查看他的“巨大记录” “在做任何评论之前。 “当他认为现在是他去的时候,他会挂靴子。他不需要任何建议。在评论他的表现之前,你必须看到他的巨大记录和他过去的表现,”舒克拉在外面告诉记者议会补充说,这位经验丰富的板球运动员将在即将到来的比赛中强势回归。

任何人都可以在此代码中建议修改,以便我可以获得正确的格式。

1 个答案:

答案 0 :(得分:1)

如果我做对了,您应该将换行符替换为<br><p>。 试试

str = [str stringByReplacingOccurrencesOfString:@"\n" withString:@"<br>"];

How to detect new lines in Objective-C

您的下一个问题的解决方案可能如下所示:

NSArray *words = [str componentsSeparatedByString:@" "];  
NSString *line = @"";  
NSUInteger maxLineLength = 100;  
NSString *resultStr = @"";  
for (NSString *word in words) {  
    if ([line length] + [word length] > maxLineLength) {  
        resultStr = [resultStr stringByAppendingFormat:@"%@<br>", line];  
        line = word;  
    } else {  
        line = [line stringByAppendingFormat:@" %@", word];  
    }  
}  
resultStr = [resultStr stringByAppendingString:line];
相关问题