[英]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.