2016-11-24 12 views
8

縮尺変換を使用して異なる縮尺で描画するときにPDFSharpの問題が検出されました。PDFSharpトランスフォームの問題

この例では、異なる尺度で2つの長方形を描画し、FixedDocumentSequenceからXPSを生成し、最後にPDFsharps XPSコンバータを使用してXPSをPDFに変換します。

var visual = new DrawingVisual(); 
DrawingContext dc = visual.RenderOpen(); 

// Setup transformations. 
dc.PushTransform(new TranslateTransform(0, 1122.0)); 
dc.PushTransform(new ScaleTransform(3.77857136726379, -3.77857136726379)); 
dc.PushTransform(new TranslateTransform(-1719.41186523438, -1410.32360839844)); 
dc.PushTransform(new ScaleTransform(0.0117647061124444, 0.0117647061124444)); 

// Draw red rectangle. 
var redPen = new Pen(Brushes.Red, 1); 
var rectGeo1 = new RectangleGeometry(new Rect(160000, 130000, 8000, 5000)); 
dc.DrawGeometry(Brushes.Transparent, redPen, rectGeo1); 

// Pop two transformations. 
dc.Pop(); 
dc.Pop(); 

// Draw blue rectangle. 
var bluePen = new Pen(Brushes.Blue, 0.5); 
var rectGeo2 = new RectangleGeometry(new Rect(12, 12, 150.9408, 107.088539)); 
dc.DrawGeometry(Brushes.Transparent, bluePen, rectGeo2); 
dc.Close(); 

// Generate XPS from DocumentSequence. 
var a3Size = new Size(1587, 1123); 
var docSeq = CreateDocumentSequence(a3Size, visual); 
string dirPath = @"C:\Temp\"; 
string xpsFilePath = dirPath + "test.xps"; 
string pdfFilePath = dirPath + "test.pdf"; 
WriteXpsFile(docSeq, xpsFilePath); 

// Generate PDF from XPS (PdfSharp) 
XpsConverter.Convert(xpsFilePath, pdfFilePath, 0); 

完全なプログラムがhereとVSソリューションhereを見つけることができます。

赤い矩形は、青色の矩形の右上隅に揃えられます。

XPS screenshot

しかし、我々は2つの長方形の間のギャップを取得し、生成されたPDF内:それは、生成されたXPSを見たときに我々が得るものです。

enter image description here

Close-up

問題は、原点からの長い道のりを描画するとき、この例では赤色矩形が160000に配置されている最も明白である。1:85のスケールで130000。描画する原点からの距離が長いほど、ギャップは大きくなります。精度/丸め誤差ですか?

私はこの問題をうまく解決しようとしました。原因を見つけるのに役立つと大変感謝しています!注:問題がPDFSharpレンダリングまたはXPS変換であるかどうかはわかりません。

私はPDFSharp 1.31を使用しています(新しいバージョンにはXPSサポートは含まれていません)。

このサンプル(PDFSharpライブラリを含む)を含む完全なVisual Studioソリューションはhereです。

+0

他のXPS to PDFコンバータを試したことがあると思いますが、問題はPDFSharpでのみ発生しますか? –

+0

@AndrejsCainikovs正解、私は他のコンバータを試して、正しい結果を得ました。だからPDFSharpの問題です。 – salle55

答えて

8

原因を見つけたので、PDFSharpはこの場合十分ではないPDFを生成するときに変換行列の値を4小数点以下に丸めます。

enter image description here

を(デバッグを実行する際に冗長モード)。これは、生成されたPDFの差である:私はPdfContentWriter 8桁プレースホルダに4から変更精度を高める

enter image description here

正しくレンダリングされたPDFの結果は次のとおりです。

enter image description here

関連する問題