問題タブ [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.

0 投票する
3 に答える
102699 参照

ios - iPhone / iPad / iOS 用の高速で無駄のない PDF ビューア - ヒントとヒント

最近、PDF の描画について多くの質問がありました。

はい、PDF を で非常に簡単にレンダリングできますがUIWebView、優れた PDF ビューアに期待されるパフォーマンスと機能を提供することはできません。

PDF ページを CALayerまたはUIImage に描画できます。Appleには、Zoomable UIScrollview で大きな PDF を描画する方法を示すサンプル コードもあります。

しかし、同じ問題が次々と発生します。

UIImage メソッド:

  1. PDFは、UIImage光学的にスケーリングされず、レイヤーアプローチでもあります。
  2. 制限UIImagesからの生成時に CPU とメモリがヒットし、それを使用して新しいズーム レベルのリアルタイム レンダーを作成することができなくなります。PDFcontext

CATiledLayer メソッド:

  1. 完全な PDF ページを a に描画するかなりのオーバーヘッド (時間)CALayerがあります: 個々のタイルがレンダリングされているのを見ることができます (tileSize を微調整しても)
  2. CALayers事前に準備することはできません (オフスクリーンでレンダリングされます)。

一般に、PDF ビューアはメモリもかなり消費します。Apple のズーム可能な PDF の例のメモリ使用量を監視することもできます。

私の現在のプロジェクトでは、PDF ビューアーを開発してUIImageおり、別のスレッドでページをレンダリングして (ここでも問題です!)、縮尺が x1 のときに表示しています。CATiledLayerスケールが 1 を超えると、レンダリングが開始されます。iBooks は、ページをスクロールすると、鮮明なバージョンが表示される前に、ページの低解像度バージョンがわずか 1 秒未満で表示されるという、同様のダブル テイク アプローチを採用しています。

描画を開始する前にPDF画像がレイヤーをマスクする準備ができるように、ページの両側に2ページをフォーカスしてレンダリングします.ページは、フォーカスされたページから+2ページ離れたときに再び破棄されます。

Drawing PDFのパフォーマンス/メモリ処理を改善するために、どんなに小さくても明白であっても、誰かが何か洞察を持っていますか? またはここで議論されている他の問題はありますか?

編集:いくつかのヒント (クレジット - Luke Mcneice、VdesmedT、Matt Gallagher、Johann):

  • 可能な場合は、メディアをディスクに保存してください。

  • TiledLayers でレンダリングする場合は、より大きな tileSizes を使用してください

  • プレースホルダーオブジェクトを使用して頻繁に使用される配列を初期化します。代わりに、別の設計アプローチはこれです

  • 画像は、CGPDFPageRef

  • NSOperationsまたは GCD & Blocksを使用して、事前にページを準備します。

  • CGContextSetInterpolationQuality(ctx, kCGInterpolationHigh); CGContextSetRenderingIntent(ctx, kCGRenderingIntentDefault);beforeを呼び出しCGContextDrawPDFPageて、描画中のメモリ使用量を減らします

  • docRefNSOperationsで初期化するのは悪い考えです (メモリ)。docRef をシングルトンにラップします。

  • 不必要にキャンセルNSOperationsする 可能な場合、特にメモリを使用する場合は、コンテキストを開いたままにしないように注意してください。

  • ページ オブジェクトをリサイクルし、未使用のビューを破棄する

  • 開いているコンテキストが不要になったらすぐに閉じます

  • メモリ警告を受け取ったら、DocRef とすべてのページ キャッシュを解放してリロードします。

その他の PDF 機能:

ドキュメンテーション

サンプルプロジェクト

  • Apple/ ZoomingPDF - ズームUIScrollView、、CATiledLayer
  • vfr/ リーダー- ズーム、ページングUIScrollViewCATiledView
  • 眉/葉- 素敵なトランジションでのページング
  • / skim - 見た目のすべて (OSX 用の PDF リーダー/エディター)
0 投票する
2 に答える
2533 参照

ios - PDFKit 注釈の内容を入れ替える

注釈を削除したり、新しい注釈を作成したりせずに、注釈のテキスト(つまりcontents)をPDFKitで変更できますか?FreeText

次のスニペットは、で表示するときに注釈の内容を変更しませんPDFView

これは機能しますが、注釈を置き換える必要があります (したがって、注釈の他のすべての詳細をコピーする必要があります)。

注: 同じ注釈の追加/削除も役に立ちません。

0 投票する
1 に答える
1184 参照

ios - PDFKit / PDFView はフォーム注釈との相互作用を無効にします

ofをPDFDocument持つ注釈を含むの場合、それらの注釈に対するユーザー操作を無効にすることはできますか (つまり、チェックボックスをクリックしても切り替えられません)?widgetFieldTypePDFAnnotationWidgetSubtype.textPDFAnnotationWidgetSubtype.button

0 投票する
1 に答える
184 参照

ios - Apple PDFKit - 検証スクリプトを含む PDF の問題。

JavaScript を使用していくつかの検証が埋め込まれた一連の PDF ファイルがあります。日付や時刻の形式、さまざまなフィールドから計算された合計などの検証。

これらの PDF をテストしたところ、Mac Chrome ブラウザー、Windows Chrome ブラウザー、Windows Adob​​e Reader、iPad Adob​​e Reader で問題なく動作します。ただし、Apple PDFKit を使用して PDF をPDFView. 検証、フィールドのフォーマット、または iPad Adob​​e Reader アプリでのポップアップ検証エラーの発生は行われません。テスト目的で、この pdf をアプリケーションに保持し、そこから直接アクセスしています。

何かが間違っている場合に検証エラー/ポップアップが表示される iPad Adob​​e Reader アプリと同じ機能を取得することは可能ですか?