Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.IO;
- using System.Windows;
- using System.Windows.Documents;
- using System.Windows.Markup;
- using System.Windows.Media;
- using System.Windows.Xps;
- using System.Windows.Xps.Packaging;
- using PdfSharp.Xps;
- using Size = System.Drawing.Size;
- namespace TransformTest
- {
- public class Program
- {
- [STAThread]
- public static void Main(string[] args)
- {
- PdfSharpTransformTest();
- }
- private static void PdfSharpTransformTest()
- {
- 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);
- Console.WriteLine("Done.");
- Console.ReadLine();
- }
- private static void WriteXpsFile(FixedDocumentSequence docSeq, string xpsFilePath)
- {
- if (File.Exists(xpsFilePath))
- File.Delete(xpsFilePath);
- var xpsd = new XpsDocument(xpsFilePath, FileAccess.ReadWrite);
- XpsDocumentWriter xw = XpsDocument.CreateXpsDocumentWriter(xpsd);
- xw.Write(docSeq);
- xpsd.Close();
- }
- private static FixedDocumentSequence CreateDocumentSequence(Size fdSize, DrawingVisual visual)
- {
- var docSeq = new FixedDocumentSequence();
- var doc = CreateFixedDocument(fdSize, new DrawingVisualPresenter(visual));
- var reference = new DocumentReference();
- reference.SetDocument(doc);
- docSeq.References.Add(reference);
- return docSeq;
- }
- private static FixedDocument CreateFixedDocument(Size paperSize, UIElement elementToAdd)
- {
- var doc = new FixedDocument();
- var page = new FixedPage();
- page.Width = paperSize.Width;
- page.Height = paperSize.Height;
- var pageContent = new PageContent();
- ((IAddChild)pageContent).AddChild(page);
- doc.Pages.Add(pageContent);
- page.Children.Add(elementToAdd);
- return doc;
- }
- }
- public class DrawingVisualPresenter : FrameworkElement
- {
- private readonly DrawingVisual visual;
- public DrawingVisualPresenter(DrawingVisual visual)
- {
- this.visual = visual;
- }
- protected override int VisualChildrenCount
- {
- get { return 1; }
- }
- protected override Visual GetVisualChild(int index)
- {
- if (index != 0)
- throw new ArgumentOutOfRangeException("index");
- return visual;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement