簡體   English   中英

從Adobe Acrobat Professional XI / DC SDK將Pdf轉換為Pdf / A

[英]Convert Pdf to Pdf/A from Adobe Acrobat Professional XI/DC SDK

我已經用C#制作了一個小應用程序,可使用Adobe Acrobat SDK將PDF文件轉換為PDF / A。

我通過以下方式使用了SDK中包含的SaveAs JavaScript函數:

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 )。

你知道我在那里可以做什么嗎?

如果“ SaveAs”方法是NoGo,則聽說過預檢,但是我不知道如何從C#代碼中使用它們。

對於有興趣的人,我嘗試使用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();
        }
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM