29

xcode iOSローカルファイルからpdfファイルを表示できるようなオフラインビルドの方法があるかどうか知りたいです。

現在使用している方法UIWebViewは、PDF URL(オンライン)を含むカスタムHTMLを表示する方法ですが、可能であればオフラインバージョンを作成したいと思います。

しかし、オンライン調査から、PDFを表示する唯一の方法はUIWebViewを使用することであるように思われます。実際の場合、ローカルリソースからファイルをプルする(たとえば、xcodeリソースフォルダーにファイルを追加する)ことは可能です。 PDFURL。

オフトピック:どちらが良い選択ですか?ローカルファイルをプルするには、またはPDFファイルのオンラインURLを使用するには?

接続が必要なためUIWebView、オンラインURLが最新で更新されているため、オンラインURLを取得する方が適切なようです。

フィードバックをいただければ幸いです。

編集:簡単な質問です。UIDocumentInteractionControllerメソッドまたはQuickLookフレームワークを使用してオフラインにすると、新しいPDF記事が追加されるたびに更新パッチをリリースする必要があります(間違っている場合は修正してください)

この点を考慮して、その場で自分の質問に反論することにしました(ごめんなさい、時間を無駄にしていると感じたら>。<、私は可能性に疑問を投げかけるのが好きな人です。問題を解決するために取ることができる別のアプローチ)絶え間ない更新から時間を節約し、UIWebViewを使用するリアルタイムベースソリューションを提供する場合(これはこのSOスレッドの私の目的と矛盾していることを私は知っています) projはオンラインWebサイトに基づいています(そこからコンテンツとソースを取得します)。記事セクションのWebサイトをロードする場合、NSString変数を追加することで、NSRangeに追加できると言っても過言ではありません。 URLがニュースセクションとPDFURLを離れないように、UIWebViewと一緒にviewDidLoadに機能します。例えば

電卓のポイントのNSRange関数の前に一度行ったので、このフレームワークアプリで使用するのに良い時期だと思いました。

PS-このアプリは組織ベースのプロジェクトであり、私は彼らにベーススケルトンフレームワークを提供するインターンです。

4

12 に答える 12

38

多くのオプションがあります。3つあります。

1)ローカルpdfファイルをロードして表示する最も簡単な方法は、次のようなUIWebviewを使用することです。

NSString *path = [[NSBundle mainBundle] pathForResource:@"document" ofType:@"pdf"];
NSURL *targetURL = [NSURL fileURLWithPath:path];
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
[webView loadRequest:request];

2)UIDocumentInteractionController/QLPreviewControllerを使用してPDFファイルをネイティブに表示することもできます。

3)別の方法は、リンゴのZoomingPDFViewerサンプルコードのように、カスタムPDFビューアーを作成することです。(UIPageViewController + CATiledLayer + UIScrollViewを使用)

于 2012-06-04T09:20:53.537 に答える
35

UIWebViewを使用して、バンドルからPDFを直接取得できます。オンラインのWebサービスを呼び出す必要はありません。

ローカルファイル:

NSString *html = [NSString stringWithContentsOfFile:path1 encoding:NSUTF8StringEncoding error:nil];
[self.webView loadHTMLString:html baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle]bundlePath]]];

リモートファイル:

- (void) loadRemotePdf
    {
       CGRect rect = [[UIScreen mainScreen] bounds];
       CGSize screenSize = rect.size;
        
       UIWebView *myWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0,0,screenSize.width,screenSize.height)];
        webView.autoresizesSubviews = YES;
            webView.autoresizingMask=(UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth);

       NSURL *myUrl = [NSURL URLWithString:@"http://www.mysite.com/test.pdf"];
       NSURLRequest *myRequest = [NSURLRequest requestWithURL:myUrl];
            
       [webView loadRequest:myRequest];

       [window addSubview: myWebView];
       [myWebView release];
            
}
于 2012-06-04T09:14:11.983 に答える
11

PDFファイルを処理するときはQuickLookフレームワークを使用することをお勧めします。

于 2012-06-04T09:23:34.553 に答える
5

IOが導入した新しいツールキットがあります。PDFの表示に関連する多くの専用機能があります。その中でPdfViewクラスを使用して、ローカルファイルまたはURLを介してPDFを表示できます。

PDFKit > PDFView

于 2018-02-28T06:26:47.977 に答える
5

SWIFT 4.x

迅速なUIWebviewアプローチ:

//let url = URL.init(string: "https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/pdf_open_parameters.pdf")! // for file in web
let url = Bundle.main.url(forResource: "filename", withExtension: ".pdf")! // for file in bundle
let webView = UIWebView.init(frame: view.frame)
webView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
webView.loadRequest(URLRequest.init(url: url))
view.addSubview(webView)
于 2018-04-23T10:24:49.093 に答える
3

