Comment rechercher par programme un document PDF en c #

J’ai besoin de rechercher un fichier pdf pour voir si une certaine chaîne est présente. La chaîne en question est définitivement codée sous forme de texte (c’est-à-dire que ce n’est pas une image ou quoi que ce soit). J’ai juste essayé de chercher dans le fichier comme s’il s’agissait de texte brut, mais cela ne fonctionne pas.

Est-il possible de faire cela? Existe-t-il des bibliothèques pour .net2.0 qui extraire / décoder tout le texte du fichier pdf pour moi?

Il y a quelques bibliothèques disponibles sur le marché. Consultez http://www.codeproject.com/KB/cs/PDFToText.aspx et http://itextsharp.sourceforge.net/

Cela demande un peu d’effort mais c’est possible.

Vous pouvez utiliser la bibliothèque Docotic.Pdf pour rechercher du texte dans des fichiers PDF.

Voici un exemple de code:

static void searchForText(ssortingng path, ssortingng text) { using (PdfDocument pdf = new PdfDocument(path)) { for (int i = 0; i < pdf.Pages.Count; i++) { string pageText = pdf.Pages[i].GetText(); int index = pageText.IndexOf(text, 0, StringComparison.CurrentCultureIgnoreCase); if (index != -1) Console.WriteLine("'{0}' found on page {1}", text, i); } } } 

La bibliothèque peut également extraire du texte formaté et brut de tout le document ou de toute page de document.

Disclaimer: Je travaille pour Bit Miracle, fournisseur de la bibliothèque.

Dans la grande majorité des cas, il est impossible de rechercher le contenu d’un fichier PDF directement en l’ouvrant dans le bloc-notes – et même dans une minorité de cas (selon la manière dont le fichier PDF a été construit), vous ne pourrez jamais rechercher des mots individuels en raison de la manière dont PDF gère le texte en interne.

Ma société a une solution commerciale qui vous permettra d’extraire du texte d’un fichier PDF. J’ai inclus ci-dessous un exemple de code, comme indiqué sur cette page , qui explique comment rechercher dans le texte d’un fichier PDF une chaîne particulière.

 using System; using System.IO; using QuickPDFDLL0718; namespace QPLConsoleApp { public class QPL { public static void Main() { // This example uses the DLL edition of Quick PDF Library // Create an instance of the class and give it the path to the DLL PDFLibrary QP = new PDFLibrary("QuickPDFDLL0718.dll"); // Check if the DLL was loaded successfully if (QP.LibraryLoaded()) { // Insert license key here / Check the license key if (QP.UnlockKey("...") == 1) { QP.LoadFromFile(@"C:\Program Files\Quick PDF Library\DLL\GettingStarted.pdf"); int iPageCount = QP.PageCount(); int PageNumber = 1; int MatchesFound = 0; while (PageNumber <= iPageCount) { QP.SelectPage(PageNumber); string PageText = QP.GetPageText(3); using (StreamWriter TempFile = new StreamWriter(QP.GetTempPath() + "temp" + PageNumber + ".txt")) { TempFile.Write(PageText); } string[] lines = File.ReadAllLines(QP.GetTempPath() + "temp" + PageNumber + ".txt"); string[][] grid = new string[lines.Length][]; for (int i = 0; i < lines.Length; i++) { grid[i] = lines[i].Split(','); } foreach (string[] line in grid) { string FindMatch = line[11]; // Update this string to the word that you're searching for. // It can be one or more words (ie "sunday" or "last sunday". if (FindMatch.Contains("characters")) { Console.WriteLine("Success! Word match found on page: " + PageNumber); MatchesFound++; } } PageNumber++; } if (MatchesFound == 0) { Console.WriteLine("Sorry! No matches found."); } else { Console.WriteLine(); Console.WriteLine("Total: " + MatchesFound + " matches found!"); } Console.ReadLine(); } } } } }