Saya bekerja pada sebuah proyek sekarang yang melibatkan menerima pesan dari aplikasi lain, format isi pesan itu, dan mengirimnya ke printer. Teknologi pilihan adalah C# windows service. Output bisa disebut sebuah laporan, saya kira, tapi mesin pelaporan yang tidak diperlukan. Sederhana templating engine, seperti StringTemplate, atau bahkan XSLT keluaran HTML akan baik-baik saja. Masalah saya'm memiliki adalah menemukan cara gratis untuk cetak semacam ini output dari layanan. Sejak itu sepertinya bahwa itu akan bekerja, aku'm bekerja pada sebuah prototipe menggunakan Microsoft's RDLC, mengisi laporan lokal dan kemudian render sebagai gambar ke memori stream, yang kemudian akan saya cetak. Masalah dengan itu adalah:
Memiliki siapa pun untuk melakukan apa pun yang seperti ini? Ada saran? Saya sudah memposting pertanyaan tentang percetakan HTML tanpa input pengguna, dan setelah membuang sekitar 3 hari itu, saya telah sampai pada kesimpulan bahwa hal itu tidak dapat dilakukan, setidaknya tidak dengan bebas tersedia alat.
Semua bantuan akan sangat dihargai.
EDIT: Kami adalah pada versi 2.0 .NET framework.
Percayalah, anda akan menghabiskan lebih banyak uang berusaha untuk mencari/mengembangkan solusi untuk ini dibandingkan dengan membeli komponen pihak ketiga. Tidak reinvent the wheel, dan pergi untuk dibayar solusi.
Percetakan adalah sebuah masalah yang kompleks dan saya akan senang untuk melihat hari ketika kerangka yang lebih baik dukungan ditambahkan untuk ini.
Mencetak dari Windows service adalah benar-benar menyakitkan. Tampaknya untuk bekerja... kadang-kadang... tapi akhirnya craches atau melempar pengecualian dari waktu ke waktu, tanpa ada alasan yang jelas. It's benar-benar putus asa. Secara resmi, it's bahkan tidak didukung, tanpa penjelasan apapun, maupun usulan untuk alternatif solusi.
Baru-baru ini, saya telah dihadapkan dengan masalah dan setelah beberapa kali gagal uji coba dan eksperimentasi, saya akhirnya datang dengan dua solusi yang layak:
I've dilakukan dengan itu. It's sakit di A*s. Masalahnya adalah bahwa pencetakan mensyaratkan bahwa GDI engine untuk berada di tempat, yang biasanya berarti bahwa anda telah memiliki desktop, yang hanya beban bila anda're login. Jika anda're mencoba untuk melakukan hal ini dari Layanan pada Server, maka biasanya anda tidak't log in.
Jadi, pertama anda dapat't berjalan seperti normal pengguna layanan, tetapi bukan sebagai real user yang telah interaktif hak-hak login. Kemudian anda harus men-tweak layanan entri registry (saya lupa bagaimana pada saat ini, akan memiliki untuk menemukan kode yang bisa saya lakukan malam ini jika anda're-benar tertarik). Akhirnya, anda harus berdoa.
Terbesar anda jangka panjang sakit kepala akan dengan driver cetak. Jika anda berjalan sebagai sebuah layanan tanpa login pengguna, beberapa driver cetak seperti pop up dialog dari waktu ke waktu. Apa yang terjadi ketika printer anda keluar dari toner? Atau keluar dari kertas? Pengemudi dapat pop up dialog yang tidak akan pernah terlihat, dan tunggu sampai printer antrian karena ada yang masuk!
Untuk menjawab pertanyaan pertama anda, ini bisa menjadi cukup lurus ke depan tergantung pada data. Kami memiliki berbagai Layanan berbasis aplikasi yang melakukan apa yang anda minta. Biasanya, kita mengurai berkas yang masuk dan membungkus kita sendiri Postscript atau PCL sekitar itu. Jika anda tata letak yang cukup sederhana, maka ada beberapa hal yang sangat dasar kode PCL anda dapat membungkusnya dengan memberikan huruf cetak/layup yang anda inginkan (saya'a akan lebih dari senang untuk memberikan beberapa petunjuk berikut ini offline).
Salah satu yang telah anda cetak berkas siap, anda dapat mengirim ke UNC pencetak yang dibagikan secara langsung ke printer yang diinstal secara lokal, atau bahkan untuk IP dari perangkat (MENTAH atau LPR jenis data).
Jika, namun, anda akan menyusuri PDF jalan, metode yang paling sederhana adalah dengan mengirim PDF output ke printer yang mendukung pencetakan PDF langsung (banyak lakukan sekarang). Dalam hal ini anda hanya mengirim PDF ke perangkat dan saat itu cetakan.
Pilihan lain adalah untuk meluncurkan Ghostscript yang harus bebas untuk kebutuhan anda (cek perizinan seperti mereka memiliki beberapa versi yang berbeda, beberapa GRATIS, beberapa GPL dll.) baik dengan menggunakan it's dibangun dalam fungsi cetak atau hanya mengkonversi ke Postscript dan kirim ke perangkat. I've digunakan Ghostscript berkali-kali dalam Layanan aplikasi tapi tidak penggemar besar karena anda pada dasarnya akan shelling out dan mengeksekusi baris perintah aplikasi untuk melakukan konversi. Bahwa menjadi kata, itu's sebuah aplikasi yang stabil yang tidak cenderung untuk gagal anggun
Mencetak dari layanan adalah ide yang buruk. Jaringan printer yang terhubung "per-user". Anda dapat menandai layanan untuk dijalankan sebagai pengguna tertentu, tapi saya'a menganggap bahwa yang buruk keamanan praktek. Anda mungkin dapat terhubung ke printer lokal, tapi saya'd masih ragu-ragu sebelum pergi rute ini.
Pilihan terbaik adalah untuk memiliki layanan menyimpan data dan memiliki pengguna yang meluncurkan aplikasi melakukan pencetakan dengan meminta layanan data. Atau lokasi umum bahwa data yang disimpan, seperti database.
Jika anda perlu untuk memiliki data dicetak sesuai interval yang teratur, pengaturan Tugas acara melalui Task Scheduler. Launching sebuah proses dari layanan akan memerlukan mengetahui user name dan password, yang lagi-lagi lebih buruk keamanan praktek.
Adapun pencetakan itu sendiri, menggunakan alat pihak ketiga untuk menghasilkan laporan tersebut akan menjadi yang paling mudah.
Kami menggunakan DevExpress' XtraReports untuk mencetak dari layanan tanpa masalah. Laporan mereka adalah model yang sangat mirip dengan Windows Forms, sehingga anda bisa dinamis memasukkan unsur-unsur teks dan kemudian mengeluarkan perintah cetak.
Jika anda dapat output ke posting script beberapa printer akan mencetak apa-apa yang akan di kirim melalui ftp ke direktori tertentu pada mereka.
Kami menggunakan ini untuk mendapatkan lalu cetak kredit yang kami universitas terbuka pada kita, tapi jika anda layanan output ke ps maka anda hanya bisa ftp ps file ke printer.
Ini mungkin tidak akan apa yang anda'kembali mencari, tetapi jika aku harus melakukan ini dengan cepat&kotor, saya akan:
Anda mungkin bisa juga jigger ini untuk mencetak dari web browser yang anda menjalankan dari layanan (meskipun saya'd merekomendasikan bangunan shell anda sendiri YAITU, daripada menggunakan browser penuh).
Untuk lebih rinci (juga gratis) solusi, anda bertaruh terbaik adalah mungkin untuk secara manual format dokumen diri sendiri (menggunakan GDI+ untuk melakukan tata letak untuk anda). Ini adalah membosankan, rawan kesalahan, memakan waktu, dan menghabiskan banyak kertas selama pengembangan, tetapi juga memberi anda kontrol atas apa yang's akan ke printer.
Dalam menjawab pertanyaan anda tentang PDF printing, saya belum menemukan solusi yang elegan. Saya "shell" ing keluar untuk Adobe yang dapat diandalkan dan diperlukan pengguna untuk log-in di semua kali. Untuk memperbaiki ini masalah tertentu, saya meminta agar file kita proses (faktur) yang akan diformat sebagai multi-halaman Tiff file yang dapat terpecah dan dicetak menggunakan native .NET fungsi pencetakan. Adobe's posisi tampaknya menjadi "mendapatkan pengguna untuk melihat file di Adobe Reader dan mereka dapat klik print". Tidak berguna.
Saya masih tertarik untuk menemukan cara yang baik untuk menghasilkan kualitas laporan yang dapat menjadi output dari web server...
Saya pikir kita akan pergi ke pihak ketiga rute. Aku suka XSL -> HTML> PDF -> Printer aliran... Winnovative's HTML to PDF terlihat baik untuk bagian pertama, tapi saya'm berlari ke blok menemukan yang baik PDF solusi pencetakan... ada saran? Pilihan lisensi yang akan di pengembang dasar, bukan pada dikerahkan runtime dasar.