스케일 변환을 사용하여 다른 배율로 그릴 때 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 할 수 있습니다.빨간색 직사각형은 파란색 직사각형의 오른쪽 위 모서리에 정렬되어야합니다.
을하지만 생성 된 PDF에서 우리는 두 사각형 사이의 간격을 얻을 : 그건 우리가 생성 된 XPS 볼 때 무엇을 얻을 수 있습니다. 130000 1:85의 규모에, 빨간색 사각형 160000에 위치이 예에서, 원점에서 먼 길을 그릴 때
문제
가장 분명하다. 그 간격은 원점에서 길어질수록 커집니다. 정밀도/반올림 오류가 될 수 있습니까?나는이 문제를 성공적으로 해결하려고 노력했습니다. 원인을 찾는 데 큰 도움이 될 것입니다! PDFSharp 렌더링 또는 XPS 변환과 관련된 문제인지는 확실하지 않습니다.
PDFSharp 1.31 (최신 버전에는 XPS 지원이 포함되지 않음)을 사용하고 있습니다.
이 예제 (PDFSharp lib 포함)가 포함 된 완전한 Visual Studio 솔루션은 here입니다.
이미 다른 XPS-PDF 변환기를 사용해 본 적이 있으며 문제가 PDFSharp에서만 지속된다고 가정합니다. –
@AndrejsCainikovs 올바른, 다른 변환기를 시도하고 올바른 결과가 있습니다. 따라서 PDFSharp에서는 문제가됩니다. – salle55