簡體   English   中英

如何控制在UIWebView for iOS中加載的頁面顯示為PDF(轉到頁面)

[英]How to control page display to PDF loaded in UIWebView for iOS (go to page)

我正在開發一個應用程序,它顯示嵌入在WebView中的PDF,這是我的代碼:

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSURL *urlremoto = [NSURL URLWithString:@"https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/TransitionGuide.pdf"];

    request = [NSURLRequest requestWithURL:urlremoto];

    [self.webView loadRequest:request];
    [self.webView setScalesPageToFit:YES];
}

-(void)webViewDidStartLoad:(UIWebView *)webView{

    [self.activityIndicator startAnimating];
}

-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
    //TODO: describir el error
    [self.activityIndicator stopAnimating];        
}

-(void)webViewDidFinishLoad:(UIWebView *)webView{

    [self.activityIndicator stopAnimating];
}

現在我想觸摸一個按鈕並將我加載的PDF更改為某個頁面,我正在尋找能夠實現此目的的東西,但仍然無法正常工作

在此先感謝您的支持

它很晚但可能會有幫助,

對於低於11.0的iOS

func webViewDidFinishLoad(_ webView: UIWebView)
    {

        var pdfPageHeight:CGFloat = 0

        let a = webView.scrollView.subviews

        for var view in a
        {
            if view.isKind(of: NSClassFromString("UIWebPDFView")!)
            {
                let b = view.subviews

                for var iview in b
                {
                    if iview.isKind(of: NSClassFromString("UIPDFPageView")!)
                    {
                        pdfPageHeight = iview.bounds.size.height

                        break
                    }
                }
            }
        }

        webView.scrollView.setContentOffset(CGPoint(x: 0, y: CGFloat((pagenumber - 1)   + 1 )*pdfPageHeight), animated: true)

    }

適用於iOS 11及更高版本

var pdfdocumentURL: URL?

    @IBOutlet weak var titleLbl: UILabel!
    @IBOutlet weak var pdfview: PDFView!
    var pagenumber = 1



    override func viewDidLoad()
    {
        super.viewDidLoad()
        self.titleLbl.text = titleStr

       let pdfdocument = PDFDocument(url: pdfdocumentURL!)

        pdfview.document = pdfdocument
        pdfview.displayMode = PDFDisplayMode.singlePageContinuous
        pdfview.autoScales = true

        pagenumber = pagenumber - 1
        if let page = pdfdocument?.page(at: pagenumber) {
            pdfview.go(to: page)
        }


    }

此刻我認為你可以使用兩種方法:

  1. 使用scrollView“導航,通過PDF:

    [[webView scrollView] setContentOffset:CGPointMake(0,y)animated:YES];

    //例如,跳轉到頁面高度為1000像素的PDF文檔中的第5頁:

     int selectedPag = 5; // ie Go to page 5 float pageHeight = 1000.0; // ie Height of PDF page = 1000 px; float y = pageHeight * selectedPag; [[webView scrollView] setContentOffset:CGPointMake(0,y) animated:YES]; 
  2. 拆分PDF單頁。

據我所知,Safari Kit不支持命名目的地( RFC 3778 )。 換句話說,如果你試試這個:

<a href="http://www.domain.com/file.pdf#page=3">Link text</a>

在Safari中,它不起作用。

據我所知,你跳轉到PDF頁面的唯一機會是使用像Reader或其他類似的框架。

正如RFG所說,使用webview的scrollview是完美的,關鍵的一步是找出pdf頁面的高度,下面的代碼將獲得pdf文件的整個高度和pdf文件的頁面數量。然后我們得到它!

第一種方式:

//get the total height
CGFloat pageHeight = self.webView.scrollView.contentSize.height;
//get page nums
-(NSInteger)getTotalPDFPages:(NSString *)strPDFFilePath
{
    NSURL *pdfUrl = [NSURL fileURLWithPath:strPDFFilePath];
    CGPDFDocumentRef document = CGPDFDocumentCreateWithURL((CFURLRef)pdfUrl);
    size_t pageCount = CGPDFDocumentGetNumberOfPages(document);
    return pageCount;
}

第二種方式:

//get the content info 
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    [self.okBtn setEnabled:YES];
    [self.signPdfBtn setEnabled:YES];
    NSArray* a = [self.webView.scrollView subviews];
    for (UIView* view in a) {
        if ([view isKindOfClass:NSClassFromString(@"UIWebPDFView")]) {
            NSArray* b = view.subviews;
            self.content_hetght = view.bounds.size.height;
            self.content_num = b.count;
            }
    }
}
//then you can jump any page,like the last page
[self.webView.scrollView setContentOffset:CGPointMake(0, (self.content_num-1)*(self.content_hetght*1.0 /self.content_num)) animated:YES];

Swift 3版本:

    let selectedPag: CGFloat = 5; // i.e. Go to page 5

    let pageHeight: CGFloat = 1000.0; // i.e. Height of PDF page = 1000 px;

    let y: CGFloat = pageHeight * selectedPag;

    let pageOffset = CGPoint(x: 0, y: y)
    WebViewMore.scrollView.setContentOffset(pageOffset, animated: true)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM