2017-08-29 2 views
0

Beim Speichern hat das Bild das richtige Design, aber das PDF hat den falschen Text. Können Sie erklären, warum die Dokumente unterschiedlich sind?MigraDoc und PDFsharp zeigen verschiedene Dokumente beim Speichern als PDF und Bild

Ich bin auch offen für andere Lösungen zum Speichern einer PDF des gesamten Dokuments und die Möglichkeit, eine ausgewählte Seite eines mehrseitigen Dokuments zu drucken.

Dank :)

EDIT: Das Bild zeigt das Datum („24. Mai 2016“), die richtig ist und was ich die PDF will

zeigen, sondern wird die PDF zeigt „TEST TEST“
public static void pdf() { 
     DateTime now = DateTime.Now; 
     string filename = "MixMigraDocAndPdfSharp.pdf"; 
     filename = Guid.NewGuid().ToString("D").ToUpper() + ".pdf"; 
     PdfDocument document = new PdfDocument(); 

     SamplePage1(document); 

     document.Save(filename); 

     Process.Start(filename); 

    } 
static void SamplePage1(PdfDocument document) { 
     PdfPage page = document.AddPage(); 
     XGraphics gfx = XGraphics.FromPdfPage(page); 
     gfx.MUH = PdfFontEncoding.Unicode; 
     gfx.MFEH = PdfFontEmbedding.Default; 

     XFont font = new XFont("Verdana", 13, XFontStyle.Bold); 
     gfx.DrawString("TEST TEST", font, XBrushes.Black, 
         new XRect(100, 100, page.Width - 200, 300), XStringFormats.Center); 

     Document doc = new Document(); 
     Section sec = doc.AddSection(); 
     Paragraph para = sec.AddParagraph(); 

     header("24th May 2016"); 

     DocumentRenderer docRenderer = new DocumentRenderer(doc); 
     docRenderer.PrepareDocument(); 

     docRenderer.RenderObject(gfx, XUnit.FromCentimeter(5), XUnit.FromCentimeter(10), "12cm", para); 
     PageInfo info = docRenderer.FormattedDocument.GetPageInfo(1); 

     int dpi = 150; 
     int dx, dy; 
     if (info.Orientation == PdfSharp.PageOrientation.Portrait) { 
      dx = (int)(info.Width.Inch * dpi); 
      dy = (int)(info.Height.Inch * dpi); 
     } else { 
      dx = (int)(info.Height.Inch * dpi); 
      dy = (int)(info.Width.Inch * dpi); 
     } 

     Image image = new Bitmap(dx, dy, PixelFormat.Format32bppRgb); 
     Graphics graphics = Graphics.FromImage(image); 
     graphics.Clear(System.Drawing.Color.White); 
     float scale = dpi/72f; 
     graphics.ScaleTransform(scale, scale); 
     gfx = XGraphics.FromGraphics(graphics, new XSize(info.Width.Point, info.Height.Point)); 
     docRenderer.RenderPage(gfx, 1); 
     gfx.Dispose(); 
     image.Save("test.png", ImageFormat.Png); 
     doc.BindToRenderer(docRenderer); 
     docRenderer.RenderObject(gfx, XUnit.FromCentimeter(5), XUnit.FromCentimeter(10), "12cm", para); 
     Process.Start("mspaint", "test.png");   
    } 
public static void header(String date) { 
     Paragraph paragraph = new Paragraph(); 

     var dateIssued = firstPage.AddTextFrame(); 
     dateIssued.Height = "1.0cm"; 
     dateIssued.Width = "6.0cm"; 
     dateIssued.Left = "2.1cm"; 
     dateIssued.RelativeHorizontal = RelativeHorizontal.Margin; 
     dateIssued.Top = "3.55cm"; 
     dateIssued.RelativeVertical = RelativeVertical.Page; 
     paragraph = dateIssued.AddParagraph(date); 
    } 
+0

Unklar was Sie fragen. Zeigen Sie Bilder von dem, was Sie bekommen, und erklären Sie, was anders ist als Ihre Erwartungen. Ein MCVE könnte auch helfen: https://stackoverflow.com/help/mcve –

+0

Ich habe einige Erläuterungen zu den einzelnen Formaten hinzugefügt. Ich versuche, die ganzen Dokumente als PDF zu speichern und auch jede PDF-Seite einzeln zu drucken, ich drucke gerade jede Seite über das Bild (schreckliche Lösung, aber ich kann keinen besseren Weg finden) –

+0

Gibt es einen bestimmten Grund für das Mischen von MigraDoc und PDFsharp? Versuchen Sie es einfach zu halten und verwenden Sie MigraDoc wie vorgesehen. Der Code sollte "TEST TEST" in der PDF-Datei zeichnen. Sie rufen den Code nicht auf, der den Header für den PDF-Fall zeichnet. –

Antwort

0

Sie rufen docRenderer.RenderPage(gfx, 1); nur für das Bild. Dies rendert den Header.

Sie rufen nicht docRenderer.RenderPage(gfx, 1); für das PDF. Also kein Datum dort, nur der "TEST TEST", den du vorher gezeichnet hast.

+0

Ich habe einige Fortschritte gemacht, anstatt es in ein Bild zu konvertieren, kann ich das Dokument nur mit MigraDoc drucken (denke ich?) Mein einziges Problem ist printDocument.SelectedPage zu bekommen, der Quellcode auf der MigraDoc Website benutzt this.pagePreview. Seite. Wie kann ich sonst die ausgewählte Seite erhalten? –

+0

Legen Sie 'SelectedPage' nicht fest, um das gesamte Dokument zu drucken. Wie ich verstehe, gibt es sowieso nur eine Seite. –

+0

Danke für Ihre Hilfe! –

Verwandte Themen