2

我正在制作一个扫描多页pdf文件的应用程序。我有一个PDFView和一个PDFThumbnailView链接。第一次完成扫描时,我创建一个新的PDFDocument并将其设置为PDFView. 然后,每当完成另一次扫描时,我都会添加一个PDFPage[pdfView document].

现在的问题是,无论何时添加页面,都不会更新PDFViewPDFThumbnailView更新以显示带有额外页面的新文档。直到我放大或缩小,然后它们都会更新以显示带有新页面的文档。

我现在拥有的临时解决方案(放大然后自动缩放)当然不是最好的解决方案。例如,当您已经放大文档并扫描新页面时,视图将自动缩放。我以前尝试[pdfView setNeedsDisplay:YES]过,但这似乎不起作用。

这是扫描到达的方法NSData

- (void)scannerDevice:(ICScannerDevice *)scanner didScanToURL:(NSURL *)url data:(NSData *)data {
    //Hide the progress bar
    [progressIndicator stopAnimation:nil];

    //Create a pdf page from the data
    NSImage *image = [[NSImage alloc] initWithData:data];
    PDFPage *page = [[PDFPage alloc] initWithImage:image];

    //If the pdf view has a document
    if ([pdfView document]) {
        //Set the page number and add it to the document
        [page setValue:[NSString stringWithFormat:@"%d", [[pdfView document] pageCount] + 1] forKey:@"label"];
        [[pdfView document] insertPage:page atIndex:[[pdfView document] pageCount]];
    } else {
        //Create a new document and add the page
        [page setValue:@"1" forKey:@"label"];
        PDFDocument *document = [[PDFDocument alloc] init];
        [document insertPage:page atIndex:0];
        [pdfView setDocument:document];
    }

    //Force a redraw for the pdf view so the pages are shown properly
    [pdfView zoomIn:self];
    [pdfView setAutoScales:YES];
}

有谁知道我可以添加 aPDFPage并进行PDFView更新而不会弄乱缩放状态的方法PDFView

4

2 回答 2

4

您需要手动调用:

- (void)layoutDocumentView

我想这不是手动调用的原因是允许将多个更改合并到一个更新中。

这是记录在案的:

PDFView 实际上包含几个子视图,例如文档视图(实际绘制 PDF 的位置)和“蒙版视图”(可能显示为 PDF 内容周围的灰色区域,具体取决于缩放比例)。更改 PDF 内容可能需要更改这些内部视图,因此如果您使用 PDF Kit 实用程序类添加或删除页面、旋转页面或执行影响可见布局的其他操作,则必须显式调用此方法。

此方法从影响可见布局的 PDFView 方法(例如 setDocument:、setDisplayBox: 或 zoomIn:)中自动调用。

于 2014-12-08T16:22:25.090 回答
1

到目前为止,我使用注释手动刷新 PDFView 的最佳解决方案是将 PDFView 移动到另一个页面并返回到您需要刷新的页面,因为:

- (void)layoutDocumentView在我的情况下对我不起作用。

然后:

[self.pdfView goToLastPage:nil];
[self.pdfView goToPage:destinationPage];
于 2020-08-25T08:10:09.910 回答