Ich möchte ein gut aussehendes PDF in meiner iOS 6 App erstellen.Wie kann ich ein PDF mit "echtem" Textinhalt auf iOS generieren?
Ich habe versucht:
- UIView in Zusammenhang machen
- Mit Core
- Mit NSString drawInRect
- Mit UILabel drawRect
Hier ein Codebeispiel ist:
-(CGContextRef) createPDFContext:(CGRect)inMediaBox path:(NSString *) path
{
CGContextRef myOutContext = NULL;
NSURL * url;
url = [NSURL fileURLWithPath:path];
if (url != NULL) {
myOutContext = CGPDFContextCreateWithURL ((__bridge CFURLRef) url,
&inMediaBox,
NULL);
}
return myOutContext;
}
-(void)savePdf:(NSString *)outputPath
{
if (!pageViews.count)
return;
UIView * first = [pageViews objectAtIndex:0];
CGContextRef pdfContext = [self createPDFContext:CGRectMake(0, 0, first.frame.size.width, first.frame.size.height) path:outputPath];
for(UIView * v in pageViews)
{
CGContextBeginPage (pdfContext,nil);
CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformMakeTranslation(0, (int)(v.frame.size.height));
transform = CGAffineTransformScale(transform, 1, -1);
CGContextConcatCTM(pdfContext, transform);
CGContextSetFillColorWithColor(pdfContext, [UIColor whiteColor].CGColor);
CGContextFillRect(pdfContext, v.frame);
[v.layer renderInContext:pdfContext];
CGContextEndPage (pdfContext);
}
CGContextRelease (pdfContext);
}
Die UIViews, die gerendert werden, enthalten nur eine UIImageView + eine Reihe von UILabels (einige mit und einige ohne Rahmen).
Ich versuchte auch, einen Vorschlag auf Stackoverflow gefunden: Subklassen UILabel und dies zu tun:
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {
BOOL isPDF = !CGRectIsEmpty(UIGraphicsGetPDFContextBounds());
if (!layer.shouldRasterize && isPDF)
[self drawRect:self.bounds]; // draw unrasterized
else
[super drawLayer:layer inContext:ctx];
}
Aber das änderte nichts entweder.
Egal, was ich tue, beim Öffnen der PDF in Vorschau die Textteile sind als Block auswählbar, aber nicht Zeichen für Zeichen, und das Zoomen der pdf zeigt, dass es tatsächlich ein Bitmap-Bild ist.
Irgendwelche Vorschläge?
Können Sie ein Beispielcodefragment und die PDF-Ausgabedatei posten, damit ich sie mir ansehen kann? – iPDFdev
Haben Sie das jemals herausgefunden? Das Problem "Blockauswahl" erleben. – JeremyDay
Scheint jetzt nicht zu passieren mit: 'UIGraphicsBeginPDFContextToFile (outputPath, view.bounds, nil); UIGraphicsBeginPDFPage(); CGContextRef pdfContext = UIGraphicsGetCurrentContext(); [view.layer renderInContext: pdfContext]; UIGraphicsEndPDFContext(); ' – JeremyDay