Nasıl bir web hizmetinden bir HTML belgesi yazdırırım?

oy
68

Bir C # web hizmetinden HTML yazdırmak istiyorum. Web tarayıcı kontrolü overkill ve bir hizmet ortamında iyi çalışmadığını, ne de çok sıkı güvenlik kısıtlamaları ile bir sistemde de işlev görüyor. Ücretsiz herhangi bir tür var mı .NETbir temel HTML sayfasının baskı destekleyecek kütüphaneye? İşte düzgün çalışmaz var bugüne kadar koddur.

public void PrintThing(string document)
{
    if (Thread.CurrentThread.GetApartmentState() != ApartmentState.STA)
    {
        Thread thread =
            new Thread((ThreadStart) delegate { PrintDocument(document); });
        thread.SetApartmentState(ApartmentState.STA);
        thread.Start();
    }
    else
    {
        PrintDocument(document);
    }
}

protected void PrintDocument(string document)
{
    WebBrowser browser = new WebBrowser();
    browser.DocumentText = document;
    while (browser.ReadyState != WebBrowserReadyState.Complete)
    {
        Application.DoEvents();
    }
    browser.Print();
}

UI tipi parçacığı çağrıldığında bu çalışıyor, ama hiçbir şey bir hizmet tipi iplik çağrıldığında gerçekleşir. Değişen Print()için ShowPrintPreviewDialog()verim aşağıdaki IE komut dosyası hatası:

Hata: 'dialogArguments .___ IE_PrintType' null veya bir nesne değil
URL: res: //ieframe.dll/preview.dlg

Ve küçük boş baskı önizleme iletişim kutusu görüntülenir.

Oluştur 01/08/2008 saat 19:33
kaynak kullanıcı
Diğer dillerde...                            


7 cevaplar

oy
29

Sen aşağıdakileri kullanarak komut satırından yazdırabilirsiniz:

rundll32.exe% WINDIR% \ System32 \ mshtml.dll, PrintHTML "% 1"

% 1 olduğu durumda HTML dosyasının dosya yolu basılabilir.

Eğer bellekten yazdırma gerekmez (veya geçici dosyada diske yazma yapabiliyor) Eğer kullanabilirsiniz:

using (Process printProcess = new Process())
{
    string systemPath = Environment.GetFolderPath(Environment.SpecialFolder.System);
    printProcess.StartInfo.FileName = systemPath + @"\rundll32.exe";
    printProcess.StartInfo.Arguments = systemPath + @"\mshtml.dll,PrintHTML """ + fileToPrint + @"""";
    printProcess.Start();
}

NB Bu yalnızca Windows 2000 ve sanırım yukarıdaki çalışır.

Cevap 03/08/2008 saat 19:06
kaynak kullanıcı

oy
3

Kolay! İki basit bölüme sorununuzu Böl:

  1. PDF HTML işlemek
  2. PDF (yazdırmak SumatraPDF )
  • -print-to-default $file.pdf Varsayılan bir yazıcıda PDF dosyası yazdırır
  • -print-to $printer_name $file.pdf Belirli bir yazıcıda PDF yazdırır
Cevap 15/08/2012 saat 14:27
kaynak kullanıcı

oy
3

Bütçeye (~ 3000 $) 'de var ise, kontrol PrinceXML .

Bu bir hizmet ortamında iyi bir PDF içine fonksiyonları HTML işlemek ve böyle bir tablo hücresinin (tarayıcıların bir sürü şu anda yok destekleyen) ortasında bir sayfa kırılma değil gibi gelişmiş özellikleri destekler olacaktır.

Cevap 12/04/2010 saat 18:57
kaynak kullanıcı

oy
3

Ben Visual Studio kendisi (en azından 2003 versiyonu) IE doğrudan "Tasarım Görünümü" işlemek için dll başvuran biliyoruz.

O bakarak değer olabilir.

Aksi takdirde, ben Web Tarayıcısı kontrolü dışında bir şey düşünemiyorum.

Cevap 02/08/2008 saat 01:42
kaynak kullanıcı

oy
0

Benim için çok iyi çalışıyor ben aracı HiQPdf olduğunu. https://www.hiqpdf.com/

Fiyatı makul ($ 245 başlar) ve bir PDF HTML işlemek ve ayrıca doğrudan PDF dosyalarının baskı yönetebilir.

Cevap 08/09/2019 saat 05:35
kaynak kullanıcı

oy
0

Belki bu yardımcı olur. http://www.codeproject.com/KB/printing/printhml.aspx Eğer tarayıcı kontrolünü erişmeye çalışan, ancak STA olması gerekeni iplik Ayrıca emin

Not - linkte anılan proje bir sayfaya gidin ve yazdırma iletişim kutusunu göstermeden bir baskı gerçekleştirmek için izin vermez.

Cevap 17/06/2009 saat 18:36
kaynak kullanıcı

oy
-1

Ben özel araçlar bilmiyorum ama kayıt / oynatma tıkladığında bazı araçlar vardır. Başka bir deyişle, baskı iletişim kutusunda "tıklama" otomatikleştirebildiğiniz. (Her şeyin başarısız olduğunda ben ... Bu kesmek biliyorum ama)

Cevap 20/09/2008 saat 18:37
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more