Soy consciente de tomar la captura de pantalla de UIWebView y convertirla a PDF, pero necesito generar un pdf adecuado (texto como texto y no captura de pantalla). Save2PDF es una aplicación que crea un PDF apropiado. ¿Alguien tiene una idea de cómo lo hacen?Conversión de HTML a PDF en iOS?
Respuesta
El punto de esta pregunta era toda texto como texto y no la captura de pantalla
La respuesta siguiente muestra cómo hacer una captura de pantalla de mapa de bits, en un recipiente pdf ...
#import <QuartzCore/CALayer.h>
- (NSString *)pdfPath {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"tmp.pdf"];
return writableDBPath;
}
- (NSDictionary *)pdfContextDictionary {
NSDictionary *d = [NSDictionary dictionaryWithObjectsAndKeys:@"J. P. Author", kCGPDFContextAuthor,
@"My Cool App", kCGPDFContextCreator,
@"This is the Output", kCGPDFContextTitle,
nil];
return d;
}
- (void)printToPDF {
NSString *path = [self pdfPath];
UIView *displayView = self.view;
CGRect pageRect = displayView.bounds;
if (UIGraphicsBeginPDFContextToFile(path, pageRect, [self pdfContextDictionary]) == NO) {
return; // error
}
UIGraphicsBeginPDFPage();
CGContextRef context = UIGraphicsGetCurrentContext();
CALayer *layer = displayView.layer;
[layer renderInContext:context];
UIGraphicsEndPDFContext();
NSLog(@"[%@ %@] %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), path);
}
Gracias, pero a mí me parece tomar una captura de pantalla de la vista. ¿El texto se representará como texto en lugar de imagen utilizando este método? – Salil
En mi experiencia, '-renderInContext:' solo genera mapas de bits basados en ráster para subcapas cuando se procesa en un contexto PDF, convirtiendo elementos vectoriales como texto en gráficos ráster pixelados. –
¡Gracias a todos por la ayuda! ¡Encontré la solución usando este hilo http://stackoverflow.com/questions/4356436/generating-a-pdf-using-the-new-printing-stuff-in-ios-4-2 que funciona perfecto para mí! Lo siento porque mis búsquedas anteriores no me mostraron ese hilo. – Salil
creé una clase basada en cada buen consejo que encontré alrededor. He estado cavando mucho y espero que mi clase ofrezca un buen comienzo para cualquiera que intente crear un PDF de varias páginas directamente de alguna fuente HTML.
Encontrará todo el código aquí con algunos ejemplos de código básica: https://github.com/iclems/iOS-htmltopdf
que tenía justo el mismo problema que usted y mis requisitos eran: - PDF completo (texto real, sin mapa de bits) - inteligente varias páginas (en comparación con cortar una vista web de altura completa cada X píxeles ...)
Por lo tanto, la solución que uso es bastante buena ya que recurre a las mismas herramientas que usa iOS para dividir páginas para impresión.
Me explico, tengo que instalar un UIPrintPageRenderer basado en el formateador vista web de impresión (primer consejo):
UIPrintPageRenderer *render = [[UIPrintPageRenderer alloc] init];
[render addPrintFormatter:webView.viewPrintFormatter startingAtPageAtIndex:0];
CGRect printableRect = CGRectMake(self.pageMargins.left,
self.pageMargins.top,
self.pageSize.width - self.pageMargins.left - self.pageMargins.right,
self.pageSize.height - self.pageMargins.top - self.pageMargins.bottom);
CGRect paperRect = CGRectMake(0, 0, self.pageSize.width, self.pageSize.height);
[render setValue:[NSValue valueWithCGRect:paperRect] forKey:@"paperRect"];
[render setValue:[NSValue valueWithCGRect:printableRect] forKey:@"printableRect"];
NSData *pdfData = [render printToPDF];
[pdfData writeToFile: self.PDFpath atomically: YES];
Mientras tanto, he creado una categoría en UIPrintPageRenderer para apoyar:
- (NSData*) printToPDF
{
NSMutableData *pdfData = [NSMutableData data];
UIGraphicsBeginPDFContextToData(pdfData, CGRectZero, nil);
[self prepareForDrawingPages: NSMakeRange(0, self.numberOfPages)];
CGRect bounds = UIGraphicsGetPDFContextBounds();
for (int i = 0 ; i < self.numberOfPages ; i++)
{
UIGraphicsBeginPDFPage();
[self drawPageAtIndex: i inRect: bounds];
}
UIGraphicsEndPDFContext();
return pdfData;
}
Este código funciona bien, pero tengo entendido que las instrucciones '[render setValue: ..]' usan métodos no documentados, y el App Store rechazará este código. – brainjam
No. '-setValue: forKey:' no es parte de una API privada. Lo he estado usando solo en propiedades de solo lectura y Apple aprobó mis aplicaciones. – akashivskyy
hola Tengo un requisito que tengo que cargar un archivo html y ese archivo html tendrá campos de texto, etiquetas, botones de casilla de verificación, etc. Tengo que obtener los datos que el usuario ingresará y luego tengo que convertirlos a PDF con el usuario ingrese datos. –
- 1. Conversión de PDF a HTML con Python
- 2. Conversión de HTML a PDF (no PDF a HTML) usando PHP
- 3. Convertir PDF a HTML
- 4. convertir HTML a PDF
- 5. conversión de PDF a imagen
- 6. Conversión de HTML a odt, doc, docx
- 7. HTML a PDF en ASP.NET
- 8. PDF a HTML en iPhone
- 9. ¿Documento HTML a PDF?
- 10. HTML dinámico a PDF
- 11. Convertir PDF a HTML
- 12. ¿Hay alguna alternativa viable a wkhtmltopdf en Windows para la conversión de html a pdf?
- 13. Conversión de PDF a la cadena
- 14. Conversión de PDF a JPG usando PHP
- 15. conversión de pdf a xml usando .NET
- 16. Conversión de HTML a XML
- 17. conversión de HTML a RTF
- 18. Conversión de HTML a RDF
- 19. PHP LaTeX a PDF Conversión/compilación
- 20. ABCpdf conversión de anclajes html para saltar a otra página en el mismo PDF
- 21. html a pdf con wkhtmltopdf
- 22. Enviar formulario HTML a PDF
- 23. Rieles: ¿Convertir HTML a PDF?
- 24. C# convirtiendo pdf a html
- 25. HTML y CSS a PDF en JavaScript
- 26. Convirtiendo html a pdf en php?
- 27. Conversión de PDF a Word de alta calidad en PHP?
- 28. Conversión de documentos de MS Word a PDF en ASP.NET
- 29. Convertir archivo PDF a HTML en C#
- 30. Conversión de páginas PDF a JPG en Java-GAE
quizás esto podría ayudar: http://stackoverflow.com/questions/5443166/how-to-convert-uiview-to-pdf-within-ios – CarlJ
Gracias meccan pero parece ser solo un enfoque de captura de pantalla. Soy consciente de libharu pero también es un proceso largo. – Salil
Es ** psicótico ** que esta pregunta se cerró. * "es probable que esta pregunta solicite debate, argumentos, encuestas o discusiones extensas" * ... ¿cómo se aplica esto aquí? Preguntas como "lo que es mejor, los Stones o los Beatles" o "¡Es mejor Mac o PC!" ... solicite debate, argumento, etc. Esta es una pregunta directa de ingeniería técnica. "Cómo convertir html a pdf, en iOS" ... ¿qué podría ser más claro? Extraño. – Fattie