#.net #printing
#.net #печать
Вопрос:
Я хотел бы преобразовать несколько файлов emf в один файл для печати. Идея состоит в том, чтобы иметь возможность печатать несколько файлов emf в один PDF с помощью виртуального принтера. Существует ли какой-либо стандарт Windows (преобразование в spl и печать) или бесплатный способ?
Спасибо!
Редактировать: Я понял, что могу сделать это в .net c #, используя класс PrintDocument . Но все еще возникает проблема, как установить правильный размер страницы и ориентацию в соответствии с метафайлом.
Ответ №1:
Наконец-то создано решение.
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;
}
}