2017-08-24 21 views
1

私はC#でAdobe Acrobat SDKを使用してPDFファイルをPDF/Aに変換する小さなアプリケーションを作成しました。私はSaveAs JavaScriptの機能、SDK、このように含まれて使用されてきたAdob​​e Acrobat Professional XI/DC SDKからPdf/Aへの変換

var pdfDocument = new AcroPDDoc(); 
pdfDocument.Open(fileInfo.FullName); 
object pdfJavascriptObject = pdfDocument.GetJSObject(); 
Type jsType = pdfJavascriptObject.GetType(); 

// FinalExtension is either jpg or pdf (depends of convId) 
var outputFileName = fileInfo.Name.Replace(fileInfo.Extension, "." + finalExtension); 
var finalFullName = Path.Combine(outputFolderPath, outputFileName); 

// AdobeConvId is either com.callas.preflight.pdfa either com.adobe.acrobat.jpeg 
object[] saveAsParam = { finalFullName, adobeConvId, string.Empty, false, false }; 
// Use Javascript Object SaveAs Method 
jsType.InvokeMember(StringConstants.AcrobatSaveAsMethod 
         , BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance 
         , null 
         , pdfJavascriptObject 
         , saveAsParam 
         , CultureInfo.InvariantCulture); 
pdfDocument.Close(); 

それは、Adobe Acrobat ProfessionalのXでうまくいきましたが、今私は、Adobe Acrobat ProfessionalのXI/DCを使用する必要があります。 SDKのDLLをアップグレードしましたが、機能しません。

変換する文書がたくさんあり、プロセスが終了しないように点滅する「進行」メッセージがあります。

しかし、このコードはJPGファイル(同じコードはconvIdを変更するだけです)に変換すると正常に動作します。

あなたは、私がそこから何ができるか知っていますか?...

「名前を付けて保存」メソッドがNoGo判定された場合、私はpreflightsを聞いたが、私は、C#からそれらを使用する方法がわかりませんコード。

+0

以前にこの問題が発生したことはありませんか? – Speuline

答えて

0

興味のある方は、Adobe Acrobat Pro DC(アプリケーションではなく、SDK)でpdfを変換しようとしましたが、問題はありましたが、文書内の矛盾に関する警告メッセージがありました。

私の理解では、SDKはこのメッセージを処理できません。 その結果、プロセスは固執したままになり、手動で終了する必要があります。 Acrobat XIとDC SDKには同じ問題があり、Acrobat Xは問題なく動作しました。

私はここで共有する回避策をとった(簡略版)、おそらくそれは悪い習慣であるかもしれません、多分私の目的を達成するための他の簡単な方法がありますが、これは機能します。

public void ConvertPdfFiles(List<FileInfo> inputFileInfos, string outputFolderPath, string adobeConvId, string finalExtension) 
{ 
     foreach (var fileInfo in inputFileInfos) 
     { 
      var pdfDocument = new AcroPDDoc(); 
      pdfDocument.Open(fileInfo.FullName); 
      object pdfJavascriptObject = pdfDocument.GetJSObject(); 
      Type jsType = pdfJavascriptObject.GetType(); 
      var outputFileName = fileInfo.Name.Replace(fileInfo.Extension, "." + finalExtension); 
      var finalFullName = Path.Combine(outputFolderPath, outputFileName); 

      Task task = Task.Factory.StartNew(() => 
      { 
       try 
       { 
        object[] saveAsParam = { finalFullName, adobeConvId }; 
        jsType.InvokeMember(StringConstants.AcrobatSaveAsMethod 
             , BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance 
             , null 
             , pdfJavascriptObject 
             , saveAsParam); 
       } 
       catch (TargetInvocationException) 
       { 
        // This exception is thrown everytime we kill the process 
       } 

      }); 

      var fileOutputInfo = new FileInfo(finalFullName); 
      // we wait for the process to create the file. 
      while (!fileOutputInfo.Exists || fileOutputInfo.Length == 0) 
      { 
       task.Wait(100); 
       fileOutputInfo.Refresh(); 
      } 
      // Once the file is created we kill the process Acrobat 
      pdfDocument.Close(); 
      KillAcrobatProcess(); 
     } 
} 
関連する問題