問題タブ [apple-pdfkit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - iPhone / iPad / iOS 用の高速で無駄のない PDF ビューア - ヒントとヒント
最近、PDF の描画について多くの質問がありました。
はい、PDF を で非常に簡単にレンダリングできますがUIWebView、優れた PDF ビューアに期待されるパフォーマンスと機能を提供することはできません。
PDF ページを CALayerまたはUIImage に描画できます。Appleには、Zoomable UIScrollview で大きな PDF を描画する方法を示すサンプル コードもあります。
しかし、同じ問題が次々と発生します。
UIImage メソッド:
- PDFは、
UIImage光学的にスケーリングされず、レイヤーアプローチでもあります。 -
制限
UIImagesからの生成時に CPU とメモリがヒットし、それを使用して新しいズーム レベルのリアルタイム レンダーを作成することができなくなります。PDFcontext
CATiledLayer メソッド:
- 完全な PDF ページを a に描画するかなりのオーバーヘッド (時間)
CALayerがあります: 個々のタイルがレンダリングされているのを見ることができます (tileSize を微調整しても) CALayers事前に準備することはできません (オフスクリーンでレンダリングされます)。
一般に、PDF ビューアはメモリもかなり消費します。Apple のズーム可能な PDF の例のメモリ使用量を監視することもできます。
私の現在のプロジェクトでは、PDF ビューアーを開発してUIImageおり、別のスレッドでページをレンダリングして (ここでも問題です!)、縮尺が x1 のときに表示しています。CATiledLayerスケールが 1 を超えると、レンダリングが開始されます。iBooks は、ページをスクロールすると、鮮明なバージョンが表示される前に、ページの低解像度バージョンがわずか 1 秒未満で表示されるという、同様のダブル テイク アプローチを採用しています。
描画を開始する前にPDF画像がレイヤーをマスクする準備ができるように、ページの両側に2ページをフォーカスしてレンダリングします.ページは、フォーカスされたページから+2ページ離れたときに再び破棄されます。
Drawing PDFのパフォーマンス/メモリ処理を改善するために、どんなに小さくても明白であっても、誰かが何か洞察を持っていますか? またはここで議論されている他の問題はありますか?
編集:いくつかのヒント (クレジット - Luke Mcneice、VdesmedT、Matt Gallagher、Johann):
可能な場合は、メディアをディスクに保存してください。
TiledLayers でレンダリングする場合は、より大きな tileSizes を使用してください
プレースホルダーオブジェクトを使用して頻繁に使用される配列を初期化します。代わりに、別の設計アプローチはこれです
画像は、
CGPDFPageRefNSOperationsまたは GCD & Blocksを使用して、事前にページを準備します。CGContextSetInterpolationQuality(ctx, kCGInterpolationHigh); CGContextSetRenderingIntent(ctx, kCGRenderingIntentDefault);beforeを呼び出しCGContextDrawPDFPageて、描画中のメモリ使用量を減らしますdocRef
NSOperationsで初期化するのは悪い考えです (メモリ)。docRef をシングルトンにラップします。不必要にキャンセル
NSOperationsする 可能な場合、特にメモリを使用する場合は、コンテキストを開いたままにしないように注意してください。ページ オブジェクトをリサイクルし、未使用のビューを破棄する
開いているコンテキストが不要になったらすぐに閉じます
メモリ警告を受け取ったら、DocRef とすべてのページ キャッシュを解放してリロードします。
その他の PDF 機能:
PDF 内のリンクの取得(およびhereおよびhere )
リンクのターゲットを
/Dest取得する (配列からページ番号を取得する)
検索(およびここ) (すべての PDF で機能するとは限りません (奇妙な文字が表示されるものもあります。エンコードの問題だと思いますが、よくわかりません) -Credit BrainFeeder)
CALayer とオフスクリーン レンダリング- 次のページをレンダリングして高速/スムーズに表示
ドキュメンテーション
- Quartz PDFObjects (メタ情報、注釈、サムに使用)
- 上記 PDF 仕様
サンプルプロジェクト
- Apple/ ZoomingPDF - ズーム
UIScrollView、、CATiledLayer - vfr/ リーダー- ズーム、ページング
UIScrollView、CATiledView - 眉/葉- 素敵なトランジションでのページング
- / skim - 見た目のすべて (OSX 用の PDF リーダー/エディター)
ios - PDFKit 注釈の内容を入れ替える
注釈を削除したり、新しい注釈を作成したりせずに、注釈のテキスト(つまりcontents)をPDFKitで変更できますか?FreeText
次のスニペットは、で表示するときに注釈の内容を変更しませんPDFView。
これは機能しますが、注釈を置き換える必要があります (したがって、注釈の他のすべての詳細をコピーする必要があります)。
注: 同じ注釈の追加/削除も役に立ちません。
ios - PDFKit / PDFView はフォーム注釈との相互作用を無効にします
ofをPDFDocument持つ注釈を含むの場合、それらの注釈に対するユーザー操作を無効にすることはできますか (つまり、チェックボックスをクリックしても切り替えられません)?widgetFieldTypePDFAnnotationWidgetSubtype.textPDFAnnotationWidgetSubtype.button
ios - Apple PDFKit - 検証スクリプトを含む PDF の問題。
JavaScript を使用していくつかの検証が埋め込まれた一連の PDF ファイルがあります。日付や時刻の形式、さまざまなフィールドから計算された合計などの検証。
これらの PDF をテストしたところ、Mac Chrome ブラウザー、Windows Chrome ブラウザー、Windows Adobe Reader、iPad Adobe Reader で問題なく動作します。ただし、Apple PDFKit を使用して PDF をPDFView. 検証、フィールドのフォーマット、または iPad Adobe Reader アプリでのポップアップ検証エラーの発生は行われません。テスト目的で、この pdf をアプリケーションに保持し、そこから直接アクセスしています。
何かが間違っている場合に検証エラー/ポップアップが表示される iPad Adobe Reader アプリと同じ機能を取得することは可能ですか?