2016-11-24 5 views
8

스케일 변환을 사용하여 다른 배율로 그릴 때 PDFSharp 문제가 발견되었습니다.PDFSharp 변형 문제

이 예제에서는 두 개의 직사각형을 서로 다른 축척으로 그려서 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

을하지만 생성 된 PDF에서 우리는 두 사각형 사이의 간격을 얻을 : 그건 우리가 생성 된 XPS 볼 때 무엇을 얻을 수 있습니다. 130000 1:85의 규모에, 빨간색 사각형 160000에 위치이 예에서, 원점에서 먼 길을 그릴 때

enter image description here

Close-up

문제

가장 분명하다. 그 간격은 원점에서 길어질수록 커집니다. 정밀도/반올림 오류가 될 수 있습니까?

나는이 문제를 성공적으로 해결하려고 노력했습니다. 원인을 찾는 데 큰 도움이 될 것입니다! PDFSharp 렌더링 또는 XPS 변환과 관련된 문제인지는 확실하지 않습니다.

PDFSharp 1.31 (최신 버전에는 XPS 지원이 포함되지 않음)을 사용하고 있습니다.

이 예제 (PDFSharp lib 포함)가 포함 된 완전한 Visual Studio 솔루션은 here입니다.

+0

이미 다른 XPS-PDF 변환기를 사용해 본 적이 있으며 문제가 PDFSharp에서만 지속된다고 가정합니다. –

+0

@AndrejsCainikovs 올바른, 다른 변환기를 시도하고 올바른 결과가 있습니다. 따라서 PDFSharp에서는 문제가됩니다. – salle55

답변

8

원인을 발견 한 PDFSharp는이 경우 충분하지 않은 PDF를 생성 할 때 변환 행렬 값을 4 자리 소수로 반올림합니다.

내가 PdfContentWriter 4 ~ 8 자리의 자리에서 변경 정밀도를 높이려면 :

enter image description here

:

enter image description here

이 생성 된 PDF의 차이 (디버그를 실행 상세 모드)입니다

올바르게 렌더링 된 PDF의 결과는 다음과 같습니다.

enter image description here