.net 将多个EMF文件转换为一个EMF文件

.net 将多个EMF文件转换为一个EMF文件,.net,printing,.net,Printing,我想将多个emf文件转换为一个可打印文件。其想法是能够使用虚拟打印机将多个emf打印到一个pdf中。 是否有windows标准(转换为spl和打印)或免费方式 谢谢大家! 编辑:我发现我可以在.NETC#中使用PrintDocument类来完成。但是,如何根据图元文件设置正确的页面大小和方向仍然存在问题 最终创建了解决方案 public class MetafilePrinter { private Queue<Metafile> m_MetafileQueue = new

我想将多个emf文件转换为一个可打印文件。其想法是能够使用虚拟打印机将多个emf打印到一个pdf中。 是否有windows标准(转换为spl和打印)或免费方式

谢谢大家!


编辑:我发现我可以在.NETC#中使用PrintDocument类来完成。但是,如何根据图元文件设置正确的页面大小和方向仍然存在问题

最终创建了解决方案

public class MetafilePrinter
{
    private Queue<Metafile> m_MetafileQueue = new Queue<Metafile>();
    private Metafile m_CurrentMetafile;
    private MetafileHeader m_CurrentMetafileHeader; 

    public bool PrintMetaFiles(IEnumerable<string> emfFiles, string printerName)
    {
        foreach (var emfFile in emfFiles)
        {
            m_MetafileQueue.Enqueue(new Metafile(emfFile));
        }

        var printDocument = new PrintDocument();
        printDocument.PrinterSettings.PrinterName = printerName; 
        printDocument.QueryPageSettings += printDocument_QueryPageSettings;
        printDocument.PrintPage += printDocument_PrintPage;
        printDocument.Print();

        return true; 
    }

    void printDocument_QueryPageSettings(object sender, QueryPageSettingsEventArgs e)
    {
        m_CurrentMetafile = m_MetafileQueue.Dequeue();
        m_CurrentMetafileHeader = m_CurrentMetafile.GetMetafileHeader();
        e.PageSettings.Landscape = m_CurrentMetafile.Width < m_CurrentMetafile.Height;
        e.PageSettings.Margins = new Margins(0, 0, 0, 0);

        int paperSizeWidht = (int)((m_CurrentMetafile.Width * 100) / m_CurrentMetafileHeader.DpiY); 
        int paperSizeHeight = (int)((m_CurrentMetafile.Height * 100) / m_CurrentMetafileHeader.DpiX);
        e.PageSettings.PaperSize = new PaperSize(string.Empty, paperSizeWidht, paperSizeHeight);
        e.PageSettings.PrinterResolution.X = (int)m_CurrentMetafileHeader.DpiX;
        e.PageSettings.PrinterResolution.Y = (int)m_CurrentMetafileHeader.DpiY; 
    }

    void printDocument_PrintPage(object sender, PrintPageEventArgs e)
    {
        e.Graphics.DrawImage(m_CurrentMetafile, e.MarginBounds);
        e.HasMorePages = m_MetafileQueue.Count != 0;
    }
}
公共类MetafilePrinter
{
专用队列m_MetafileQueue=新队列();
私有图元文件m_CurrentMetafile;
私有MetafileHeader m_CurrentMetafileHeader;
公共bool printerName文件(IEnumerable emfFiles、字符串printerName)
{
foreach(emfFiles中的var emfFile)
{
m_MetafileQueue.Enqueue(新图元文件(emfFile));
}
var printDocument=新的printDocument();
printDocument.PrinterSettings.PrinterName=PrinterName;
printDocument.QueryPageSettings+=printDocument\u QueryPageSettings;
printDocument.PrintPage+=printDocument\u PrintPage;
printDocument.Print();
返回true;
}
作废打印文档\u查询页面设置(对象发送者,查询页面设置七个参数e)
{
m_CurrentMetafile=m_MetafileQueue.Dequeue();
m_CurrentMetafileHeader=m_CurrentMetafile.GetMetafileHeader();
e、 PageSettings.Landscape=m_CurrentMetafile.Width