태그 보관물: web-services

web-services

웹 서비스에서 HTML 문서를 어떻게 인쇄합니까? 환경에서 제대로 작동하지 않으며 보안 제약이

C # 웹 서비스에서 HTML을 인쇄하고 싶습니다. 웹 브라우저 제어는 과도하고 서비스 환경에서 제대로 작동하지 않으며 보안 제약이 매우 엄격한 시스템에서도 제대로 작동하지 않습니다. .NET기본 HTML 페이지 인쇄를 지원하는 무료 라이브러리가 있습니까? 지금까지 가지고있는 코드가 제대로 실행되지 않습니다.

public void PrintThing(string document)
{
    if (Thread.CurrentThread.GetApartmentState() != ApartmentState.STA)
    {
        Thread thread =
            new Thread((ThreadStart) delegate { PrintDocument(document); });
        thread.SetApartmentState(ApartmentState.STA);
        thread.Start();
    }
    else
    {
        PrintDocument(document);
    }
}

protected void PrintDocument(string document)
{
    WebBrowser browser = new WebBrowser();
    browser.DocumentText = document;
    while (browser.ReadyState != WebBrowserReadyState.Complete)
    {
        Application.DoEvents();
    }
    browser.Print();
}

UI 유형 스레드에서 호출하면 제대로 작동하지만 서비스 유형 스레드에서 호출되면 아무 일도 일어나지 않습니다. 변경 Print()ShowPrintPreviewDialog()수율 다음 IE 스크립트 오류 :

오류 : dialogArguments.___IE_PrintType null이거나 개체가 아닙니다.

URL : res://ieframe.dll/preview.dlg

그리고 작은 빈 인쇄 미리보기 대화 상자가 나타납니다.



답변

다음을 사용하여 명령 줄에서 인쇄 할 수 있습니다.

rundll32.exe % WINDIR % \ System32 \ mshtml.dll, PrintHTML “% 1”

여기서 % 1은 인쇄 할 HTML 파일의 파일 경로입니다.

메모리에서 인쇄 할 필요가 없거나 임시 파일의 디스크에 쓸 여유가있는 경우 다음을 사용할 수 있습니다.

using (Process printProcess = new Process())
{
    string systemPath = Environment.GetFolderPath(Environment.SpecialFolder.System);
    printProcess.StartInfo.FileName = systemPath + @"\rundll32.exe";
    printProcess.StartInfo.Arguments = systemPath + @"\mshtml.dll,PrintHTML """ + fileToPrint + @"""";
    printProcess.Start();
}

NB 이것은 Windows 2000 이상에서만 작동한다고 생각합니다.


답변

Visual Studio 자체 (최소한 2003 버전에서는)가 IE dll을 직접 참조하여 “디자인 뷰”를 렌더링한다는 것을 알고 있습니다.

그것을 살펴볼 가치가 있습니다.

그렇지 않으면 웹 브라우저 제어 외에는 아무것도 생각할 수 없습니다.


답변

쉬운! 문제를 더 간단한 두 부분으로 나눕니다.

  1. HTML을 PDF로 렌더링
  2. PDF 인쇄 ( SumatraPDF )
  • -print-to-default $file.pdf 기본 프린터에서 PDF 파일을 인쇄합니다.
  • -print-to $printer_name $file.pdf 주어진 프린터에서 PDF를 인쇄합니다.


답변

예산 (~ $ 3000)에있는 경우 PrinceXML을 확인하십시오 .

HTML을 PDF로 렌더링하고 서비스 환경에서 잘 작동하며 테이블 셀 중간에서 페이지를 분할하지 않는 것과 같은 고급 기능을 지원합니다 (현재 많은 브라우저에서 지원하지 않음).


답변

아마도 이것이 도움이 될 것입니다. http://www.codeproject.com/KB/printing/printhml.aspx
또한 브라우저 컨트롤에 액세스하려는 스레드가 무엇인지 확실하지 않지만 STA 여야합니다.

주-링크에서 참조 된 프로젝트를 사용하면 인쇄 대화 상자를 표시하지 않고 페이지로 이동하여 인쇄를 수행 할 수 있습니다.


답변

저에게 잘 맞는 도구는 HiQPdf입니다. https://www.hiqpdf.com/

가격은 합리적이며 ($ 245부터 시작) HTML을 PDF로 렌더링하고 PDF 파일의 인쇄를 직접 관리 할 수도 있습니다.


답변

특정 도구는 모르지만 클릭을 기록 / 재생하는 유틸리티가 있습니다. 즉, 인쇄 대화 상자에서 “클릭”을 자동화 할 수 있습니다. (나는 이것이 해킹이라는 것을 알고 있지만 다른 모든 것이 실패하면 …)