2017-08-24 143 views
1

我做在C#中的小應用程序,它的PDF文件轉換爲PDF/A使用的Adobe Acrobat SDK。將PDF轉換爲PDF/A從Adobe Acrobat Professional中XI/DC SDK

我用SaveAs JavaScript函數,包含在SDK中,這樣一來:

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 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(); 
     } 
} 
相關問題