2013-12-04 2 views
1

Я новичок в C#, wpf и в библиотеке pdfsharp. Это мой XAML код:Сохранение wpf-макета в pdf с помощью pdfsharp, C#

<Grid> 
    <zoom:ZoomControl> 
    <graphsharp:GraphLayout x:Name="graphLayout" 
          Graph="{Binding ElementName=root, Path=GraphToVisualize}" 
          LayoutAlgorithmType="FR" 
          OverlapRemovalAlgorithmType="FSA" 
          HighlightAlgorithmType="Simple"></graphsharp:GraphLayout> 
    </zoom:ZoomControl> 
    <Button Content="Button" Height="23" Name="button1" Width="75" Margin="12,294,658,412" Click="button1_Click" /> 
</Grid> 

Теперь я хочу сохранить свою «graphLayout» в PDF-файл с помощью PDFsharp. Я создал кнопку и в основном использовал образец кода «hello world» в wiki pdfsharp для запуска.

PdfDocument document = new PdfDocument(); 
     document.Info.Title = "Created with PDFsharp"; 
     PdfPage page = document.AddPage(); 
     XGraphics gfx = XGraphics.FromPdfPage(page); 
     XFont font = new XFont("Verdana", 20, XFontStyle.BoldItalic); 
     gfx.DrawString("My Graph", font, XBrushes.Black, 
      new XRect(0, 0, page.Width, page.Height), 
      XStringFormats.TopCenter); 
     const string filename = "MyGraph.pdf"; 
     document.Save(graphLayout+filename); 
     Process.Start(filename); 

Я получаю pdf, но в нем есть только текст. Может кто-нибудь сказать мне, пожалуйста, как я могу сохранить весь макет в формате pdf? благодаря

+0

Могу ли я узнать контроль, который вы используете для поддержки масштабирования <зум: ZoomControl> Это какие-то внешние инструменты? –

+0

Я не помню, потому что это слишком давно, но я думаю, что это была библиотека, которую я использовал: http://wpfextensions.codeplex.com/ – AndyB

ответ

9

Читать документацию: http://www.pdfsharp.net/wiki/Graphics.ashx?AspxAutoDetectCookieSupport=1

Я не знаю, что вы можете преобразовать непосредственно из WPF в PDF, но это довольно просто

с WPF < -> XPS < -> PDF.

MemoryStream lMemoryStream = new MemoryStream(); 
Package package = Package.Open(lMemoryStream, FileMode.Create); 
XpsDocument doc = new XpsDocument(package); 
XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(doc); 
writer.Write(dp); 
doc.Close(); 
package.Close(); 

var pdfXpsDoc = PdfSharp.Xps.XpsModel.XpsDocument.Open(lMemoryStream); 
PdfSharp.Xps.XpsConverter.Convert(pdfXpsDoc, d.FileName, 0); 

где дп ваш Визуальное/расположение

источники:

http://www.nathanpjones.com/wp/2013/03/output-to-pdf-in-wpf-for-free/

http://www.pdfsharp.net/wiki/PDFsharpSamples.ashx

+2

спасибо за ссылку, это работает, но вы должны добавить PdfSharp.Xps.dll образуют версию PdfSharp версии 1.31, функция конвертирования в xps недоступна в последней версии 1.32. – AndyB

+0

@ erti - chris Я потерял изображения при преобразовании xps в pdf? – Meer