AIRでAcrobat Readerのpathを取得して印刷する方法を紹介します。工程は3ステップあります。
- C#でAcrobat Readerの取得する
- AIRから1のプログラムを実行しpathを受けとる
- PDFを印刷する
1. C#でAcrobat Readerの取得する
AIRではpathの取得ができないのでC#でpathを取得するプログラムを作ります。WindowsのバージョンによってAcrobat Readerのインストール先が違うためレジストリからインストールpathを取得します。
このプロジェクトファイルはGitHubにアップしておきました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
using Microsoft.Win32; using System; using System.Collections.Generic; using System.Threading.Tasks; namespace PortableDevices { class Program { static void Main(string[] args) { var adobe = Registry.LocalMachine.OpenSubKey("Software").OpenSubKey("Microsoft").OpenSubKey("Windows").OpenSubKey("CurrentVersion").OpenSubKey("App Paths").OpenSubKey("AcroRd32.exe"); var path = adobe.GetValue(""); Console.WriteLine(path); } } } |
2. AIRから1のプログラムを実行しpathを受けとる
1で作成したGetAcrobatPath.exeを実行するAIRプログラムです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
public var PDF_PATH = ""; private function GetAcrobatPath():void { var str:String = ""; var info:NativeProcessStartupInfo = new NativeProcessStartupInfo(); var exeFile:File = new File(File.applicationDirectory.resolvePath("./GetAcrobatPath/GetAcrobatPath.exe").nativePath); var arguments1:Vector.<String> = new Vector.<String>(); info.executable = exeFile; var processPdf:NativeProcess = new NativeProcess(); processPdf.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, GetAcrobatPathOutputData); processPdf.start(info); function GetAcrobatPathOutputData (event:ProgressEvent):void { var path:String = processPdf.standardOutput.readUTFBytes(processPdf.standardOutput.bytesAvailable); var arr:Array = new Array(); if( path != "" ){ arr = path.split("\r"); if(arr.length > 0){ PDF_PATH = arr[0]; trace("AcrobatPath: " + PDF_PATH); }else{ trace("AcrobatPath: ERROR 1001"); } }else{ trace("AcrobatPath: ERROR 1002"); } } } |
3. AIRでPDFを印刷する
コマンドプロンプトからAcrobat Readerを使ったPDF印刷のコマンドを実行します。このコマンドは以前紹介したコマンドを使っています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
private var cmdFile:File = new File("C:\\Windows\\System32\\cmd.exe"); private function PrintContents(pdfName:String){ if(PDF_PATH != ""){ nativeProcessStartupInfo.executable = cmdFile; var processArgs:Vector.<String> = new Vector.<String>(); processArgs.push("/c"); processArgs.push(PDF_PATH); processArgs.push("/s"); processArgs.push("/p"); processArgs.push("/l"); processArgs.push("/h"); processArgs.push("test.pdf"); nativeProcessStartupInfo.arguments = processArgs; var process:NativeProcess = new NativeProcess(); process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA,PrintError); process.start(nativeProcessStartupInfo); }else{ trace("PrintError: PDF_PATH is null."); } } private function PrintError(p:ProgressEvent){ trace("PrintError"); } |
コメントを残す