2017-12-18 32 views
0

WPF 응용 프로그램에서 일부 데이터를 나타 내기 위해 DataGrid를 사용하고 있습니다. PDFSharp를 사용하여 PDF로 DataGrid가있는 특정 WPF 창을 저장하는 기능에서 저장된 PDF를 작은보기 비율로 볼 때 DataGrid GridLines가 표시되지 않는 문제에 직면하고 있습니다. (첨부 된 이미지를 참조 PDF보기가 1백39%로 설정되었을 때만, 격자 눈금이 표시된다. 그러나, 작은 시야 %, 일부 그리드 선을 생략하자.)PDF로 저장하면 WPF DataGrid GridLines가 표시되지 않습니다.

  1. 66.7%
  2. 75%
  3. 여기

100%

  • 139%
  • 는 PDF 저장 코드입니다 : -

    ,536,913,632 10
    MemoryStream lMemoryStream = new MemoryStream(); 
    Package package = Package.Open(lMemoryStream, FileMode.Create); 
    var doc = new System.Windows.Xps.Packaging.XpsDocument(package); 
    XpsDocumentWriter writer = System.Windows.Xps.Packaging.XpsDocument.CreateXpsDocumentWriter(doc); 
    
    VisualBrush sourceBrush = new VisualBrush(this); 
    DrawingVisual drawingVisual = new DrawingVisual(); 
    
    using (var drawingContext = drawingVisual.RenderOpen()) 
    { 
        drawingContext.DrawRectangle(sourceBrush, null, new Rect(new Point(0, 0), new Point(this.ActualWidth, this.ActualHeight))); 
    } 
    
    writer.Write(drawingVisual); 
    doc.Close(); 
    package.Close(); 
    
    var pdfXpsDoc = PdfSharp.Xps.XpsModel.XpsDocument.Open(lMemoryStream); 
    XpsConverter.Convert(pdfXpsDoc, sFileName, 0); 
    

    저는 시각적으로 그려지는 품질과 관련이 있다고 생각합니다. 그런 다음 DrawImage를 사용하여 시각적으로 더 높은 해상도로 만드는이 스 니펫을 시도했습니다. 여기에 코드 조각입니다 : -이 조각은 그리드 라인대로 작동

    MemoryStream lMemoryStream = new MemoryStream(); 
    Package package = Package.Open(lMemoryStream, FileMode.Create); 
    var doc = new System.Windows.Xps.Packaging.XpsDocument(package); 
    XpsDocumentWriter writer = System.Windows.Xps.Packaging.XpsDocument.CreateXpsDocumentWriter(doc); 
    
    double dpiScale = 600.0/96.0; 
    var renderBitmap = new RenderTargetBitmap(Convert.ToInt32(this.Width * dpiScale), 
             Convert.ToInt32(this.Height * dpiScale), 
             600.0, 
             600.0, 
             PixelFormats.Pbgra32); 
    renderBitmap.Render(this); 
    var visual = new DrawingVisual(); 
    using (var dc = visual.RenderOpen()) 
    { 
        dc.DrawImage(renderBitmap, new Rect(0, 0, this.Width, this.Height)); 
    }     
    
    writer.Write(visual); 
    doc.Close(); 
    package.Close(); 
    
    var pdfXpsDoc = PdfSharp.Xps.XpsModel.XpsDocument.Open(lMemoryStream); 
    XpsConverter.Convert(pdfXpsDoc, _pdfFileName, 0); 
    

    는 더 작은보기 백분율로 볼 수 있습니다하지만 내 응용 프로그램이 PDF 저장 작업에 붙어 있으며이 메시지와 함께 "부족 System.OutofMemoryException를 throw합니다 메모리를 사용하여 프로그램 실행을 계속할 수 있습니다. " 그러나 응용 프로그램이 충돌하지 않습니다.

    PDF 뷰어의 동작을 확인하기 위해 MS Word에서 여러 행과 열이있는 테이블을 생성하여 PDF로 저장했습니다. 이 경우 테이블 그리드 선은 작은보기 비율에서도 명확하게 볼 수 있습니다.

    아무도 도와 줄 수 있습니까?

    답변

    0

    첫 번째 코드 스 니펫이 벡터 형식으로 테이블을 만드는 것으로 가정합니다 (사용자가이를 확인할 수있는 PDF를 제공하지 않음).

    두 번째 코드 단편은 비트 맵 이미지 (래스터 형식)를 만들려고 시도합니다.

    어느 쪽이든 : 벡터 및 래스터 이미지 모두에서가는 선이 표시되는지 여부는 PDF 뷰어에 따라 다릅니다. Adobe Reader에는 실제 디스플레이에 영향을주는 클라이언트 컴퓨터에서 설정할 수있는 다양한 옵션 (예 : "가는 선 강화", "부드러운 선 그림", "부드러운 이미지")이 PDF에 설정되지 않습니다.

    MS Word에서 테스트 한 내용이 벡터 형식의 테이블을 만들었지 만 두꺼운 줄이있는 것으로 가정합니다. 그래서이 시험은 아무 것도 증명하지 못합니다.

    +0

    GridLines의 가시성이 PDF 뷰어의보기 비율 (Foxit Reader뿐만 아니라 Adobe Reader에서도 확인 됨)에 따라 달라 지므로 첫 번째 스 니핏이 벡터 형식의 표를 생성하지 않는다고 생각합니다. 앞에서 말했듯이, MS Word를 사용한 테스트는보기 비율이 무엇이든 관계없이 표 격자가 명확하게 보이기 때문에 벡터 형식으로 작성하고 저장해야합니다. –

    +0

    나는 모든 축소 선이 낮은 줌 레벨에서 볼 수없는 벡터 형식의 여러 문서를 보았습니다. 일반적으로 6400 %의 확대/축소 수준에서 텍스트를 선택하려고 할 때 차이점을 알 수 있습니다. –