2017-12-18 16 views
0

私はWPFアプリケーションの一部のデータを表すためにDataGridを使用しています。 PDFSharpを使用してDataGridをPDFに変換する特定のWPFウィンドウを保存する機能では、保存されたPDFを小さな表示割合で表示すると、DataGrid GridLinesが表示されないという問題に直面しています。 (PDFビューが139パーセントに設定されている場合にのみ、グリッド線が表示され、添付画像を参照してください。しかし、小さい視野%で、一部のグリッド線を省略得る。)WPF DataGrid GridLinesがPDFとして保存されているときに表示されない

  1. 66.7%
  2. 75%
  3. ここで

100%

  • 139%
  • は、PDFの保存コードです: -

    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にをスローしますプログラムの実行を続行するためのメモリ。 "ただし、アプリケーションがクラッシュすることはありません。

    PDFビューアの動作を確認するために、MS Wordで複数の行と列を持つテーブルを生成し、PDFとして保存しました。その場合、テーブルグリッド線は、小さな表示パーセンテージでもはっきりと見えます。

    誰もがこれを手伝ってくれますか?

    答えて

    0

    最初のコードスニペットでは、ベクトル形式の表が作成されると仮定しています(これを確認できるPDFは提供していません)。

    2番目のコードスニペットは、ビットマップイメージ(ラスタ形式)の作成を試みます。

    どちらの方法でも:ベクトル画像とラスタ画像の両方で、細い線が見えるかどうかはPDFビューアによって異なります。 Adobe Readerには、実際の表示に影響を与える(「細い線の強調」、「滑らかな線画」、「滑らかな画像」など)、クライアントコンピュータで設定される、PDFには何も設定されない多くのオプションがあります。

    MS Wordでのテストでも、ベクトル形式のテーブルが作成されていることが前提ですが、太い線で表記されている可能性があります。だから、このテストは何も証明しない。

    +0

    GridLinesの可視性はPDFビューアの閲覧パーセンテージ(Adobe ReaderとFoxit Readerでチェック済み)に依存しているため、1番目のスニペットがベクトル形式のテーブルを作成するとは思わない。あなたが言ったように、MS Wordでのテストは、表示率が何であってもテーブルグリッドがはっきりと見えるので、ベクトル形式で作成して保存していなければなりません。 –

    +0

    私はベクトル形式でいくつかの文書を見てきましたが、すべての細い線が低いズームレベルで見えるわけではありません。通常、6400%のズームレベルで、またはテキストを選択しようとしているときに差異を表示できます。 –

    関連する問題