Forge DevCon Japan の会場で、何名かの方から、Forge Viewer での PDF ファイルの表示についてご質問を受けました。Model Derivative API でも PDF ファイルを変換すること出来るので、Base64 エンコードされた SVF への URN があれば、Forge Viewer で表示させることが出来ます。
PDF 図面を表示するコードは、Forge Viewer:2D シート/レイアウト の記事でご紹介したものを流用することが可能です。ただし、いくつか注意しなければならない点があります。
- 表示される PDF ファイルは、すべてラスター データとして表示されるため、拡大率に限度があるほか、図面上のジオメトリを選択することは出来ません。
- PDF ファイルが複数ページで構成されていても、Forge Viewer で表示出来るのは、1 ページ単位です。
- PDF ファイル表示時には、viewable の配列にページの名前と ''INITIAL' という名前が対で格納されてきます。このため、ユーザ インタフェースで一覧を作成するような場合は、'INITIAL' を除外してコントロールに名前をに登録する必要があります。
- Model Derivative API で 3D PDF ファイルを SVF 変換することは出来ますが、変換されて表示出来るのは、2D の情報のみです。3D コンテンツを表示して操作することは出来ません。
この方法では、Microsoft Word や PowerPoint などから作成した 設計図書などの PDF ファイル コンテンツも表示させることが出来ます。
PDF ファイルのコンテンツをベクトル データとして表示することも可能です。ただし、この方法をサポートしているのは、Viewer3D.LoadModel メソッドを利用した場合のみです。
_viewer = new Autodesk.Viewing.GuiViewer3D(document.getElementById('viewer2d'));
startedCode = _viewer.start();
if (startedCode > 0) {
console.error('Failed to create a Viewer: WebGL not supported.');
return;
}
_viewer.loadExtension('Autodesk.PDF').then(function () {
_viewer.loadModel('https://developer.api.autodesk.com/derivativeservice/v2/derivatives/urn:adsk.viewing:fs.file:~~~/page.pdf');
});
ベクトル データを表示するために利用するのが、Autodesk.PDF Extenson です。複数ページの場合、ページ毎に viewable が生成されるので、SVF 変換した際のマニフェストから、表示すべきページの "resource" 情報をパースして取得してください。次の例は、PDF ファイル 5 ページ目の URN です。LoadModel メソッドには、この URN の前に "https://developer.api.autodesk.com/derivativeservice/v2/derivatives/" を追加してください。
{
"guid": "8de2115a-c15d-40c7-a588-9e4efaf97d2f",
"type": "resource",
"urn": "urn:adsk.viewing:fs.file:dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6ZnBkLWphcGFuLWF2cGc1ZmdyaDVxYnBvOGhrMTVsc3p6ZzhkcmZrbnJvdXdtd2QwcDhsbXNlMzJwN29qb3h6NXB6b251dGktN2cvOHRoJTIwZmxvb3IucGRm/output/5/page.pdf",
"role": "pdf-page",
"mime": "application/octec-stream"
},
ベクトル データで PDF ページを表示した場合には、ジオメトリを選択することが出来るようになります。もちろんプロパティは含まれません。なお、[T] ボタンをクリックすると、文字のジオメトリを選択してクリップボードにテキストをコピー出来ますので、後でコピーしたテキストを再利用するようなことが出来ます。
また、ベクトル データで PDF ページを表示した場合のみ、図面の背景色を変更することが可能です。Viewer3D.setSwapBlackAndWhite() で変更することも出来ます。
ベクトル データでの PDF ページ表示時には、ラスター データ表示に比べて若干タイムラグがあるのも事実です。PDF ファイルの閲覧では、いまのところ、ラスター データとしての表示が現実的かもしれません。
By Toshiaki Isezaki
コメント
コメントフィードを購読すればディスカッションを追いかけることができます。