2011-12-23 36 views
5

Trong ứng dụng tôi đang tạo ra, tôi tải một trang dài của HTML thành một WebView và sau đó in nó vào một PDF bằng cách sử dụng sau đây:Cocoa trang PDF tách

-(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 
     } 
    } 

Vấn đề là khi tôi nhìn tại newDoc, đó là một tệp PDF khổng lồ của một trang. Những gì tôi thích sẽ là in ấn hành động giống như nó từ hộp thoại "lưu dưới dạng PDF ..." - tức là, chia nhỏ PDF thành nhiều trang có kích thước hợp lý.

Có ai biết cách thực hiện điều này không?

Tôi đã cố gắng chèn sau đây sau khi NSPrintInfo *newInfo = [NSPrintInfo sharedPrintInfo];

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

NSAutoPagination được mô tả trong các tài liệu như sau:

NSAutoPagination Những hình ảnh được chia thành hình chữ nhật kích thước bằng nhau và được đặt trong một cột của các trang. Có trong Mac OS X v10.0 trở lên. Được khai báo trong NSPrintInfo.h.

Điều này không ảnh hưởng đến tệp PDF được in.

Trả lời

10

Bạn nhận tệp có một trang lớn vì phương thức + PDFOperationWithView: không hỗ trợ phân trang. Vì lý do đó, hãy gọi - setVerticalPagination: hoặc - setHoriziontalPagination: không thay đổi bất cứ điều gì.

Bạn có thể thử sử dụng phương thức "cổ điển" + printOperationWithView:printInfo:, định cấu hình để lưu PDF vào vị trí tạm thời và sau đó tạo PDFDocument với nội dung của tệp thu được. Tôi hy vọng rằng đoạn mã dưới đây sẽ giúp ích.

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

Câu trả lời tuyệt vời! Nếu không ai khác đưa ra một câu trả lời tốt hơn trong ngày hôm sau, tôi sẽ trao tiền thưởng cho bạn. Cảm ơn bạn đã giúp đỡ. – Daniel

+0

Vâng, tôi sẽ không tỉnh táo vào cuối của bounty, vì vậy bạn sẽ thắng! – Daniel

+0

Điều này đã giúp tôi. Câu trả lời hay. –

Các vấn đề liên quan