2009-11-13 7 views
2

GhostScript DLL을 사용하여 PDF를 PDF/A로 변환하는 방법. 나는 종류가 gsapi_init_with_args 인 gsdll32.dll의 내 보낸 함수를 호출해야한다고 알고 있지만 올바른 인수를 전달하는 방법은 무엇입니까? BTW, 나는 C#을 사용하고 있습니다.Ghostscript DLL을 사용하여 PDF/A로 변환하는 방법

답변

3

pls이 명령 줄에서 실행하여 필요한 작업을 수행하는지 테스트하십시오.

gswin32.exe -dPDFA -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=PDFA.pdf 1.pdf 

A Simple C# Wrapper for Ghostscript

+0

안녕하세요, 지금 gsdll32.dll을 사용하고 있으므로 gswin32.exe를 사용할 수 없습니다. 나는 gsapi_init_with_args를 호출해야한다. GhostScript 웹 사이트에서 다음과 같은 내용이 있습니다.gs -dPDFA -dBATCH -dNOPAUSE -dNOOUTERSAVE -dUseCIEColor -sDEVICE = pdfwrite -sOutputFile = out-x3.pdf PDFA_def.ps input.pdf gsapi_init_with_args와 함께 인수를 사용할 때 결과 PDF가 올바르지 않으면 어떤 표준에도 부합하지 않는다고보고합니다. 그래서 까다 롭습니다. 누구든지 도움을받을 수 있습니다. – imgen

+0

실제로 까다로울 필요는 없습니다. gswin32.exe에 대한 명령 줄을 제공하여 -dPDFA와 나머지 스위치가 잘 작동하는지 확인하고 설치시 gswin32.exe를 설치해야합니다. 승리를 위해 고스트 스크립트를 사용하고 있습니다. 내가 당신에게 준 라인을 실행하면 효과가 있는지 확인할 수 있습니다. 명령을 실행하면 명령이 작동하여 gsapi_init_with_args 호출로 변환 할 수 있습니다. –

0

사용자 환경에 맞게 사용자 PDFA_def.ps을 변경하여 검사 도구를 신고합니까 표준에서 정확한 무엇 편차 ... 당신은해야 할 수도 있습니다에 따라 달라집니다 (당신은 동적으로 쓰기를 다시해야 할 수도 새로운 PDF/A 변환마다 파일). 그것은 짧은 파일이며 잘 주석 처리되었습니다. 첫째

 
gswin32c.exe^
    -Ic:/path/to/gsinstalldir/lib^
    -dPDFA^
    -dBATCH^
    -dNOPAUSE^
    -dUseCIEColor^
    -sDEVICE=pdfwrite^
    -sOutputFile=output-PDFA.pdf^
    PDFA_def.gs^
    input.pdf 

또는

 
gswin32c.exe^
    -Ic:/path/to/gsinstalldir/lib^
    -dPDFA^
    -dBATCH^
    -dNOPAUSE^
    -dUseCIEColor^
    -sDEVICE=pdfwrite^
    -sOutputFile=output-PDFA.pdf^
    c:/path/to/customized/PDFA_def.gs^
    input.pdf 

테스트 커맨드 :/경로 /로/gsinstalldir/lib에와 명령 줄 서지에 PDFA_def.ps의 직접 호출 제안 :

봅니다 -ic를 추가 , 서지가 추천 한대로하십시오.

1

나는 그것을 사용하여 작업 했어 ghostscriptsharp에서 다음

  • "-sDEVICE =으로, pdfwrite"
  • "-dPDFA :

    [DllImport("gsdll32.dll", EntryPoint = "gsapi_new_instance")] 
    private static extern int CreateAPIInstance(out IntPtr pinstance, IntPtr caller_handle); 
    
    [DllImport("gsdll32.dll", EntryPoint = "gsapi_init_with_args")] 
    private static extern int InitAPI(IntPtr instance, int argc, string[] argv); 
    
    [DllImport("gsdll32.dll", EntryPoint = "gsapi_exit")] 
    private static extern int ExitAPI(IntPtr instance); 
    
    [DllImport("gsdll32.dll", EntryPoint = "gsapi_delete_instance")] 
    private static extern void DeleteAPIInstance(IntPtr instance); 
    
        private static void CallAPI(string[] args) 
        { 
         IntPtr gsInstancePtr; 
         lock (resourceLock) 
         { 
          CreateAPIInstance(out gsInstancePtr, IntPtr.Zero); 
          try 
          { 
           int result = InitAPI(gsInstancePtr, args.Length, args); 
    
           if (result < 0) 
           { 
            throw new ExternalException("Ghostscript conversion error", result); 
           } 
          } 
          finally 
          { 
           Cleanup(gsInstancePtr); 
          } 
         } 
        } 
    
        private static object resourceLock = new object(); 
    
        private static void Cleanup(IntPtr gsInstancePtr) 
        { 
         ExitAPI(gsInstancePtr); 
         DeleteAPIInstance(gsInstancePtr); 
        } 
    

    args 같은 문자열의 배열이됩니다 "

  • ...