Wykryto problem z PDFSharp podczas rysowania w różnych skalach za pomocą transformacji skali.PDFSharp transform issue
W tym przykładzie rysujemy dwa prostokąty w różnych skalach, generujemy XPS z FixedDocumentSequence
i na koniec konwertujemy XPS na PDF przy użyciu konwertera PDFSharps XPS.
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);
Kompletny program można znaleźć here i rozwiązanie VS here.
czerwony prostokąta ma być wyrównane w prawym górnym rogu prostokąta niebieskim. To, co dostajemy, gdy patrząc na wygenerowanym XPS:
Ale w wygenerowanym pliku PDF możemy uzyskać szczelinę między dwoma prostokątami.
Problem ten jest oczywiste, gdy rysunek daleko od pochodzenia, w tym przykładzie czerwony prostokąta umieszczone na 160000, 130000, w skali 1:85. Szczelina staje się większa od czasu, z którego rysujesz, czy może to być błąd precyzji/zaokrągleń?
Próbowałem rozwiązać ten problem bez powodzenia. Każda pomoc w znalezieniu przyczyny byłaby bardzo cenna! Uwaga: nie jestem pewien, czy problem dotyczy renderowania PDFSharp czy konwersji XPS.
Używam PDFSharp 1.31 (nowsze wersje nie obejmuje wsparcia XPS).
Kompletne rozwiązanie Visual Studio z tego przykładu (w tym PDFSharp lib) jest dostępny here.
Zakładam, że już próbował innych XPS do konwerterów PDF, a problem nadal występuje tylko w PDFSharp? –
@AndrejsCainikovs Prawidłowo, wypróbowałem inne konwertery i otrzymałem poprawny wynik. To jest problem z PDFSharp. – salle55