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);
}
[// --- Как сделать эту правую сторону динамичной. 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
Вы можете запросить информацию о размерах и позициях объектов, если вам это нужно.