2017-05-16 1 views
1

Ich habe den folgenden Code in MigraDoc GDI 1.50.4000-Beta3b und 1.32.4334.0 versucht. Wenn ich die Seitengröße auf legales Format einstelle, wird sie entweder nicht in das legale Format konvertiert, oder es verbleibt oben ein großer Rand, als ob die Seitengröße 8,5 x 11 wäre, und die zusätzliche Länge wurde oben eingefügt der PDF. Ich würde den Text lieber am Anfang der Seite beginnen. Wie kann ich das umgehen?Willst du große Marge am Anfang der legalen Seite Format entfernen

Im folgenden Beispiel ist oben ein großer Rand vorhanden.

// Create a new MigraDoc document 
Document document = new Document(); 
//document.UseCmykColor = true; 

// Add a section to the document 
Section section = document.AddSection(); 
section.PageSetup = document.DefaultPageSetup.Clone(); 
section.PageSetup.PageFormat = PageFormat.Legal; //setting page size here didn't seem to work 
section.PageSetup.TopMargin = "0cm"; 

// Add a paragraph to the section 
Paragraph paragraph = section.AddParagraph(); 

paragraph.Format.Font.Color = Color.FromCmyk(100, 30, 20, 50); 

// Add some text to the paragraph 
paragraph.AddFormattedText(@"Hello World!", TextFormat.Bold); 

#if GDI 
// Using GDI-specific routines. 
// Make sure to use "#if GDI" for any usings you add for platform-specific code. 
{ 
} 
#endif 

#if WPF 
// Using WPF-specific routines. 
// Make sure to use "#if GDI" for any usings you add for platform-specific code. 
{ 
} 
#endif 

// Create a renderer for the MigraDoc document. 
PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer(true); 

// Associate the MigraDoc document with a renderer 
pdfRenderer.Document = document; 

// Layout and render document to PDF 
pdfRenderer.RenderDocument(); 

pdfRenderer.PdfDocument.Pages[0].Size = PdfSharp.PageSize.Legal; 

// Save the document... 
const string filename = "HelloWorld.pdf"; 

pdfRenderer.PdfDocument.Save(filename); 
// ...and start a viewer. 
Process.Start(filename); 
+2

Schlechte Idee, die Seitengröße nach dem Rendern des Dokuments festzulegen. Funktioniert es, wenn Sie die Zeile 'section.PageSetup = document.DefaultPageSetup.Clone();' out? –

+0

Vielen Dank !!! Das hat den Trick gemacht. Warum sagt diese URL dann "Sie sollten niemals DefaultPageSetup ändern, stattdessen einen Clone()" verwenden? http://stackoverflow.com/questions/32757196/how-can-set-the-page-size-of-migradoc Ich habe auch eingestellt, die Seitengröße nach dem Rendern einzustellen. Das war nur ein Schuss in die Dunkelheit, um zu sehen, ob es das Problem gelöst – Hoppe

+0

Der Punkt ist: nicht ändern DefaultPageSetup. Ändern Sie das PageSetup Ihrer Sektion mit oder ohne Zuweisen eines Clones von DefaultPageSetup. –

Antwort

2

PageFormat verwendet PageWidth und PageHeight zu setzen, wenn sie nicht gesetzt sind.

Aufrufen section.PageSetup = document.DefaultPageSetup.Clone(); weist sowohl PageWidth als auch PageHeight die Werte für die A4-Größe zu. Ein späteres Ändern von PageFormat hat keine Auswirkungen auf die effektive Seitengröße, die A4 bleibt.

Nach section.PageSetup = document.DefaultPageSetup.Clone(); Aufruf müssen Sie sowohl PageWidth und PageHeight auf die richtigen Werte gesetzt.

section.PageSetup = document.DefaultPageSetup.Clone(); wird zum Initialisieren aller Werte von PageSetup verwendet. Verwenden Sie dies, wenn Sie mit PageSetup Berechnungen basierend auf Margen und dergleichen durchführen.

Es wird generell nicht empfohlen, section.PageSetup = document.DefaultPageSetup.Clone(); aufzurufen. Es wird dringend empfohlen, eine Clone() zu verwenden, anstatt Änderungen direkt an der DefaultPageSetup vorzunehmen.

Einstellung PageFormat funktioniert wie erwartet, wenn Sie Clone() nicht zuweisen.

Verwandte Themen