J'ai besoin de convertir un fichier .pdf vers un fichier .txt p>
Comment puis-je faire cela en C #? P>
6 Réponses :
Le concept de convertir PDF en texte n'est pas vraiment simple et vous ne verrez que personne qui pose un code ici qui convertira PDF en texte droit. Donc, votre meilleur pari est maintenant d'utiliser une bibliothèque qui ferait le travail pour vous ... un bon est un PDFBox, vous pouvez le google. Vous le trouverez probablement écrit en Java mais heureusement, vous pouvez utiliser IKVM pour le convertir en .NET .... P>
J'ai eu le besoin moi-même et j'ai utilisé cet article pour me lancer: http : //www.codeproject.com/kb/string/pdf2text.aspx P>
Ghostscript pourrait faire ce dont vous avez besoin. Ci-dessous une commande pour extraire du texte à partir d'un fichier PDF dans un fichier TXT (vous pouvez l'exécuter à partir d'une ligne de commande à tester si cela fonctionne si cela fonctionne pour vous):
gswin32c.exe -q -dNODISPLAY -dSAFER -dDELAYBIND -dWRITESYSTEMDICT -dSIMPLE -c save -f ps2ascii.ps "test.pdf" -c quit >"test.txt"
réservoirs!!! Cela fonctionne, mais il y a un problème, cela ne fait pas économiser au fichier TXT, c'est juste la créer et il reste vide..tands ce n'est pas ça marche? Je l'ai exécuté comme ça: c: \> c: \ gswin32.exe -q -dnodisplay -dsafer -ddelaybind -d -dwritesystemdict -d -c sauvegarde -f ps2ascii.ps "c: \ nouveau dossier \ 2 \ test.pdf" - c Quitter> "c: \ test.txt"
Si vous le diriez comme ceci: gswin32.exe "c: \ nouveau dossier \ 2 \ test.pdf" vous montrera-t-il le fichier? De plus, vous voudrez peut-être essayer de l'exécuter dans le dossier bin de la GS, Smth, comme celui-ci: C: \ Program Files \ GS \ GS8.64 \ BIN> GSWIN32C.EXE .... Dans tous les cas, GS devrait vous donner une erreur S'il ne peut pas trouver \ Analysez votre fichier, pls, postez-le ici si toujours pas de chance convertir votre fichier
J'ai essayé de faire: c: \ Fichiers de programme \ gs \ gs8.64 \ bin> gswin32.exe "c: \ nouveau dossier \ 2 \ test.pdf" et le programme m'a dit qu'il ne peut pas analyser le fichier (mais Cela m'a montré le fichier PDF) qui est bizarre, car quand je l'ai fait GSWIN32.exe -q -dnodisplay -dsafer -ddelaybind -dwritesystemdict -dsimple -c sauvegarder -f ps2ascii.ps "c: \ test.pdf"> "C: \ Test.txt "Cela le convertit, le seul problème est qu'il crée le fichier mais n'écrivez pas à elle .... Est-ce que cela suppose de travailler dans Windows?
Il doit travailler sur Windows et fonctionne bien pour moi; Il y a peut-être des problèmes avec l'analyse de fichiers PDF, mais vous obtenez un message d'erreur de GS avec une explication de ce qui manque ou cassé; Pouvez-vous publier votre fichier PDF sur le service de partage de fichiers afin que je puisse essayer de la convertir
testé votre fichier et cela a fonctionné bien; Le prblem est dans l'exécutable que vous utilisez qui est Gswin32.exe; alors que vous devez utiliser GSWIN32C.EXE (C == Console); Voici comment je l'ai appelé: gswin32.exe -q -dnodisplay -dsafer -ddelaybind -dwritesystemdict -dsimple -c sauvegarde -f ps2ascii.ps "c: \ test.pdf" -c Quitt> "c: \ test.txt"
UPS désolé; gswin32c.exe -q -dnodisplay -dsafer -ddelaybind -dwritesystemdict -dsimple -c -c sauvegarder -f ps2ascii.ps "c: \ test.pdf" -c Quitt> "c: \ test.txt"
Wow!! Ça marche!! tnx !!! Mais il y a toujours un problème minuscule s'il y a un mot audacieux, alors dans certains fichiers PDF, ils ne sont pas à droite et que le mot est coupé au milieu ou chaque mot de séparément est là quelque chose à voir avec ça? J'ai téléchargé un exemple de fichier. Vous pouvez le voir clairement dans la ligne de sapins, mais il y a d'autres mots comme celui-là dans l'autre ligne (où il y avait une ligne audacieuse): megafileupload.com/fr/file/170969/test-txt.html et une autre question, je dois convertir 15000 fichiers PDF (pour mon projet). OK si je vais faire une boucle en C # et exécutez ce programme pour chaque fichier d'une cmd?
concernant les 15000 fichiers PDF; Vérifiez le lien que je vous ai donné dans la réponse originale CODEPROJEJECT.COM/KB/CS/GHOSTSScripticewithCshaparp. ASPX pour les détails sur la manière dont vous pouvez utiliser gsdll32.dll dans votre projet C #. 15K fichiers est beaucoup mais ne devrait pas être un problème pour GS, outre que vous n'avez jamais dit, c'est qu'un nombre total ou que vous allez le recevoir par exemple par heure. Comme alternative, vous pouvez appeler 2 points de GSWIN32C.EXE en parallèle à partir de threads différents et signalez-les à différents fichiers de votre ensemble, cela ne devrait pas nécessiter de calculer beaucoup de codage à mettre en œuvre. Je vais regarder le fichier ...
Désolé, mal compromis votre question concernant s'il est correct d'exécuter le programme de CMD pour tous vos fichiers définis - Oui, je ne vois aucun problème avec cela; devrait fonctionner bien en ce qui concerne la séparation des mots; Je ne pense pas que GS serait capable de les supprimer; mais je suppose que vous pouvez poster le processus TXT File après les mots et supprimez ceux de votre application.
d'accord. Anks beaucoup! Tu m'as vraiment aidé !! Je ferai un programme qui appelle GS de C #, Thers n'est pas nécessaire dans ce qui a été dit dans votre lien car je peux exécuter la comman CMD de C #. Donc, je vais juste faire une boucle. Et le temps est correct, cela peut tonner à 24 heures, je ne me soucie pas. Je ne peux pas poster le processus des fichiers TXT, il y en a beaucoup ... Tanks Tanks !!!
À propos du mot séparation, je ne veux pas les supprimer - ils sont importants, je les veux en mode normal (invisible)
Je n'ai pas réussi à le faire passer par C # ou Java. Y a-t-il un moyen automatique de l'exécuter dans les paramètres que vous m'avez donné et de modifier les fichiers d'entrée et de sortie?
Vérifiez ce fil pour plus de détails sur la manière dont vous pouvez exécuter GSWIN32C.EXE avec des paramètres de votre application C #: Stackoverflow.com/questions/1941118/...
comme une alternative à la solution de Don, j'ai trouvé ce qui suit: p>
J'ai essayé celui-ci et le lien fourni par @don est une conversion beaucoup meilleure.
La bibliothèque docotic.pdf peut extraire le texte des fichiers PDF (formaté ou non).
Voici un exemple de code qui montre comment extraire le texte formaté à partir d'un fichier PDF et enregistrez-le dans un autre fichier. P>
public static void ExtractFormattedText(string pdfFile, string textFile) { using (PdfDocument doc = new PdfDocument(pdfFile)) { string text = doc.GetTextWithFormatting(); File.WriteAllText(textFile, text); } }
Mais c'est une simple conversion. J'ai eu besoin de conversion en articles sur des articles. Le fichier PDF est dans différentes mises en page ...
public void PDF_TEXT() { richTextBox1.Text = string.Empty; ReadPdfFile(@"C:\Myfile.pdf"); //read pdf file from location } public void ReadPdfFile(string fileName) { string strText = string.Empty; StringBuilder text = new StringBuilder(); try { PdfReader reader = new PdfReader((string)fileName); if (File.Exists(fileName)) { PdfReader pdfReader = new PdfReader(fileName); for (int page = 1; page <= pdfReader.NumberOfPages; page++) { ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy(); string currentText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy); text.Append(currentText); } pdfReader.Close(); } } catch (Exception ex) { MessageBox.Show(ex.Message); } richTextBox1.Text = text.ToString(); } private void Save_TextFile_Click(object sender, EventArgs e) { SaveFileDialog sfd = new SaveFileDialog(); DialogResult messageResult = MessageBox.Show("Save this file into Text?", "Text File", MessageBoxButtons.OKCancel); if (messageResult == DialogResult.Cancel) { } else { sfd.Title = "Save As Textfile"; sfd.InitialDirectory = @"C:\"; sfd.Filter = "TextDocuments|*.txt"; if (sfd.ShowDialog() == DialogResult.OK) { if (richTextBox1.Text != "") { richTextBox1.SaveFile(sfd.FileName, RichTextBoxStreamType.PlainText); richTextBox1.Text = ""; MessageBox.Show("Text Saved Succesfully", "Text File"); } else { MessageBox.Show("Please Upload Your Pdf", "Text File", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk); } } } }
Juste coller un certain code n'est pas utile.
Je pense ici pas trop difficile qui doit être décrite.
Je pense ici pas trop difficile difficile à décrire. I> - Eh bien, hors de la boîte Votre code ne compile même pas pour la simple raison que vous n'avez pas mentionné les dépendances. Ni la question ni votre réponse mentionne iTEXTSTHARP. Toute personne ne reconnaissant pas les classes en question sera immédiatement perdue. De plus, vous avez des éléments de code inutiles, si l'OP souhaite créer une application de ligne de commande, les auditeurs d'événements GUI Element sont inappropriés. Comme un bon exemple, regardez la réponse de @ Bobrovsky, il a tous deux mentionné la dépendance de la bibliothèque et n'a présenté que le code pivot.