Question: How would ya'll recommend that I convert a FlowDocument to PDF to be attached to an EMail?

The FlowDocument is dynamic, not static.

I would prefer to be able to store the PDF in memory as a byte[], rather than on disk, but that is negotiable.

Thanks for your help!

Answer: 
I am assuming you want this to occur programmatically rather than as a manual process.

**Method 1:** Install a PDF driver such as [Amyuni](http://www.amyuni.com/en/enduser/pdfconverterend) or [PrimoPDF](http://www.primopdf.com/). Print your FlowDocument with the desired PrintTicket / page size, to the print driver. The PDF you get from it should be a fairly good conversion. Some of these drivers (such as Amyuni) have SDKs that you can control this process programmatically.

**Method 2:** Print to XPS programmatically using an XPS driver without a Save As dialog; there's a sample for this in the Windows DDK you can build yourself fairly easily. Then use an XPS to PDF converter such as [NiXPS](http://www.nixps.com/) or the Adobe SDK (so expensive I won't post a link) or [GhostXPS](http://ghostscript.com/GhostXPS.html) to convert the XPS directly to PDF.

**Method 3:** Convert the flow document directly into XPS using methods like [This one](http://blogs.msdn.com/b/fyuan/archive/2007/03/10/convert-xaml-flow-document-to-xps-with-style-multiple-page-page-size-header-margin.aspx) and then use an XPS to PDF converter such as the ones mentioned above.

Disclaimer: I don't work for any of these companies or their competitors. I've used the Adobe SDK, the Amyuni printer, and various XPS tricks with fairly good success. No method will convert with 100% accuracy.
When I needed to do this I saved the FlowDocument as an XPS file and finally converted to PDF with PDFSharp and deleted the XPS file

```
var test = (IDocumentPaginatorSource)flowDoc;
XpsDocument xpsDocument = new XpsDocument(xpsFileLocation, FileAccess.ReadWrite);
XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(xpsDocument);
writer.Write(test.DocumentPaginator);
xpsDocument.Close();            

PdfSharp.Xps.XpsConverter.Convert(xpsFileLocation, pdfFileLocation, 0);
File.Delete(xpsFileLocation);

```

Hope this helps someone