Я использовал C # для печати файла в PDF, используя принтер Microsoft Print to PDF.Файл был успешно создан.Но я не могу открыть это, потому что Adobe Reader говорит, что файл поврежден.Это код
PrintDocument pd = new PrintDocument
{
PrinterSettings = new PrinterSettings
{
PrinterName = "Microsoft Print to PDF (redirected 2)",
PrintToFile = true,
PrintFileName = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "/test.pdf"
}
};
pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
pd.Print();
Но если я использую тот же код без PrinterSettings, он запрашивает место назначения и имя файла.Если я укажу оба, то он создаст файл PDF.Это я могу открыть с помощью Adobe Reader.Код показан ниже
PrintDocument pd = new PrintDocument();
pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
pd.Print();
Не уверен, что мне не хватает в первом подходе.Пожалуйста помоги.Приведенная ниже часть является реализацией для pd_PrintPage
private void pd_PrintPage(object sender, PrintPageEventArgs ev)
{
float linesPerPage = 0;
float yPos = 0;
int count = 0;
float leftMargin = ev.MarginBounds.Left;
float topMargin = ev.MarginBounds.Top;
String line = null;
// Calculate the number of lines per page.
linesPerPage = ev.MarginBounds.Height /
printFont.GetHeight(ev.Graphics);
// Iterate over the file, printing each line.
while (count < linesPerPage &&
((line = streamToPrint.ReadLine()) != null))
{
yPos = topMargin + (count * printFont.GetHeight(ev.Graphics));
ev.Graphics.DrawString(line, printFont, Brushes.Black,
leftMargin, yPos, new StringFormat());
count++;
}
// If more lines exist, print another page.
if (line != null)
ev.HasMorePages = true;
else
ev.HasMorePages = false;
}
PS: я ссылался на Как программно печатать в файл PDF без запроса имени файла в C # с помощью принтера Microsoft Print To PDF, который поставляется с Windows 10 для кода.