2012-04-16 8 views
4

내 프로젝트에서 HTML에서 PDF 파일을 생성하기 위해 WkHtmlToXSharp 래퍼 라이브러리를 사용하고 있습니다.WkHtmlToXSharp - System.AccessViolationException

갑자기, 나는 다음과 같은 문제를 건너 왔어요, 다른 PC에이 라이브러리에게 시간을 많이 사용했다 :

System.AccessViolationException을 : 보호 된 메모리를 읽거나 쓰려고했습니다. 이것은 종종 다른 메모리가 손상되었다는 표시입니다. WkHtmlToXSharp.WkHtmlToPdfConverter.wkhtmltopdf_convert (IntPtr 변환기) 에서 WkHtmlToXSharp.WkHtmlToPdfConverter. 변환 된 IAsyncResult Sanford.Threading.DelegateQueue.EndInvoke에서 WkHtmlToXSharp.MultiplexingConverter.b _8에서 WkHtmlToXSharp.WkHtmlToPdfConverter.Convert() 에서 (문자열 inputHtml) () 내부 예외 스택 추적 --- 끝 --- (Sanford.Threading.DelegateQueue.Invoke (위임 방법의 결과) 는 WkHtmlToXSharp.MultiplexingConverter.Convert()에서 ) [] 인수 개체이이 라이브러리 일반적인 문제가 될 것으로 보인다

(내가 찾은 일부 웹에 대한 피드백 - 그러나 아무런 수정도 제공되지 않았습니다). BTW, 내 경우에는 다소 임의적으로 발생합니다. 다른 dev 컴퓨터에서이 문제가 발생하지 않았습니다. 나는 누군가가 그것에 대한 해결책을 가지고 있는지 궁금해. 또한 WkHtmlToPDF 라이브러리 자체가있는 경우 이것이 랩퍼 라이브러리의 문제점인지 궁금합니다.

의견이 있으십니까? 나는 자유롭고 안정적이고 가능하다면 새로운 프로세스를 생성하지 않고 다른 변환기를 사용할 수있다. 모든 Windows 버전에서 제대로 작동하고 안정적이어야하며 괜찮은 작업을 변환해야합니다 (변환 할 HTML이 고정되어 있으며 몇 개의 사진과 표 및 기본 CSS가 포함되어 있음).

답변

3

대체 라우트를 제안합니다. 직접 wkhtmltopdf.exe를 사용하여 직접 래퍼를 작성하십시오. 입력을 제어하고이를 업데이트하는 방법과 옵션의 작동 방식을 정확히 알고 있다면 매우 복잡하지 않습니다. wkhtmltopdf (Win7, Win server 2008 r2, Ubuntu 및 CentOS)를 직접 사용할 때이 문제가 발생하지 않았습니다. 그들은 모든 전환을 위해 프로세스를 생성합니다.

예를 들어 wkhtmltopdf와 관련하여 Derp class in another answer of mine을 확인하십시오. 또는 아래의 테스트되지 않은 코드와 같은 것을 시도해보십시오 (실제 코드는 더 복잡 할 것입니다, 이것은 단지 데모/POC입니다).

var pi = new ProcessStartInfo(@"c:\wkhtmltopdf\wkhtmltopdf.exe"); 
pi.CreateNoWindow = true; 
pi.UseShellExecute = false; 
pi.WorkingDirectory = @"c:\wkhtmltopdf\"; 
pi.Arguments = "http://www.google.com gogl.pdf"; 

using (var process = Process.Start(pi)) 
{ 
    process.WaitForExit(99999); 
    Debug.WriteLine(process.ExitCode); 
} 
+0

사실 나는 그런 식으로 그렇게 끝내게되었습니다. 그건 내가 어쨌든 정답이 될 것이라고 믿었던 것이다. WkHtmlToPdf/WkHtmlToXSharp –

+0

@Nenotlep에 대한 예술의 현재 상태에 대해서는, wkhtmltopdf.exe를 직접 사용하는 것이 절대적으로 쉽지만, 동시 요청의 엄청난 양은 내 시스템이 정지 상태입니다. 백그라운드에서이 실행을 호출 할 수있는 방법이 있습니까? – user3163213

+0

@ user3163213이 문제가 발생하면 대기열 시스템을 구축 할 것입니다. 즉, 브라우저를 통해 사용자에게 직접 PDF를 전달하는 경우 이메일을 첨부하거나 전자 메일을 통해 링크를 보내는 등의 방법을 찾아 대안을 찾아야합니다. – Nenotlep

관련 문제