Curl Global Community
PDFが正常に表示されないことをハンドリングするには - Printable Version

+- Curl Global Community (https://communities.curl.com)
+-- Forum: Discussions (https://communities.curl.com/forumdisplay.php?fid=1)
+--- Forum: General Curl questions (https://communities.curl.com/forumdisplay.php?fid=2)
+--- Thread: PDFが正常に表示されないことをハンドリングするには (/showthread.php?tid=1044)



PDFが正常に表示されないことをハンドリングするには - umemura - 02-28-2014

Curl で EmbeddedBrowserGraphic を利用して、
PDFなど、外部アプリケーションを利用するページを表示しようとした場合、
必要なランタイムがインストールされていないと、エラーになると思います。

これをCurl側で検知することは出来ますか。



RE: PDFが正常に表示されないことをハンドリングするには - umemura - 02-28-2014


EmbeddedBrowserEvent というイベントでハンドリングできるみたい。

Code:
{import * from CURL.GUI.EMBEDDED-BROWSER}
{define-proc public {proc-test
                        e:EmbeddedBrowserEvent,
                        ebg:EmbeddedBrowserGraphic
                    }:void
    {type-switch e
    case error:BrowseErrorEvent do
        {popup-message "正しくPDFが表示されてないので閉じる"}
    case finish:BrowseFinishEvent do
        {if finish.location-url.extension != ".pdf" then
            {popup-message "正しくPDFが表示されてないので閉じる"}
        }
    case doc-nfinish:DocumentFinishEvent do
        {if doc-nfinish.location-url.extension != ".pdf" then
            {popup-message "正しくPDFが表示されてないので閉じる"}
        }
    }
}
{def eb =
    {try
        {EmbeddedBrowserGraphic
            {on e:EmbeddedBrowserEvent at ebg:EmbeddedBrowserGraphic do
                {proc-test e, ebg}
            }
        }
    catch ex:Exception do
        null
    }
}
{VBox    eb,
    {CommandButton
        label = "pdfを表示",
        {on Action do
            def u = "http://www.contiriccardo.it/realtime.pdf"
            {eb.browse-url
                {parse-url u}
            }
        }
    }
}



RE: PDFが正常に表示されないことをハンドリングするには - wbardwell - 02-28-2014

EmbeddedBrowserGraphic is hosting the ActiveX control that is pretty much the same as Internet Explorer (It hosts "Shell.Explorer"). I would expect PDFs to display if they work in Internet Explorer on the same machine. But that means that a PDF displaying ActiveX must be installed. If your applet can run privileged, you could directly host a PDF displaying ActiveX using ActiveXGraphic.




RE: PDFが正常に表示されないことをハンドリングするには - umemura - 02-28-2014

Hi, wbardwell

I could not look up ClsId or PrgId of Adobe Reader. :'-(
Please tell me if you know those.



RE: PDFが正常に表示されないことをハンドリングするには - wbardwell - 03-04-2014

Any recent version can use AcroPDF.PDF or AcroPDF.PDF.1 as the ProgID for the PDF viewer.

See: http://livedocs.adobe.com/acrobat_sdk/9.1/Acrobat9_1_HTMLHelp/IAC_API_OLE_Objects.103.2.html

But if that is installed, EmbeddedBrowserGraphic should also work.




RE: PDFが正常に表示されないことをハンドリングするには - umemura - 03-06-2014

「PDF をブラウザに表示しない」という設定をすると、
Acrobat Reader がインストールされていても、
ActiveX オブジェクトの生成に失敗するようですね。

■PDFファイルをWebブラウザで開かないようにする
http://www.atmarkit.co.jp/fwin2k/win2ktips/545adobeweb/adobeweb.html

wbardwell さんに教えてもらったページのほかのプログラムIDも
このオプションがはずされ全部エラーになるので、
例外でハンドリングするしかなさそうですね。


Thank you for your infomation!

There is a propery which Acorbat Reader inhibit Browser from showing PDF in itself.
Initialize of ActiveXobject of "AcroPDF.PDF" is failed
if the option is false.

error is forrows

アプレット [9-412] - 'AcroPDF.PDF' から ActiveX オブジェクトを初期化することが出来ませんでした。CoCreateInstance() は失敗しました: 0x80040154 クラスが登録されていません
の為、例外ActiveXExceptionで停止
Win32XObj.xobj-connect - <デバッグ情報がありません>
Win32XObj.from-prog-id (constructor) - <デバッグ情報がありません>
Win32XObj.create (factory) - <デバッグ情報がありません>
ActiveXObject.default (factory) - <デバッグ情報がありません>
PDF表示.curl - [evaluator for <unnamed>][行番号: 199]
EvalTopLevelEnv.finish-and-run-aux - <デバッグ情報がありません>
EvalTopLevelEnv.finish-and-run - <デバッグ情報がありません>
IncrementalEvaluatorFile.evaluate-next - <デバッグ情報がありません>
IncrementalEvaluator.evaluate-next - <デバッグ情報がありません>
Applet.load-next-aux - <デバッグ情報がありません>
Applet.load-next - <デバッグ情報がありません>
[{proc} inside Applet.load-start] - <デバッグ情報がありません>
closure_raw_handler - <デバッグ情報がありません>
AlarmQueue.dispatch-alarms - <デバッグ情報がありません>
EventQueue.dispatch-events - <デバッグ情報がありません>
dispatch-events - <デバッグ情報がありません>
run-applet - <デバッグ情報がありません>
ProcessRunnable.run-bound-proc - <デバッグ情報がありません>




RE: PDFが正常に表示されないことをハンドリングするには - wbardwell - 03-17-2014

That error means that it couldn't find something with that class id, maybe you only have the 64-bit version installed, and the Curl RTE is 32bit. You could check what you find in regedit for that name.