» »

c# tiho tiskanje slik.

c# tiho tiskanje slik.

OmegaM ::

Pozdravljeni.

Zanima me, kako bi lahko tiskal neko sliko, recimo nekaj_nekaj.jpg, ne da bi mi windows OS odprl vmesnik za tiskanje slik?

Namreč, sedaj imam resitev za PDF in office dokumente, tu pa me mori.

In se del kode.

 
// za PDF datoteke
if (File.Exists(@"C:\tmp\" + PDF.Name + ".pdf"))
            {
                try
                {
                    gsProcessInfo = new ProcessStartInfo();
                    gsProcessInfo.WindowStyle = ProcessWindowStyle.Hidden;
                    gsProcessInfo.FileName = gsLocation;
                    gsProcessInfo.Arguments = gsArguments;

                    gsProcess = Process.Start(gsProcessInfo);
                    gsProcess.WaitForExit();
                }
                catch
                {
                    MessageBox.Show("Napaka!");
                }
            }
            else
            {
                potDatoteka = @"c:\tmp\" + PDF.Name;
                try
                {

                    if (KoncniceSlik.Contains(Path.GetExtension(potDatoteka).ToUpperInvariant()))
                    {
                        MessageBox.Show("To je slika!");
                    }
                    else // rešitev za office orodja
                    {
                        System.Diagnostics.Process printanje = new System.Diagnostics.Process();
                        printanje.StartInfo.FileName = potDatoteka;
                        printanje.StartInfo.CreateNoWindow = true;
                        printanje.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                        printanje.StartInfo.Verb = "print";
                        printanje.Start();
                    }
                catch(Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }


Ker sedaj se zgodi, da poslje, ampak se mi vedno pokaze tisti carovnik za printanje datotek.
Vprasal sem tudi strica googla pa ... zal nic.

Hvala.
Ni nam lahko, bo pa boljše!!!

_Dormage_ ::

Če google ne zna potem bi se jaz lotil zadeve tako.
Uporabi tisto kar znaš.
Z c# vstavi sliko v wordov dokument in tega sprintaj.
tip: http://social.msdn.microsoft.com/forums...

Poročaj, če lahko ker me zanima.:)

japol ::

Bitmap slika;
        private void tiskanjeSlikToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //izberemo sliko
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                    //nastavitve za tiskanje dokumenta naj bodo take, kot smo jih določili v PrintDialogu
                    printDocument2.PrinterSettings = printDialog1.PrinterSettings;
                    //določimo ime TISKARNIŠKEGA posla - POZOR: TO NI IME dokumenta, ki ga želimo natisniti!!
                    printDocument2.DocumentName = "Tiskanje SLIKE: " + openFileDialog1.FileName;
                    slika=new Bitmap(openFileDialog1.FileName,true);
                    //Pred dokončnim tiskanjem MORAMO definirati še dogodek PtintPage, kjer povemo, kaj bomo sploh tiskali
                    printDocument2.Print();//dokument sedaj lahko natisnemo                  
            }
        }

        private void printDocument2_PrintPage(object sender, PrintPageEventArgs e)
        {
          //metoda DrawImage natisne sliko na določeno pozicijo. Slika je v originalni velikosti
          e.Graphics.DrawImage( slika,0,0);
        }

Opomba: namesto openfiledialoga ti določi sliko ali pot do slike,...

Upam da ti to kaj pomaga. Sporoči prosim napredek.

Zgodovina sprememb…

  • spremenil: Vesoljc ()

OmegaM ::

No meni je uspelo, ampak na malo drugacni nacin. ...

//Najprej sem incializiral List za koncnice slik
public static readonly List<string> KoncniceSlik = new List<string> { ".JPG", ".JPE", ".BMP", ".GIF", ".PNG" };

//Tu je del metode kjer preverjam ali je v datoteki koncnica katero sem navedel v //zgornjem Listu
try
                {
                    System.Diagnostics.Process printanje = new System.Diagnostics.Process();

                    if (KoncniceSlik.Contains(Path.GetExtension(potDatoteka).ToUpperInvariant()))
                    {

                        PrintDocument Slika = new PrintDocument();
                        Slika.PrintPage += this.Printanje_Slik; 
                        PrintDialog dlgSettings = new PrintDialog(); 
                        dlgSettings.Document = Slika;
                        Slika.Print(); 
                    }

//........

//Metoda za printanje ko je slika nalozena
private void Printanje_Slik(object sender, PrintPageEventArgs ev)
        {
            try
            {
                Image Slika = Image.FromFile(potDatoteka);
                PointF pf = new PointF(10, 10);
                ev.Graphics.DrawImage(Slika, pf);
            }
            catch(Exception Napaka)
            {
                MessageBox.Show(Napaka.ToString());
            }
        }


Pri meni je bil interes da posljem sliko na tiskalnik brez kakega vmesnika, dialoga.
Ce se ne motim, sedaj ko sem tu na hitro pri Japol-u, pa se pojavi dialog za tiskanje slik.
Ni nam lahko, bo pa boljše!!!

Zgodovina sprememb…

  • spremenilo: OmegaM ()

japol ::

super, hvala. Se mal tudi sam igram s tem in to kar prou pride.
Kako si določil "potDatoteka"? kot npr.: string potDatoteka = textBox4.Text; in vpis je npr.: D:\f1.bmp ali kako drugače?

Imam še primer:

 private PrintDocument printDocument35 = new PrintDocument();
        private PrintPreviewDialog printPreviewDialog35 = new PrintPreviewDialog();

        private void button35_Click(object sender, EventArgs e)
        {
            pd35.DocumentName = textBox4.Text;
            pd35.PrintPage += new PrintPageEventHandler(pd35_PrintPage);
            using (FileStream fs = new FileStream(pd35.DocumentName, FileMode.Open))

            using (StreamReader sr = new StreamReader(fs))
            {
                strPrint35 = sr.ReadToEnd();
            }
            pd35.Print();
        }


in definiral sem pd35_PrintPage

OmegaM ::

Pot sem dolocil kot string.

Tezavo sem imel, ko sem hotel uporabiti direktno tiskanje in priponke recimo, zato sem se znasel in datoteko shranil na c:\tmp\ + me datoteke, od tam tiskam brez kaksrnih koli tezav.

Npr.:
//Fizicno shranim na disk
Datoteka.Load(@"C:\tmp\" + Datoteka.Name);
//Nalozim se v string
string potDatoteka = @"c:\tmp\" + Datoteka.Name;


Na koncu lahko to datoteko brisem ali pa pac pustim.

Skratka, tako mi deluje brez tezav.

Hotel sem tudi, da bi poslal kar stream proti tiskalniku, ampak nekako c# ni uposteval mojih zelja :D

Ampak vidim, da je tvoj primer za probat :)
Ti si ga ze mogoce probal? Recimo pri datotekah tipa word, excel, mi edino odpre, ampak za mogoce 2 sek najvec pa spet zapre.
Ce to deluje, bi to bil zakon.

Ce te zanima, za tiskanje pdf datotek uporabljam gsprint, orodje od gsview kateri omogoca prebiranje PDF datotek, in z uporabo gsprint.exe tiho printam oz. tiskam na tiskalnik brez kakrsnega koli vmesnika, dialoga.
Ni nam lahko, bo pa boljše!!!

Zgodovina sprememb…

  • spremenilo: OmegaM ()

OmegaM ::

Ko uporabim tvoj primer, kateri je tudi naveden na msdn, mi vedno ko mi print klice print event javi napako za referenco, mi lahko mogoce poves kje bi lahko bila napaka?
Napaka nastane ...
private void pd35_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;

            //<strong> Tu mi vedno vrne napako</strong>.
            linesPerPage = ev.MarginBounds.Height / printFont.GetHeight(ev.Graphics);

            // Print each line of the file.
            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;
        }
Ni nam lahko, bo pa boljše!!!

OmegaM ::

Ok, mislim da je uspelo, tvojo kodo zgoraj malo spremenil.

streamToPrint = new System.IO.StreamReader(potDatoteka);
                       // printFont = new System.Drawing.Font("Arial", 10);
                        printDocument1.Print();
                        streamToPrint.Close();


Ampak imam tezavo ker mi je lih zmanjkalo tonerja :D

Bom kar probal se na drugi nacin :D

No ja, poslje mi, ampak dobim prazen list :)
Ni nam lahko, bo pa boljše!!!

