Pdfsharp и MigradDoc: как сделать правильную белую панель отзывчивой, используя migradoc и pdfsharp?

//-- migradoc----------
    <code>
          Document document = new Document();
          Section section = document.AddSection();
          Paragraph paragraph = section.AddParagraph();
    </code>

// --- pdfSharp ---------------------------

    <code>
        PdfDocument layoutDoc = new PdfDocument();
        PdfPage page = layoutDoc.AddPage();
        XGraphics gfx = CreatePageLayout(page);
        XFont font = new XFont("Verdana", 12);
    </code>

// --- Рендеринг объектов migradoc ------------------------------------------ --- // --- Здесь документ - это документ migradoc, содержащий все данные, которые будут использоваться в документе pdfsharp. MigraDoc.Rendering.DocumentRenderer docRenderer = new DocumentRenderer(document); docRenderer.PrepareDocument(); //---Length Tags int leftPanelYaxis = 0; int RightPanelHeight = 0; try { // Render the paragraph.You can render tables or shapes the same way. docRenderer.RenderObject(gfx, XUnit.FromCentimeter(0.7), XUnit.FromCentimeter(0.5), "6cm", name); docRenderer.RenderObject(gfx, XUnit.FromCentimeter(0.7), XUnit.FromCentimeter(2), "6cm", about); docRenderer.RenderObject(gfx, XUnit.FromCentimeter(0.3), XUnit.FromCentimeter(2), "0.6cm", aboutme_icon); }

[Ниже изображение резюме. Левая сторона зафиксирована, а правая должна быть отзывчивой. В настоящее время мне придется обрабатывать содержимое и давать координаты, чтобы добавить его в документ pdfSharp. В migradoc это обрабатывается, но левая цветная панель содержит фиксированные данные. Это не может быть достигнуто только в migraDoc. Таким образом, должна быть некоторая комбинация migraDoc и PdfSharp.] [1]] [1// --- Как сделать эту правую сторону динамичной. Migradoc имеет эту функцию для достижения этой цели. Но левая панель окрашена и зафиксирована, в то время как правая панель будет отзывчивой. Как это может быть достигнуто. В настоящее время данные на правой панели переполняются и перекрываются, поскольку являются одностраничными. Поскольку я рендерил объекты Migradoc, он переполняется в документе pdfsharp. Есть ли альтернатива, чтобы решить это.

2 ответа

     /// <summary>
            /// Merge Left and Right Panels
            /// </summary>
            /// <param name="rightPanelMigraDoc"></param>
            /// <param name="leftPanelPdfDoc"></param>
            /// <param name="gfx"></param>
    <code>
            public static void MergePanels(Document migraDocument, PdfDocument leftPanelPdfDoc, XGraphics gfx)
            {
                PdfPage page = null;

                //concatenation of Left and Right Panels 
                // Create a renderer and prepare (layout) the Migradoc document
                MigraDoc.Rendering.DocumentRenderer docRenderer = new DocumentRenderer(migraDocument);
                docRenderer.PrepareDocument();

                //get pagecount of the rightpanelMigraDoc
                int rightPageCount = docRenderer.FormattedDocument.PageCount;
                int leftPageCount = leftPanelPdfDoc.PageCount;
                // Loop to add leftPanel pages equal to rightPanel and Merge by rendering
                int index = 0;
                do
                {
                    //for single left panel page only.
                    if (index == 0)
                    {
                        docRenderer.RenderPage(gfx, index + 1);
                        index++;
                    }
                    else
                    {
                        page = leftPanelPdfDoc.AddPage();
                        page.Size = PdfSharp.PageSize.A4;
                        gfx = CreatePageLayout(page);
                        // Render the page. Note that page numbers start with 1.
                        docRenderer.RenderPage(gfx, index + 1);
                        index++;
                    }
                }
                while (index < rightPageCount);
            }
    </code>

Но это выше работает для одной левой страницы и отзывчивой правой панели (страницы добавляются в документ pdfsharp, а затем с использованием этого gfx отображается страница MigraDoc). Однако это может быть улучшено, чтобы левая панель также сначала имела несколько страниц, а затем получала gfx (объект XGraphics) каждой страницы и отображала правую панель MigraDoc.

RenderObject не обрабатывает разрывы страниц. Вы можете использовать его только для визуализации одного объекта на одной странице. Вы можете сделать страницу действительно огромной, используя пользовательские размеры страниц.

RenderPage заботится о разрывах страниц. Создайте документ с несколькими объектами, а затем используйте RenderPage нарисовать это.
Образец, который использует RenderPage (для другой цели) можно увидеть здесь:
http://forum.pdfsharp.net/viewtopic.php?f=8&t=3172

От FormattedDocument Вы можете запросить информацию о размерах и позициях объектов, если вам это нужно.

Другие вопросы по тегам