Я новичок в c #. Я искал во всей сети учебники о том, как печатать PDF, но не смог найти.
Тогда я подумал, возможно ли прочитать его, используя itextpdf, как упомянуто здесь
Чтение содержимого PDF с помощью itextsharp dll в VB.NET или C #
распечатай это. Если да, то как?
Очень простой подход заключается в использовании установленного Adobe Reader или любого другого средства просмотра PDF, способного печатать:
Process p = new Process( );
p.StartInfo = new ProcessStartInfo( )
{
CreateNoWindow = true,
Verb = "print",
FileName = path //put the correct path here
};
p.Start( );
Другим способом является использование стороннего компонента, например, PDFView4NET
Также возможно сделать это с помощью встроенного веб-браузера, однако заметьте, что, поскольку это может быть локальный файл, а также потому, что он не является браузером напрямую и DOM отсутствует, значит, нет состояния готовности.
Вот код для подхода, который я разработал для управления веб-браузером в выигрышной форме:
private void button1_Click(object sender, EventArgs e)
{
webBrowser1.Navigate(@"path\to\file");
}
private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
//Progress Changed fires multiple times, however after the Navigated event it is fired only once,
//and at this point it is ready to print
webBrowser1.ProgressChanged += (o, args) =>
{
webBrowser1.Print();//Note this does not print only brings up the print preview dialog
//Should be on a separate task to ensure the main thread
//can fully initialize the print dialog
Task.Factory.StartNew(() =>
{
Thread.Sleep(1000);//We need to wait before we can send enter
//This assumes that the print preview is still in focus
Action g = () =>
{
SendKeys.SendWait("{ENTER}");
};
this.Invoke(g);
});
};
}
Лучший способ автоматически напечатать pdf из C # - использовать принтер «прямой pdf». Вам просто нужно скопировать файл PDF в сетевое имя принтера. Об остальном позаботится сам принтер.
Скорость в 10 раз выше, чем у любых других методов. Тем не менее, требования - это модель принтера, поддерживающая прямую печать в формате PDF и имеющая не менее 128 МБ драм, что легко для любого современного принтера.
read
, потому что это хорошо работало 30 лет назад и все еще делает для меня. Современный стиль должен использовать read -r
, потому что read
был забит процессом POSIX-ization. Ваш вызов — I' m не собирающийся нарушаться, если Вы используете read -r
, пока можно объяснить, от чего это защищает Вас по сравнению с использованием read
, и можно объяснить, почему Вы заботитесь о той защите.
– Jonathan Leffler
07.02.2020, 04:08
Если у вас установлено Adobe Reader
, вы можете просто установить его в качестве принтера по умолчанию. И ВОЙЛА! Вы можете распечатать в PDF!
printDocument1.PrinterSettings.PrinterName = "Adobe PDF";
printDocument1.Print();
Так же просто, как это!
Это зависит от того, что вы пытаетесь напечатать. Вам нужно стороннее приложение для принтера pdf или, если вы печатаете свои собственные данные, вы можете использовать средство просмотра отчетов в Visual Studio. Он может выводить отчеты в Excel и PDF-файлы.
Открывайте, импортируйте, редактируйте, объединяйте, конвертируйте документы Acrobat PDF с помощью нескольких строк кода, используя интуитивно понятный API Ultimate PDF. Используя на 100% управляемый код, написанный на C #, компонент использует многочисленные встроенные функции .NET Framework для повышения производительности. Более того, библиотека совместима с CLS и не использует небезопасных блоков для минимальных требований к разрешениям. Занятия полностью документированы с подробным примером кода, который помогает сократить вашу кривую обучения. Если ваша среда разработки Visual Studio, наслаждайтесь полной интеграцией онлайн-документации. Просто пометьте или выберите ключевое слово и нажмите клавишу F1 в вашей IDE Visual Studio, и онлайн-документация будет отображена мгновенно. Высокопроизводительная и надежная библиотека PDF, которая позволяет легко добавить функциональность PDF в ваши приложения .NET с помощью нескольких строк кода.
y
в качестве примера, я работал: while read line; do echo $line; done < y; echo $line
и действительно получил четыре различных отраженные значения. I' m не верный it' s особенно полезное или интуитивное поведение, но...
– Jonathan Leffler
07.02.2020, 04:08
Похоже, что обычные подозреваемые, такие как pdfsharp и migradoc, не могут этого сделать (pdfsharp, только если у вас установлен Acrobat (Reader)).
Я нашел здесь
готов к копированию / вставке. Он использует принтер по умолчанию и, насколько я вижу, он даже не использует никаких библиотек, напрямую отправляя PDF-байты на принтер. Поэтому я предполагаю, что принтер также должен поддерживать его, на одном 10-летнем принтере, который я тестировал, он работал безупречно.
Большинство других подходов - без коммерческих библиотек или приложений - требуют, чтобы вы рисовали себя в контексте устройства печати. Выполнимо, но потребуется время, чтобы разобраться и заставить его работать на всех типах принтеров.
Самый простой способ - создать C # Process и запустить внешний инструмент для печати вашего PDF-файла
private static void ExecuteRawFilePrinter() {
Process process = new Process();
process.StartInfo.FileName = "c:\\Program Files (x86)\\RawFilePrinter\\RawFilePrinter.exe";
process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
process.StartInfo.Arguments = string.Format("-p \"c:\\Users\\Me\\Desktop\\mypdffile.pdf\" \"gdn02ptr006\"");
process.Start();
process.WaitForExit();
}
Приведенный выше код запускает RawFilePrinter.exe (аналог 2Printer.exe), но с лучшей поддержкой. Это не бесплатно, но сделав пожертвование, вы сможете использовать его повсюду и распространять вместе с вашим приложением. Последняя версия для загрузки: http://bigdotsoftware.pl/rawfileprinter
Можно использовать Ghostscript для чтения файлов PDF и распечатывать их на указанном принтере.
Используйте PDFiumViewer. Я долго искал, пока не нашел похожее решение, потом нашел этот чистый кусок кода, который не полагается на отправку необработанных файлов на принтер (что плохо, если их интерпретируют как текстовые файлы ...) или использование Acrobat или Ghostscript в качестве помощника (оба должны быть установлены, что создает трудности):
https://stackoverflow.com/a/41751184/586754
PDFiumViewer поставляется через nuget, приведенный выше пример кода завершен. Передайте нулевые значения для использования принтера по умолчанию.
У меня была такая же проблема при печати файла PDF. Есть пакет nuget под названием Spire.Pdf, который очень прост в использовании. Бесплатная версия имеет ограничение в 10 страниц, хотя, в моем случае, это было лучшее решение, если я не хочу зависеть от Adobe Reader и не хочу устанавливать какие-либо другие компоненты.
https://www.nuget.org/packages/Spire.PDF/
PdfDocument pdfdocument = new PdfDocument();
pdfdocument.LoadFromFile(pdfPathAndFileName);
pdfdocument.PrinterName = "My Printer";
pdfdocument.PrintDocument.PrinterSettings.Copies = 2;
pdfdocument.PrintDocument.Print();
pdfdocument.Dispose();
PDF-документ можно создать с помощью PdfSharp . Это библиотека с открытым исходным кодом .NET.
При попытке распечатать документ стало еще хуже. Я всегда искал способ сделать это с открытым исходным кодом . Есть несколько способов сделать это, используя AcroRd32.exe , но все это зависит от версии, и это невозможно сделать, если Acrobat Reader остается открытым.
В конце концов я использовал VintaSoftImaging.NET SDK . Это стоит некоторых денег, но намного дешевле, чем альтернатива, и это решает проблему очень легко.
var doc = new Vintasoft.Imaging.Print.ImagePrintDocument { DocumentName = @"C:\Test.pdf" };
doc.Print();
Это просто печатает на принтер по умолчанию, не показывая. Есть несколько альтернатив и вариантов.
Другой подход, если вы просто хотите напечатать файл PDF программным способом, это использовать команду LPR: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en -us / lpr.mspx? mfr = true
LPR также доступен в более новых версиях Windows (например, Vista / 7), но его необходимо включить в дополнительных компонентах Windows.
Например:
Process.Start("LPR -S printerdnsalias -P raw C:\files\file.pdf");
Вы также можете использовать IP-адрес принтера вместо псевдонима.
Предполагается, что ваш принтер поддерживает PDF Direct Printing , иначе это будет работать только для файлов PostScript и ASCII. Кроме того, на принтере должен быть установлен сетевой интерфейс, и вам необходимо знать его IP-адрес или псевдоним.
complete -F
doesn' t работа для Вас, см. ответ [приблизительно 111] ниже stackoverflow.com/a/24665529/3779
– Steve Clay
31.12.2019, 06:12
я написал очень (!) Маленький вспомогательный метод вокруг adobereader для массовой печати pdf из c # ...:
public static bool Print(string file, string printer) {
try {
Process.Start(
Registry.LocalMachine.OpenSubKey(
@"SOFTWARE\Microsoft\Windows\CurrentVersion" +
@"\App Paths\AcroRd32.exe").GetValue("").ToString(),
string.Format("/h /t \"{0}\" \"{1}\"", file, printer));
return true;
} catch { }
return false;
}
нельзя полагаться на возвращаемое значение метода btw .. .
Советую попробовать инструмент командной строки 2Printer по адресу: http://www.doc2prn.com/
Пример командной строки для печати всех файлов PDF из папки «C: \». Вход "ниже. Вы можете просто вызвать его из своего кода C #.
2Printer.exe -s "C: \ Input * .PDF" -prn "Принтер серии Canon MP610"
__git_complete
функция в моем пакете завершения удара (установленный через домашнее пиво с brew install bash-completion
), который в настоящее время не получался в моем профиле удара. Должна была добавить эта строка к ~/.bash_profile: [ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion
– jangosteve
31.12.2019, 06:12