AppleのPDFKitフレームワークは、PDFの操作に役立つ幅広いコードを提供し、最も便利なものの1つはPDFViewです。これは、PDFを画面にレンダリングし、ユーザーがそれらを操作できるようにします。

試してみるには、PDFKitフレームワークをインポートすることから始めます。

import PDFKit

次に、このコードをviewDidLoad()メソッドに追加して、PDFViewを作成し、使用可能なすべてのスペースを埋めるようにします。

let pdfView = PDFView()

pdfView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(pdfView)

pdfView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
pdfView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true
pdfView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
pdfView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true

最後に、バンドル内のどこかにあるPDF(またはドキュメントディレクトリ内の1つ)を指すURLを作成し、そこからPDFDocumentオブジェクトを作成して、PDFビューに渡します。

guard let path = Bundle.main.url(forResource: "example", withExtension: "pdf") else { return }

if let document = PDFDocument(url: path) {
    pdfView.document = document
}

終わり!

于 2019-03-02T05:37:02.437 に答える
2

私はこのサイトを見つけました。iPhoneにロードされている利用可能なPDF対応アプリでPDFを開く非常に簡単な方法です。(私はiBooksが好きです)

PDFファイルを提示して開く簡単な方法

于 2013-09-19T23:40:17.177 に答える
2
NSString *path = [[NSBundle mainBundle] pathForResource:@"Yourpdf" ofType:@"pdf"];
NSURL *targetURL = [NSURL fileURLWithPath:path];
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
UIWebView *webView=[[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 300, 400)];
[[webView scrollView] setContentOffset:CGPointMake(0,500) animated:YES];
[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"window.scrollTo(0.0, 50.0)"]];
[webView loadRequest:request];
[self.view addSubview:webView];
于 2016-07-30T08:19:58.703 に答える
2

私の場合、選択した行または詳細インジケーターのいずれかに基づいてPDFViewにセグエするtableViewがあります(アプリの異なる部分にそれぞれ2つの異なるViewControllerがあります)。PDFView用の@IBOutletがあり、このコードを使用して、アプリに保存されている目的のPDFを開きます。

@IBOutlet weak var myPDFView: PDFView!

var mySelection = String()

override func viewDidLoad() {
    super.viewDidLoad()

    if let path = Bundle.main.path(forResource: mySelection, ofType: "pdf") {
        let url = URL(fileURLWithPath: path)

        if let myDocument = PDFDocument(url: url) {
            myPDFView.document = myDocument
            myPDFView.autoScales = true
            myPDFView.displayMode = .singlePageContinuous
            myPDFView.displayDirection = .vertical
            myPDFView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        }
    }
}

これはすべてうまくいきます。正しいPDFは簡単に読み込まれ、希望どおりに画面に表示されます。ただし、PDFは常に少し上にスクロールされるため、上部がナビゲーションバーの下に非表示になります。下のスクリーンショットでは、ドキュメントの上部は表示されていませんが、下部は下部のタブバーのすぐ上にあることに注意してください。これは、ページの下部から始まるPDF座標に関係していると思いますが、ドキュメントの最上部をロードする方法がわからないため、上部の背景が表示されます。

シミュレータのスクリーンショットリンク

おそらくこれはautoScalesと関係がありますか?

于 2019-03-03T14:13:31.397 に答える
1

遅いですが、PDFファイルのロードに関してUIWebviewにいくつかの制限があります。編集可能なPDFを正しくロードしません。したがって、次のコードを使用して、任意のタイプのpdfファイルをロードします

NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"pdfFileName" ofType:@"pdf"]];
PDFView *view = [[PDFView alloc] initWithFrame:self.view.frame];
view.document = [[PDFDocument alloc] initWithURL:url];
[self.view addSubview:view];
于 2018-03-20T06:57:08.070 に答える
1

UIDocumentInteractionControllerを使用することもできます!

let docController = UIDocumentInteractionController(url: URL(fileURLWithPath: path)) documentInteractionController.presentPreview(animated: true)

于 2019-03-06T18:48:30.563 に答える
0

私たちはiOSコーダーであり、JS / Webプログラマーではないので、迅速なAppleAPIを使用してください。より速く、よりクリーンな方法は、Quicklookを使用することです。

カリマルクスを引用します。

とにかくコードは非常に単純です:

//  Copyright © 2019 ing.conti. All rights reserved.
//

import UIKit
import QuickLook


class ViewController: UIViewController, QLPreviewControllerDataSource {

    var previewController:QLPreviewController?

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        self.previewController = QLPreviewController()
        previewController!.dataSource = self
        present(previewController!, animated: true)

    }

    //QL delegate:

    func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
        return 1
    }


    func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {

        guard let url = Bundle.main.url(forResource: "SAMPLE", withExtension: "pdf") else {
            fatalError("Could not load pdf")
        }

        return url as QLPreviewItem 
    }
}
于 2019-01-23T12:43:37.087 に答える