2017-02-13 2 views
0
//-- migradoc---------- 
    <code> 
      Document document = new Document(); 
      Section section = document.AddSection(); 
      Paragraph paragraph = section.AddParagraph(); 
    </code> 

// --- PdfSharp ---------------------------Pdfsharp et MigradDoc: Comment rendre le panneau blanc réactif en utilisant migradoc et pdfsharp?

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

// --- Rendu des objets migradoc --------------------------------------------- // --- Ici le document est le document migradoc contenant toutes les données qui seront utilisées dans le document de 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); }

[Below is the image of the Resume. The Left side is fixed and the right needs to be responsive. Currently I will have to handle the content and give coordinates to add it on pdfSharp document. In migradoc this is handled but the left colored panel has fixed data. This cannot be achieved in migraDoc alone. So there has to be some combination of migraDoc and PdfSharp.][1]][1 // --- Comment rendre ce côté droit dynamique. migradoc a cette fonctionnalité pour y parvenir. Mais le panneau de gauche est coloré et fixe tandis que le panneau de droite sera sensible. Comment cela peut il etre accompli. Actuellement le Data on Right Panel déborde et se chevauche puisqu'il s'agit d'une page unique. Comme je rends les objets de Migradoc, il déborde sur le document pdfsharp. Y a-t-il une alternative pour résoudre cela?

+0

Je suis tenté de signaler ceci comme "pas clair sur ce que vous" re demandant ". Le formatage incohérent n'aide pas à comprendre le problème. Assurez-vous de définir la bonne largeur de page avant d'appeler 'PrepareDocument()'. –

+0

Salut, avec l'implémentation actuelle, je ne peux ajouter qu'une seule page, mais si les données sont augmentées, je dois aussi donner un saut de page si la taille des données est supérieure à une page qui déborde dans le panneau droit puisque je suis objet de paragraphe ". Ce problème n'est pas présent dans migradoc car il ajoute les données supplémentaires à la page suivante, c'est-à-dire que le saut de page est géré par celui-ci. Mais en utilisant migradoc seul pour générer ces deux panneaux, puis concaténer en un seul. Cela peut-il être fait? –

Répondre

0

RenderObject ne gère pas les sauts de page. Vous pouvez l'utiliser uniquement pour afficher un seul objet sur une seule page. Vous pouvez rendre la page vraiment énorme en utilisant des tailles de page personnalisées.

RenderPage prend en charge les sauts de page. Créez un document avec plusieurs objets, puis utilisez RenderPage pour le dessiner.
Un exemple qui utilise RenderPage (dans un but différent) peut être vu ici:
http://forum.pdfsharp.net/viewtopic.php?f=8&t=3172

De FormattedDocument vous pouvez demander des informations sur les tailles et les positions des objets si vous avez besoin que.

+0

Salut J'ai essayé d'utiliser la page de rendu mais seule la dernière page est rendue /*Page counter*/ int pageCount = docRenderer.FormattedDocument.PageCount; PdfPage page = pdfDocument.AddPage(); XGraphics gfx = CreatePageLayout(page); XRect rect = GetRect(idx); XGraphicsContainer container = gfx.BeginContainer(rect, A4Rect, XGraphicsUnit.Point);// Render the page. docRenderer.RenderPage(gfx, idx + 1); // Pop the previous graphical state gfx.EndContainer(container);

+0

J'ai vu cet exemple dans lequel ils ont utilisé deux documents pdf. [link] (http://www.pdfsharp.net/wiki/CombineDocuments-sample.ashx). Mais dans mon cas, je génère les fichiers pdf à l'exécution. Un document PdfDocument et l'autre document MirgraDoc. Puis-je utiliser cette technique comme indiqué dans le lien pour combiner les deux documents et obtenir la mise en page souhaitée? –

+0

Re 1er commentaire: pas de boucle dans votre code, donc un seul appel à 'RenderPage()' et une seule page est tirée. Re 2ème commentaire: Il y a toujours des options pour rendre les choses plus compliquées. Vous pouvez créer un document avec PDFsharp et l'enregistrer dans un flux, créer un autre document avec MigraDoc et l'enregistrer dans un flux, puis utiliser l'exemple lié pour lire les deux flux et les combiner. Mais je pense que l'enregistrement dans les flux n'est pas nécessaire. –

0
 /// <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> 

Mais celui-ci fonctionne dessus pour unique gauche Page et réactive le panneau de droite (pages sont ajoutées dans le document de PdfSharp puis utiliser cette GFX la page MigraDoc est rendu là-dessus). Cependant, ceci peut être amélioré pour que le panneau de gauche ait d'abord plusieurs pages, puis récupère le gfx (objet XGraphics) de chaque page et affiche le panneau droit MigraDoc