首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可可PDF分页

可可PDF分页
EN

Stack Overflow用户
提问于 2011-12-23 06:39:25
回答 1查看 3.2K关注 0票数 7

在我创建的应用程序中,我将一长页的HTML加载到webView中,然后使用以下方法将其打印到PDF中:

代码语言:javascript
复制
-(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
        }
    }

问题是,当我看newDoc时,它是一个庞大的PDF单页。我更喜欢的是打印功能与“另存为PDF.”中的打印操作相同。对话框-也就是说,将PDF分成多个大小合理的页面.

有人知道如何做到这一点吗?

我尝试在NSPrintInfo *newInfo = [NSPrintInfo sharedPrintInfo];之后插入以下内容

代码语言:javascript
复制
[newInfo setVerticalPagination:NSAutoPagination];
[newInfo setHorizontalPagination:NSAutoPagination];

NSAutoPagination在文档中的描述如下:

NSAutoPagination图像被划分为大小相等的矩形,并放置在一列页面中。可在MacOSXv10.0及更高版本中使用。在NSPrintInfo.h中声明。

这对打印的PDF没有任何影响。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-22 16:28:32

您将得到一个带有一个大页面的文件,因为+ PDFOperationWithView:方法根本不支持分页。因此,调用- setVerticalPagination:- setHoriziontalPagination:不会改变任何事情。

您可以尝试使用“经典”+ printOperationWithView:printInfo:方法,将其配置为将PDF保存到临时位置,然后使用获取的文件内容创建PDFDocument。我希望下面的代码片段会有所帮助。

代码语言:javascript
复制
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.
}
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8613008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档