2011-12-23 13 views
5

En la aplicación que estoy creando, me carga una larga página de HTML en un web View y luego imprimirlo en un archivo PDF utilizando la siguiente:cacao página PDF división

-(void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame 
{ 
    if ([frame isEqual:[[self doc] mainFrame]]) 
    { 
     NSMutableData *newData = [[NSMutableData alloc] init]; 
     NSPrintInfo *newInfo = [NSPrintInfo sharedPrintInfo]; 
     NSView *docView = [[[[self doc] mainFrame] frameView] documentView]; 

     NSPrintOperation *newPrintOp = [NSPrintOperation PDFOperationWithView:docView insideRect:docView.bounds toData:newData printInfo:newInfo]; 

     BOOL runPrint = [newPrintOp runOperation]; 
     if (!runPrint) 
     { 
      NSLog(@"Print Failed"); 
     } 
     PDFDocument *newDoc = [[PDFDocument alloc] initWithData:newData]; 
     [newData release]; 
     [self setPdf:newDoc]; 

     //Other code here 
     } 
    } 

El problema es que cuando miro en newDoc, es un gran PDF de una sola página. Lo que preferiría sería que la impresión actuara de la misma manera que en el diálogo "guardar como PDF ...", es decir, dividir el PDF en varias páginas de tamaño razonable.

¿Alguien sabe cómo lograr esto?

I intentó insertar el siguiente después NSPrintInfo *newInfo = [NSPrintInfo sharedPrintInfo];

[newInfo setVerticalPagination:NSAutoPagination]; 
[newInfo setHorizontalPagination:NSAutoPagination]; 

NSAutoPagination se describe en los documentos como el siguiente:

NSAutoPagination La imagen se divide en rectángulos de igual tamaño y se coloca en una columna de páginas. Disponible en Mac OS X v10.0 y posterior. declarado en NSPrintInfo.h.

Esto no tuvo ningún efecto en el PDF impreso.

Respuesta

10

Obtiene un archivo con una página grande porque el método + PDFOperationWithView: no es compatible con la paginación. Por ese motivo, llamar al - setVerticalPagination: o - setHoriziontalPagination: no cambia nada.

Puede intentar usar el método "clásico" + printOperationWithView:printInfo:, configúrelo para guardar PDF en una ubicación temporal y luego cree PDFDocument con los contenidos del archivo obtenido. Espero que ese fragmento de código a continuación ayude.

NSMutableDictionary *dict = [[NSPrintInfo sharedPrintInfo] dictionary]; 
[dict setObject:NSPrintSaveJob forKey:NSPrintJobDisposition]; 
[dict setObject:temporaryFilePath forKey:NSPrintSavePath]; 
NSPrintInfo *pi = [[NSPrintInfo alloc] initWithDictionary:dict]; 
[pi setHorizontalPagination:NSAutoPagination]; 
[pi setVerticalPagination:NSAutoPagination]; 

NSPrintOperation *op = [NSPrintOperation printOperationWithView:[[[webView mainFrame] frameView] documentView] printInfo:pi]; 
[pi release]; 
[op setShowsPrintPanel:NO]; 
[op setShowsProgressPanel:NO]; 

if ([op runOperation]){ 
    PDFDocument *doc = [[[PDFDocument alloc] initWithURL:[NSURL fileURLWithPath: temporaryFilePath]] autorelease]; 
    // do with doc what you want, remove file, etc. 
} 
+0

¡Respuesta excelente! Si a nadie más se le ocurre una respuesta mejor al día siguiente, te otorgaré la recompensa. Gracias por tu ayuda. – Daniel

+0

Bueno, no voy a estar despierto por el final de la recompensa, ¡así que ganas! – Daniel

+0

Esto me ayudó. Buena respuesta. –