bonjour...
je voudrais savoir comment executer une ligne de commande sous C#.
je travaille avec FOP pour avoir des Fichiers PDF.
voici ma commande :
c:\fop...
FOP -XML myfile.xml -XSL mysheat.xsl -pdf myresult.pdf
merci pour votre aide
Version imprimable
bonjour...
je voudrais savoir comment executer une ligne de commande sous C#.
je travaille avec FOP pour avoir des Fichiers PDF.
voici ma commande :
c:\fop...
FOP -XML myfile.xml -XSL mysheat.xsl -pdf myresult.pdf
merci pour votre aide
il faut utiliser la class Process (dans System.Diagnostics)
fais une recherche dans le forum, il y a plein d'exemples
Si, en utilisant ProcessStartInfo.RedirectStandardOutput, et l'évènement OutputDataReceived du process
SVP j'ai juste une petite question :
y une erreur au niveau de mode code
pkoi il reconnait pas Server.MapPath("\\donnees.fo") dans cette commande.Code:
1
2
3
4
5
6 System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.EnableRaisingEvents=false; proc.StartInfo.FileName = "C:\\fop-0.95beta\\FOP"; proc.StartInfo.Arguments = "-xml Server.MapPath("\\donnees.fo") - xsl Server.MapPath("\\feuille.xsl") - pdf Server.MapPath("\\resultat.pdf")"; proc.Start(); proc.WaitForExit();
merci bien
Les guillemets servent à délimiter une chaîne de caractères. Si tu as des guillemets dans un chaîne de caractères tu dois les échapper
Code:proc.StartInfo.Arguments = "-xml Server.MapPath(\"\\donnees.fo\") - xsl Server.MapPath(\"\\feuille.xsl\") - pdf Server.MapPath(\"\\resultat.pdf\")";
l'invite dos s'excute avec les deux méthodes :
ouCode:proc.StartInfo.FileName = @"C:\\fop-0.95beta\\FOP";
mais l'excution ne reconnais pas l'argument passé :Code:proc.StartInfo.FileName = "C:\\fop-0.95beta\\FOP";
le resultat affiche des erreur dans l'invite DOS comme koi FOP à été executer sans commande !Code:proc.StartInfo.Arguments = "-xml Server.MapPath(\"\\donnees.fo\") - xsl Server.MapPath(\"\\feuille.xsl\") - pdf Server.MapPath(\"\\resultat.pdf\")";
Merci bien
Les espaces entre les tirets et la commande ne pourraient pas gêner ?
etCode:- xsl Server.MapPath...
A mon avis çà ne doit pas trop lui plaire.Code:- pdf Server.MapPath...
vous avez raison c'etait un pb à cause des espaces -XML ???? - XSL ??
- et la j'ai un autre probleme, j'ai dans mon application mes fichiers XML et XSL, alors il reconnais pas Server.MapPath
Code:proc.StartInfo.Arguments = "-xml Server.MapPath(\"\\donnees.xml\") - xsl Server.MapPath(\"\\feuille.xsl\") - pdf Server.MapPath(\"\\resultat.pdf\")";
je vous remercie j'ai trouvé la réponse :
merci beaucoup, si vous pouvez juste me donner l'intruction qui me permet de rediriger cette sortie en streaming .Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 proc.EnableRaisingEvents=false; string fic_Xml = Server.MapPath("\\Donnees.xml"); string fic_Xsl = Server.MapPath("\\feuille.xsl"); string fic_Res_Pdf = Server.MapPath("\\resultat.pdf"); string chemin = "-xml \""+fic_Xml+"\" -xsl \""+fic_Xsl+"\" -pdf \""+fic_Res_Pdf+"\""; proc.StartInfo.FileName = "C:\\fop-0.95beta\\FOP"; proc.StartInfo.Arguments = chemin; proc.Start() ; proc.WaitForExit() ; proc.Close();
merci
Code:
1
2
3
4
5
6
7
8
9
10
11 proc.StartInfo.UseShellExecute = false; proc.StartInfo.RedirectStandardOutput = true; ... StringBuilder sb = new StringBuilder(); string line; while ((line = proc.StandardOutput.ReadLine()) != null) { text.AppendLine(line); }
FOP est un fichier .bat, non ? Je ne suis pas sûr que tu puisses exécuter directement un .bat avec Process, du moins pas si UseShellExecute est à false (et il doit être à false pour pouvoir utiliser RedirectStandardOutput...). Par contre tu peux lancer cmd.exe en lui passant en paramètre le script .bat et les paramètres
ben je t'ai montré comment récupérer la sortie (avec StandardOutput), après tu en fais ce que tu veux... qu'est-ce que tu veux dire par "rendre ça en streaming" ?
ça veux dire , au lieu que FOP genere le fichir sur disque, je veux que ça soit en memoire et afficher en browser
voila le type de sortie de fop qu'il supporte :
)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 [OUTPUT] outfile input will be rendered as PDF into outfile -pdf outfile input will be rendered as PDF (outfile req'd) -pdfa1b outfile input will be rendered as PDF/A-1b compliant PDF (outfile req'd, same as "-pdf outfile -pdfprofile PDF/A-1b") -awt input will be displayed on screen -rtf outfile input will be rendered as RTF (outfile req'd) -pcl outfile input will be rendered as PCL (outfile req'd) -ps outfile input will be rendered as PostScript (outfile req'd) -afp outfile input will be rendered as AFP (outfile req'd) -tiff outfile input will be rendered as TIFF (outfile req'd) -png outfile input will be rendered as PNG (outfile req'd) -txt outfile input will be rendered as plain text (outfile req'd) -at [mime] out representation of area tree as XML (outfile req'd) specify optional mime output to allow AT to be converted to final format later -print input file will be rendered and sent to the printer see options with "-print help" -out mime outfile input will be rendered using the given MIME type (outfile req'd) Example: "-out application/pdf D:\out.pdf" (Tip: "-out list" prints the list of supported MIME types) -mif outfile input will be rendered as MIF (FrameMaker) (outfile req'd) Experimental feature - requires additional fop-sandbox.jar. -svg outfile input will be rendered as an SVG slides file (outfile req'd) Experimental feature - requires additional fop-sandbox.jar. -foout outfile input will only be XSL transformed. The intermediate XSL-FO file is saved and no rendering is performed. (Only available if you use -xml and -xsl parameters
Si c'est du PDF que tu veux générer, tu ne peux pas l'inclure dans une page web : tu es obligé de générer le fichier et de renvoyer l'utilisateur vers l'URL du fichier.
La technique expliquée ci-dessus permet de récupérer la sortie standard du programme (i.e. la sortie sur la console), ça ne s'applique pas ici...