문제

내가 원하는 상황이 있습니다 RTF를 변환하십시오 문서 이미지에 보관 및 인쇄 용. .NET을 사용하고 있습니다.
이 전환에 도움이 될 수있는 라이브러리가 있습니까?

필요합니다

  • RTF를 서버에서 이미지로 변환하십시오
  • 이미지를 만들 때 준수 해야하는 종이 크기를 설정하십시오.

상용 라이브러리는 옵션이지만 OS를 선호합니다. 클라이언트 측면 방법이 있다면 유효한 답변이지만 서버 측도 매우 좋을 것입니다.

편집하다:

모든 위대한 답변에 감사드립니다. 그들 모두는 RTF 문서를 인쇄하는 것이 포함되므로 후속 질문이 있습니다.

  • 서버에서 RTF 문서를 인쇄하는 가장 좋은 방법은 무엇입니까?
도움이 되었습니까?

해결책

내 권장 사항은 이미지에 덤프하는 인쇄 드라이버를 갖는 것이 좋습니다.이 방법으로 표준 인쇄 기능 (종이 크기 포함)을 사용한 다음 파일을 잡고 실제 인쇄 또는 보관에 사용할 수 있습니다.

무료 및 오픈 소스 버전은 다음과 같습니다. 가상 이미지 프린터 드라이버

다른 팁

나는 최근에 이것을 다루어야했다. 우리의 응용 프로그램을 사용하면 사용자가 표준 컨트롤 (Visual Studio와 함께 제공)에서 일부 RTF를 편집 한 다음 이미지로 변환하여 RTF를 이해하지 못하는 다른 응용 프로그램으로 보낼 수 있습니다.

나는 온라인에서 꽤 열심히 보였고 그것은 유일한 가능성이 컨트롤의 스크린 샷을 가져 와서 이미지로 변환하는 것인 것처럼 보였다. 볼 수있는 영역 외부에 있던 텍스트 (예 : 스크롤 해야하는 텍스트)는 나타나지 않습니다. 그렇게 해킹 당해야한다는 사실에 놀랐습니다.

나는 당신이 상용 라이브러리에 대해 물었지만 내장 컨트롤에 대한 나의 경험을 알려줄 것이라고 생각했습니다.

Robert의 답변을 확장하면 필요한 경우 운영 체제와 함께 제공되는 "표준"프린터를 선택하고 파일에 인쇄하여 표준 프린트 드라이버를 다운로드하지 않을 수 있습니다. 많은 드라이버가 표준 버전의 PostScript를 사용하여 정의하고 있습니다. 필요한 경우 PostScript 파일을 PDF 파일로 변환하는 것은 일반적으로 매우 쉽습니다. 인쇄하는 것도 일반적으로 쉽습니다.

이 솔루션은 이미지를 출력하는 특수 드라이버를 사용하는 것보다 약간 더 많은 작업입니다.

코드 스 니펫을 따라 RichTextBox의 사진을 캡처 할 수있었습니다. 나는 그것이 당신의 사용일지도 모른다고 생각합니다.

private void ShowBitmap_btn_Click(object sender, RoutedEventArgs e)
    {
        if (MyTextBox_txt == null)
            return;

        Rect _descendentBounds = VisualTreeHelper.GetDescendantBounds(MyTextBox_txt);
        //RenderTargetBitmap _targetBitmap = new RenderTargetBitmap((Int32)_descendentBounds.Width, 
        //                                                          (Int32)_descendentBounds.Height, 
        //                                                          96, 96, PixelFormats.Pbgra32);

        Rect _tempRect = new Rect(System.Windows.Forms.Screen.PrimaryScreen.Bounds.X,
                                    System.Windows.Forms.Screen.PrimaryScreen.Bounds.Y,
                                    System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width,
                                    System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height);
        RenderTargetBitmap _targetBitmap = new RenderTargetBitmap((Int32)_tempRect.Width,
                                                                            (Int32)_tempRect.Height,
                                                                                96, 96, PixelFormats.Pbgra32);

        DrawingVisual _drawingVisual = new DrawingVisual();

        using (DrawingContext _drwaingContext = _drawingVisual.RenderOpen())
        {
            VisualBrush _visualBrush = new VisualBrush(MyTextBox_txt);
            _drwaingContext.DrawRectangle(_visualBrush, null, new Rect(new Point(), _tempRect.Size));
        }

        _targetBitmap.Render(_drawingVisual);

        PngBitmapEncoder _png = new PngBitmapEncoder();

        _png.Frames.Add(BitmapFrame.Create(_targetBitmap));
        Stream _fileStream;
        _fileStream = File.Create(@"E:\sample1.png");

        _png.Save(_fileStream);

        System.Drawing.Bitmap _tempBitmap = new System.Drawing.Bitmap(_fileStream);
        _tempBitmap.Save(@"E:\sample1.bmp");

        _fileStream.Close();
        _fileStream.Dispose();

    }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top