【開発環境】
OS:Windows Server 2003
開発環境:VisualStudio2005 TeamEdition(SP1)
実行環境:Adobe Acrobat 8 Professional(8.1.2)
AcrobatのPlug-in(プラグイン)内から、AcrobatSDKのAPIを使用して、開いているPDFのファイル名を取得する方法に関するメモです。
ファイルを指定してPDFを操作する場合は、ユーザーがダイアログからファイルを指定してくれるので簡単なんですが。
既に開いているPDFファイルをAVDocを使って操作する場合のやり方はなかなか分かりませんでした。。。
結論としては、以下のようにASFileを介する事で、ファイル名を取得する事が出来ます。
/* 開いているPDFファイルのパス及びファイル名を取得 */
AVDoc avDoc;
PDDoc pdDoc = NULL;
ASFile asFile;
ASPathName volatile pathName = NULL;
char *tex = NULL;
avDoc = AVAppGetActiveDoc();
pdDoc = AVDocGetPDDoc (avDoc);
asFile = PDDocGetFile (pdDoc);
pathName = ASFileAcquirePathName (asFile);
ASText pdfFileName = ASTextNew();
ASFileSysDisplayASTextFromPath(ASGetDefaultUnicodeFileSys(), pathName, pdfFileName);
/* texにパス及びファイル名を格納したバッファのポインタを格納 */
tex = (char *)ASTextGetScriptText(pdfFileName, kASEUnicodeScript);
↓からは、過程で確認した内容です。
Acrobat本体のexeのパスを取得したい場合は以下のようにします。
/* Acrobatのexeのパスを取得 */
char Path[MAX_PATH];
memset(Path, 0, MAX_PATH);
GetModuleFileName(NULL, Path, MAX_PATH);
Plug-inの名前を取得したい場合は以下のようにします。
/* Plug-inの名前を取得 */
char Path[MAX_PATH];
memset(Path, 0, MAX_PATH);
ASExtensionGetFileName((ASExtension)gExtensionID, Path, MAX_PATH);
PDFファイル内に格納されている、XMP情報を気軽に取得するには以下のようにします。
/* XMPの情報を取得 */
char XMPName[MAX_PATH];
int xmp_len = 0;
/* ↓の"Title"の部分を変更すれば他の情報も取得可能 */
if((xmp_len = PDDocGetInfo(pdDoc, "Title", XMPName, MAX_PATH)) )
{
/* 全角の文字列が入っている場合には以下の処理が必要 */
char XMPName2[MAX_PATH];
memset(XMPName2, 0, MAX_PATH);
int xmp_len2 = PDXlateToHostEx(XMPName, xmp_len, XMPName2, MAX_PATH);
XMPName2[xmp_len2] = '\0';
}
・Adobe Extensible Metadata Platform(XMP)
<
http://www.adobe.com/jp/enterprise/xmp.html>
WindowsAPIでパスのみ取得できます。
AcrobatのPlug-inのカレントディレクトリはファイル依存のようです。
char dic[MAX_PATH];
memset(dic, 0, MAX_PATH);
GetCurrentDirectory(MAX_PATH, (LPTSTR )dic);