Программно печатать каталог текстовых документов... последний файл всегда пропускается
У меня возникла проблема при попытке программно напечатать каталог документов Word. В этом примере я пытаюсь распечатать только файлы с префиксом "3_". Проблема в том, что файл не печатается, если нет двух файлов с префиксом 3_. Я искал вечно, чтобы понять эту проблему. Что-то не так с тем, как я открываю файл? Он работает только при наличии двух файлов в каталоге, и в этом случае он распечатает только один из двух файлов.
Изменить: я попытался окно сообщения, и путь правильный. Имя файла правильное. Кроме того, если я наблюдаю за принтером в папке принтеров, документ будет мигать в течение короткой секунды, а затем исчезнет (печать приостановлена, чтобы я мог видеть вывод). Если слово дает мне ошибку, почему оно не отображается? И почему это работает, если в каталоге есть два файла с префиксом 3_?
Изменить: я думаю, что это проблема с методом printout(). Когда я устанавливаю приложение видимым и запускаю его, документ открывается нормально, но ничего не печатается. Я могу открыть документ вручную и распечатать (что отлично работает).
Редактировать: Спасибо всем за ответы. Был задан фоновый параметр в методе printout(). Программа закрывалась до того, как печать могла полностью заскочить (вот почему я видел, как документ мигал в очереди печати и исчезал. Отключение фоновой печати требовало, чтобы документ оставался открытым, и печать была ключевой. Спасибо
string[] filesToCheck = Directory.GetFiles(clientDirectoryPath);
Object filename = null;
for (int i = 0; i < filesToCheck.Count();i++ )
{
if(filesToCheck[i].Contains("3_"))
{
filename = filesToCheck[i];
wrdDoc = wrdApp.Documents.Open(ref filename, ref oMissing, ref oTrue, ref oFalse,
ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing);
wrdDoc.PageSetup.FirstPageTray = letterHeadTray;
wrdDoc.PageSetup.OtherPagesTray = defaultTray;
wrdDoc.PrintOut(ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing);
wrdDoc.Close(ref oFalse, ref oMissing, ref oMissing);
wrdDoc = null;
}
}
4 ответа
Попробуйте установить для параметра Background (1-й параметр) вызова PrintOut() значение False.
Возможно, последнее задание на печать не полностью помещено в буфер и отменено, поскольку объект Word COM выпущен слишком рано.
Попробуйте использовать
string[] files = Directory.GetFiles(dir, "3_*.doc");
foreach(string file in files) { }
вместо
for (int i = 0; i < filesToCheck.Count(); i++ ) { }
Там нет ничего плохого в вашем опубликованном алгоритме. Можете ли вы попробовать следующее
- Добавить точку останова и убедиться, что объект filesToCheck содержит все имена файлов? Возможно, это значение неверно и сбрасывает ваш алгоритм
- Вместо того, чтобы печатать документ, вместо этого измените код, чтобы вызвать окно сообщения для каждого имени файла. Это устранит фактическую печать, являющуюся частью проблемы (не вижу, как это могло бы быть).
Кроме того, не могли бы вы опубликовать код, который получает объект filesToCheck?
РЕДАКТИРОВАТЬ
ОП упомянул, что все файлы определенно проходят. Попробуйте обернуть операцию печати в блок try/catch и посмотрите, нет ли каких-либо исключений, которые мешают печати файлов.
Попробуйте не использовать "_" в имени файла. Я видел некоторые странные причуды раньше с этим зарядным устройством и PrintOut.