Zgodovina sprememb…

  • spremenilo: OmegaM ()

OmegaM ::

Ta primer sem skusal uporabiti za tiskanje word dokumentov, ampak, tezava se pojavi, ker ce je slucajno vec strani moram napisati kak font zelim imeti.
Nisem pa nasel resitve, da bi uporabil kar iz worda oz. iz docx dokumenta.
Za slike ko printam je idealka, tiskam tudi lahko html brez dialoga, slike, pdf, edino z office se za trenutek odpre in zapre.

null sem prej dobil ker nisem povedal kaksen font hocem.
Ni nam lahko, bo pa boljše!!!

Ericssony ::

OmegaM je izjavil:

Ampak imam tezavo ker mi je lih zmanjkalo tonerja :D


Ni škoda tiskalnika, papirja in še česa dokler testiraš? Tiskaj raje v XPS ali pa PDF...

OmegaM ::

Saj drugace printam v PDF, samo nekatere stvari sprobam v zivo.
Uporabljam pa papir, ki je zavrzen, tiskano z napako, itd.
Ni nam lahko, bo pa boljše!!!


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Program za set back time (RUN AS DATE)

Oddelek: Programska oprema
374863 (4487) Yacked2
»

[Java]: replace - slovar v txt

Oddelek: Programiranje
121699 (1557) Spura
»

VB.net Excel v Tif

Oddelek: Programiranje
121150 (1049) saule
»

[Java] Shranjevanje podatkov in datotek

Oddelek: Programiranje
71234 (1187) Vesoljc
»

Enostavno tiskanje v VB.NET

Oddelek: Programiranje
52233 (2147) skorc_norc

Več podobnih tem