Добавление нижнего колонтитула к экспортированному графику OxyPlot

Я использую OxyPlot для экспорта графиков.

Когда я их экспортирую, я хочу добавить к этим графикам нижний колонтитул с такой информацией, как путь сохранения, отметка времени и т. д....
Прямо сейчас я делаю это, создавая дополнительный X- оси на другом уровне позиции, а затем установить размеры всех меток и меток равными нулю, кроме размера шрифта заголовка.

Это работает, но, как вы можете себе представить, это довольно хакерски и выглядит не очень хорошо (поскольку вы не можете установить, например, выравнивание).

Итак, мой вопрос: есть ли возможность добавить такой нижний колонтитул к экспортируемому графику?

РЕДАКТИРОВАТЬ:

var xAxis = new OxyPlot.Axes.LinearAxis
{
    Position = AxisPosition.Bottom,
    PositionTier = 1,
    Title = "Footer: i.e. path to my file",
    MinorTickSize = 0.0,
    MajorTickSize = 0.0,
    FontSize = 0.0,
    TitleFontSize = 12,
    AxisDistance = 10
};

Это обходной путь, о котором я упоминал.
Я создаю ось на уровне позиции 1, которая находится ниже первой, а затем отключаю все ее визуальные эффекты, кроме заголовка.
И в конце я добавляю ее в моя сюжетная модель pm.Axes.Add(xAxis).

Чтобы экспортировать мою сюжетную модель, я использую PdfExporter следующим образом:

using (var stream = File.Create(testFile.pdf))
{
    PdfExporter.Export(pm, stream, 800, 500);
}

Приветствую
Крис


person Chriz    schedule 23.06.2015    source источник
comment
Если бы вы могли добавить наименьший пример кода для демонстрации проблемы, другим пользователям было бы намного проще вам помочь. Некоторые могут даже взять ваш пример и скопировать/вставить его в свою IDE, чтобы найти решение, но это будет намного проще, если вы дадите им надежную отправную точку.   -  person user700390    schedule 23.06.2015
comment
Извините, вы правы. Я добавил пример кода, чтобы кто-нибудь мог воспроизвести проблему. Поскольку я новичок в StackOverflow, не стесняйтесь сообщать мне, если я что-то пропустил в своем вопросе.   -  person Chriz    schedule 24.06.2015


Ответы (1)


Просто нужно было сделать то же самое с моим проектом, и я подумал, что поделюсь тем, как мне это удалось, для всех, кому нужен нижний колонтитул.

Я не смог найти никаких встроенных методов OxyPlot для добавления верхнего или нижнего колонтитула, но если вы используете OxyPlot.PDF, он построен поверх PDFSharp, и у вас есть больше возможностей для настройки экспорта PDF.

  1. Удалите все предыдущие ссылки на OxyPlot.Pdf в вашем проекте.
  2. Загрузите исходный код OxyPlot.Pdf с: https://github.com/oxyplot/oxyplot
  3. В своем проекте в VS щелкните правой кнопкой мыши свое решение в «Обозревателе решений» и «Добавить существующий проект».
  4. Перейдите к загруженному исходному коду и добавьте OxyPlot.Pdf.csproj
  5. Щелкните правой кнопкой мыши свой проект и добавьте ссылку
  6. Выберите «Проекты» слева и установите флажок для OxyPlot.Pdf справа. Нажмите ОК.
  7. Убедитесь, что он работает, создав и запустив проект.
  8. Перейдите к файлу PdfRenderContext.cs и найдите метод PdfRenderContext вверху.
  9. Добавьте приведенный ниже код, затем создайте и запустите свой проект.

Этот код создает документ MigraDoc, а затем объединяет его с OxyPlot PdfDocument.

    public PdfRenderContext(double width, double height, OxyColor background)
    {
        //*** Original Code - Don't change **//
        this.RendersToScreen = false;
        this.doc = new PdfDocument();
        var page = new PdfPage { Width = new XUnit(width), Height = new XUnit(height) };
        this.doc.AddPage(page);
        this.g = XGraphics.FromPdfPage(page);
        if (background.IsVisible())
        {
            this.g.DrawRectangle(ToBrush(background), 0, 0, width, height);
        }

        //*** New Code to add footer **//
        Document myDoc = new Document();
        Section mySection = myDoc.AddSection();
        Paragraph footerParagraph = mySection.Footers.Primary.AddParagraph();
        footerParagraph.AddText(DateTime.Now.ToShortDateString());
        footerParagraph.Format.Alignment = ParagraphAlignment.Right;

        MigraDoc.Rendering.DocumentRenderer docRenderer = new MigraDoc.Rendering.DocumentRenderer(myDoc);
        docRenderer.PrepareDocument();
        docRenderer.RenderObject(g, XUnit.FromInch(9.5), XUnit.FromInch(8), "1in", footerParagraph);
    }

При экспорте PDF-файла в правый нижний угол PDF-файла теперь добавляется отметка с датой. Обратите внимание, что я работал с альбомной бумагой 8,5x11 дюймов, поэтому вам может понадобиться изменить положение, если вы не видите ее на графике. Верхний левый угол равен 0,0. Как только он заработает, соберите проект OxyPlot.Pdf, чтобы создать dll, а затем вы можете добавить его в качестве ссылки на свой проект и удалить исходный код.

Результат:

введите здесь описание изображения

person Automate This    schedule 09.03.2017