将PDF转换为PDF/A从Adobe Acrobat Professional中XI/DC SDK
问题描述:
我做在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#中使用它们码。
答
对于那些有兴趣谁,我试图转换与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();
}
}
没有人经历过这个问题? – Speuline