Avatar billede up2nogood Nybegynder
29. januar 2006 - 13:46 Der er 13 kommentarer og
1 løsning

Autoprint af Word/PDF

Hejsa,

Jeg skal lave et program der læser fillokationer i en text eller kommafil, og automatisk printer dem.
Filerne kan være enten word eller PDF filer.

Jeg tænker mig noget med filerne står således:
C:\testpdf.PDF
C:\wordtester.doc
C:\wordtester.doc

Der kan altså godt være den samme fil op til flere gange.

Det gør ikke noget jeg skal printe igennem word eller acrobat reader...
Avatar billede driis Nybegynder
29. januar 2006 - 13:55 #1
Og hvilken del af projektet har du problemer med ? Du stiller ikke noget spørgsmål.
Avatar billede up2nogood Nybegynder
29. januar 2006 - 20:31 #2
Min fejl, jeg har problemer med:
Hvordan kan jeg printe PDF og hvordan kan jeg printe Word fra mit C# program?
Avatar billede _codefusion_ Nybegynder
02. februar 2006 - 06:51 #3
For at printe en vilkårlig fil skal du starte en process med det associerede (i forhold til fil typen) program og angive at den skal printe.
Dette gøres ved at angive at processen ikke skal åbne programmet men printe i stedet for (lidt lige som at højre klikke på dokumentet i stifinderen og vælge print).

private void printDoc(string document)
{
  try
  {
    ProcessStartInfo pi = new ProcessStartInfo();
    pi.FileName = document;
    pi.Verb = "Print";
    pi.CreateNoWindow = true;
    pi.WindowStyle = ProcessWindowStyle.Hidden;
    Process p = pMyProc.Start(pi);
  }
  catch(Exception ex)
  {
    throw new Exception("printDoc fejlede under udskriften af "+document, ex);
  }
}

Du kan evt. udvide funktionen til at "vente" på at processen afslutter.
Avatar billede _codefusion_ Nybegynder
02. februar 2006 - 06:57 #4
husk at tilføje namespacet: System.Diagnostics;
Avatar billede up2nogood Nybegynder
03. februar 2006 - 11:16 #5
codefusion, jeg prøver lige din løsning i weekenden og vender tilbage. :)
Avatar billede up2nogood Nybegynder
07. februar 2006 - 09:31 #6
codefusion, jeg får fejl når jeg kalder funktionen. Desuden fejler: "Process p = pMyProc.Start(pi);".
pMyProc er vel eks Word eller lignende?
Avatar billede _codefusion_ Nybegynder
07. februar 2006 - 09:56 #7
Ja, det er mig der lige lavede en lille kode-bæ.

Skift linien:
  Process p = pMyProc.Start(pi);
ud med:
  Process p = Process.Start(pi);
Så burde det virke :o)
Avatar billede up2nogood Nybegynder
07. februar 2006 - 11:52 #8
Hmm, jeg magter ingenting :)
Jeg får stadig fejl når jeg kalder funktionen, her er min kode:

class Class1
{
[STAThread]
static void Main(string[] args)
{
  string doc;
  doc = "C:\\tst\\CV.doc";
  printDoc(doc);
  }
    string document;
    private void printDoc(string document)
    {
    try
      {
        ProcessStartInfo pi = new ProcessStartInfo();
            pi.FileName = document;
        pi.Verb = "Print";
        pi.CreateNoWindow = true;
            pi.WindowStyle = ProcessWindowStyle.Hidden;
        Process p = Process.Start(pi);
          }
        catch(Exception ex)
        {
        throw new Exception("printDoc fejlede under udskriften af "+document, ex);
        }
      }
}

Fejlen jeg får er:
C:\CSharp\Projects\Autoprint\Class1.cs(18): 'Autoprint.Class1.printDoc(string)' denotes a 'method' where a 'class' was expected
Avatar billede _codefusion_ Nybegynder
07. februar 2006 - 13:40 #9
Okay, for det første så kan du ikke kalde en "ikke" statisk funktion fra en statisk funktion (altså Main kan kun kalde statiske eller lokale klasse variablers funktioner).

Så enten ændre du din Main funktion til at oprette en variabel a type Class1 og bruger den til at kalde printDoc eller du ændre funktionen printDoc til at være statisk.

Ny Main:
  static void Main(string[] args)
  {
    Class1 cls = new Class1();
    cls.printDoc(@"c:\tst\CV.doc");
  }

Eller ny printDoc:
class Class1
{
  [STAThread]
  static void Main(string[] args)
  {
    string doc;
    doc = "C:\\tst\\CV.doc";
    printDoc(doc);
  }
 
  private static void printDoc(string document)
  {
    try
    {
      ProcessStartInfo pi = new ProcessStartInfo();
      pi.FileName = document;
      pi.Verb = "Print";
      pi.CreateNoWindow = true;
      pi.WindowStyle = ProcessWindowStyle.Hidden;
      Process p = Process.Start(pi);
    }
    catch(Exception ex)
    {
      throw new Exception("printDoc fejlede under udskriften af "+document, ex);
    }
  }
}
Avatar billede up2nogood Nybegynder
07. februar 2006 - 14:09 #10
Det virker helt fantastisk, nu kommer så næste spørgsmål:
Kan jeg sætte hvilken printer jeg vil skrive til, samt hvor mange kopier jeg vil printe?

Alternativt kan jeg sætte standard windows printeren i starten af programmet, og sætte den tilbage til originalen i slutningen af programmet?

Omkring kopier, kunne jeg jo godt bare kalde programmet x antal gange, dog ville det selvfølgeligt være sjovere at kunne styre det i et printjob.
Avatar billede up2nogood Nybegynder
07. februar 2006 - 14:25 #11
Og endnu en ting, mit adobe reader gider ikke lukke ned bagefter. Står bare åbent med et  tomt dokument.
Avatar billede up2nogood Nybegynder
08. februar 2006 - 20:29 #12
Nå, jeg finder en løsning på PDF problematikken.
Men codefusion du har fortjent point for din løsning, kast et svar efter mig. Hvis du kan løse ovenstående samtigt er det super, hvis ikke har du fortjent dine point alligevel.

Jeg tror en løsning vist kan googles via ProcessStartInfo...
Avatar billede _codefusion_ Nybegynder
08. februar 2006 - 22:44 #13
sorry, men jeg har desværrer ikke haft tid at svare før nu.
PDF'en kan du lukke ved at stoppe proces'en (p.Kill();).
Du kan desværrer ikke se hvornår den er færdig med at printe men du kunne evt. give den f.eks. 2 minutter inden du lukker proces'en.

Du bliver nok nød til at benytte standard printeren da det ikke er alle programmer hvor der kan angives hvilken printer de skal benytte.

Du kan evt. prøve følgende måde at udskrive en PDF fil på:
printDoc("c:\test.pdf /t /p /h \"IndæstPrinterNavnHer\"");
Denne måde her jeg ikke selv afprøvet.
Men den virker ved at kalde adobe readeren med de ovenstående parameter.
F.eks.:
AcroRd32.exe /t /p /h c:\test.pdf "hp LaserJet 3380 PCL 6"

Du burde, via google, kunne finde noget kode til at ændre standard printeren.

Håber det hjælper dig lidt på vejen.
Avatar billede up2nogood Nybegynder
09. februar 2006 - 08:36 #14
Det virkede ikke helt med printDoc("c:\test.pdf /t /p /h \"IndæstPrinterNavnHer\"");, men jeg kigger lidt mere på det.
Tak for din hjælp!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester