Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/50: Рейтинг темы: голосов - 50, средняя оценка - 4.72
39 / 27 / 12
Регистрация: 31.12.2013
Сообщений: 329

Как получить текст файла PDF (iTextSharp)

01.08.2014, 21:08. Показов 10150. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C#
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
using System;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using iTextSharp.text.pdf;
using iTextSharp.text.pdf.parser;
 
namespace PDFSharp
{
    public partial class PDFSharp : Form
    {
        public PDFSharp()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            string txt = ExtractText(textBox1.Text);
            var temp1 = txt.IndexOf(textBox2.Text);
            var temp2 = txt.Substring(temp1, txt.Length - temp1);
            var temp3 = temp2.Split(' ');
 
            string tempINN = string.Empty;
            for (int i = 1; i <= temp3.Length; i++)
            {
                if (temp3[i] != "")
                {
                    tempINN = temp3[i];
                    break;
                }
            }
 
            char[] arr = tempINN.ToCharArray();
 
            string inn = string.Empty;
            char[] nums = new char[]{'0','1','2','3','4','5','6','7','8','9'};
            char[] ru_symbols = new char[]{'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я'};
            char[] en_symbols = new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
 
            foreach (var ich in arr)
            {
                if (nums.Contains(ich))
                    inn += ich;
 
                //if (ru_symbols.Contains(ich))
                  //  inn += ich;
 
                //if (en_symbols.Contains(ich))
                  //  inn += ich;
            }
 
            MessageBox.Show(inn);
        }
 
        private string ExtractText(string pathToPdfFile)
        {
            System.IO.FileInfo fiPdf = new FileInfo(pathToPdfFile);
 
            if (fiPdf.Extension.ToLower() != ".pdf")
                return null;
 
            PdfReader reader = new PdfReader(pathToPdfFile);
 
            string txt = string.Empty;
            for (int countPdfPage = 1; countPdfPage <= reader.NumberOfPages; countPdfPage++)
            {
                txt += PdfTextExtractor.GetTextFromPage(reader, countPdfPage, new LocationTextExtractionStrategy());
            }
 
            return txt;
        }
    }
}
Код получает определенный текст с PDF

Проблема состоит в том, что если ввести в форму к примеру Полное наименование(смотреть под спойлер текст), то выводит часть ответа или чушь наиполнейшую.
Добавил foreach() для фикса при получении ИНН (численных ответов всм)
Тогда как быть с string значениями?
Кликните здесь для просмотра всего текста
ОГРН 1055907661578
ИНН 5957000039
Полное наименование ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ
"КУЕДА-ЛЕС"
Сокращенное наименование ООО "КУЕДА-ЛЕС"
Фирменное наименование ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ
"КУЕДА-ЛЕС"
Наименование на иностранном языке
ОПФ Общество с ограниченной ответственностью
Сведения о состоянии юр.лица Действующее
Дата формирования сведений из ЕГРЮЛ 16.06.2014
КПП юридического лица 595701001
Дата присвоения ОГРН 18.02.2005
Наименование классификатора по
которому введены сведения об ОПФ:
ОКОПФ, КОПФ
ОКОПФ
Код по выбранному классификатору 65


Заранее Спасибо
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.08.2014, 21:08
Ответы с готовыми решениями:

Получить значение строки из PDF файла (iTextSharp)
Я использую такую функцию: public static string ExtractText(string pathToPdfFile) { System.IO.FileInfo fiPdf = new...

Библиотека iTextSharp: как в pdf вставить вертикальный текст
Подниму тему. Необходимо в pdf вставить вертикальный текст (VerticalText). использую пример http://itextpdf.com/examples/iia.php?id=202 ...

Библиотека itextsharp: вырезать определенный кусок текста из PDF и поместить на форму
Использую данную библиотеку для работы с PDF файлами! Создавать файлы и объединять получается, а вот как вырезать определенный кусок текста...

10
675 / 421 / 44
Регистрация: 09.07.2012
Сообщений: 1,419
01.08.2014, 21:28
Долго смотрел, а что достать нужно только ИНН?

1)Если текст такой то можно использовать "регулярные выражения" - http://professorweb.ru/my/csha... 4/4_10.php
Оно вынет вам ИНН с первой попытки из любого текста где он есть. Работает немного дольше чем 2 способ.

2) Можно использовать поиск слова "ИНН" и потом вынуть еще 10-20 символов после него, где и должны находиться числа. Далее через индексы и проверку Char.IsDigit (встроенный в NET метод) вынуть его полностью и правильно.
String.IndexOf - метод (String) -> http://msdn.microsoft.com/ru-r... .110).aspx

foreach - в вашем случае работает очень медленно. Используйте Char.IsDigit и другие (буква, пробел..) или charmap (Win+R -> charmap), таблица символов, или ASCII коды. И смотрите в какой диапазон входит ваш "чар".

Метод ExtractText все равно должен предвидеть исключение, файл может быть не рабочим или просто переименованным в "pdf".
0
39 / 27 / 12
Регистрация: 31.12.2013
Сообщений: 329
01.08.2014, 21:38  [ТС]
Да это тестовый код)))
Этот код нормально выводит ИНН, а к примеру попросить вывести "Полное наименование", то часть результата выводит.

Добавлено через 2 минуты
Или еще попросить вывести ИНН, он выведет его и через пробел выводит следующие 6 символов другой строки, такой тоже баг))
0
675 / 421 / 44
Регистрация: 09.07.2012
Сообщений: 1,419
01.08.2014, 21:41
Эта часть результата всегда имеет одну длину, не выводит текст после переноса строки?
Если после "Полное наименование" всегда идет "Сокращенное наименование", то тут его и можно вырезать (все что находится между этими константами и есть полное наименование организации). Удалить пробелы в начале и конце строки, удалить перенос строки если есть из всей строки.

ИНН не баг, надо знать что он имеет всегда одну длину (для физ и юр лиц разная), все что вам нужно это найти первое число в строке "ИНН хххххххххх тексттексттекст" и вырезать дальше нужное количество символов.
0
39 / 27 / 12
Регистрация: 31.12.2013
Сообщений: 329
02.08.2014, 15:51  [ТС]
C#
1
2
3
4
foreach (var ich in arr)
            {
                if (nums.Contains(ich))
                    inn += ich;
Если вот так , то все норм выводит ИНН (То есть только числа выводит)
А стринги не выводит. (то есть типа char || string)
0
675 / 421 / 44
Регистрация: 09.07.2012
Сообщений: 1,419
02.08.2014, 18:36
Вам надо еще раз пройтись по работе с классом string.
Посмотрите видео лекции
Кликните здесь для просмотра всего текста



Прочитайте по сайту http://professorweb.ru, там есть все что вам нужно. Если сейчас напишут рабочий метод (не факт что оптимальный), то знаний много это не прибавит.
0
39 / 27 / 12
Регистрация: 31.12.2013
Сообщений: 329
02.08.2014, 21:31  [ТС]
На данный момент очень мало времени, мягко говоря не успеваю.
После реализации изучу =))))
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
02.08.2014, 22:01
Напишите хоть что получить хотели. А то обозвали тему "PDF" чтоб никто не догадался.
У вас есть текст и из него надо что-то вытащить?
0
39 / 27 / 12
Регистрация: 31.12.2013
Сообщений: 329
02.08.2014, 22:06  [ТС]
ДА!

(пример PDF файла)
Там есть ИНН, ОГРН и прочее.
Нужно вытащить их значения :-)

Надеюсь на Вашу поддержку!
Вложения
Тип файла: pdf ГСЛ_ООО_Куединский_лес.pdf (71.4 Кб, 20 просмотров)
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
02.08.2014, 22:08
Цитата Сообщение от Esecman Посмотреть сообщение
Там есть ИНН, ОГРН и прочее
Ну так что вытащить то ?
0
39 / 27 / 12
Регистрация: 31.12.2013
Сообщений: 329
03.08.2014, 19:18  [ТС]
Вытащить их значения

Добавлено через 2 часа 1 минуту
C#
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
using System;
using System.Collections.Generic;
using System.IO;
using iTextSharp.text.pdf;
using iTextSharp.text.pdf.parser;
 
namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            long inn = new long();
            long ogrn = new long();
            string name = string.Empty;
            string address = string.Empty;
            string pathToPdfFile = @"C:\\ГСЛ_ООО_Куединский_лес.pdf";
            string var1 = @"Фамилия СОТНИКОВ
Имя АЛЕКСЕЙ
Адрес (место нахождения) юр.лица 617832,крайПЕРМСКИЙ,,гЧЕРНУШКА,,улПЕРМДОРСТРОЙ,40,,
Отчество ВИКТОРОВИЧ
ИНН 591400108322
Размер вклада (в рублях) 3000
ОГРН 1055907661578
Фирменное наименование ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ
КУЕДА-ЛЕС";
            string var2 = var1.ToLower();
            List<string> arrP = new List<string>() { "Фамилия", "Имя", "Отчество", "ИНН", "Адрес (место нахождения) юр.лица", "Размер вклада (в рублях)", "ОГРН", "Фирменное наименование" };
            List<string> results = new List<string>();
            for (int i = 0; i < arrP.Count; i++)
            {
                var current = arrP[i];
                var currentL = current.ToLower();
                var t1 = var2.IndexOf(current.ToLower());
                var l1 = current.Length + 1;
 
                if (i < (arrP.Count - 1))
                {
                    int lentSubstring = new int();
                    string afterCurrent = var1.Substring(t1, var1.Length - t1 - 1);
                    string afterCurrentL = afterCurrent.ToLower();
                    List<int> arrT = new List<int>();
                    for (int j = 0; j < arrP.Count; j++)
                    {
                        int t12 = afterCurrentL.IndexOf(arrP[j].ToLower());
                        arrT.Add(t12);
                    }
 
                    int tempMin = int.MaxValue;
                    foreach (var item in arrT)
                    {
                        if (item > 0)
                        {
                            if (item < tempMin)
                                tempMin = item;
                        }
                    }
 
                    int idnTheSameClodeElement = arrT.IndexOf(tempMin);
 
                    string NextElement = arrP[idnTheSameClodeElement];
                    string NextElementL = NextElement.ToLower();
                    int t33 = afterCurrentL.LastIndexOf(NextElementL);
                    lentSubstring = t33 - 1 - l1;
                    var r1 = afterCurrent.Substring(l1, lentSubstring);
                    results.Add(r1.Replace("\r", " "));
                }
 
                else
                {
                    var r2 = var1.Substring(t1 + l1, var1.Length - (t1 + l1));
                    results.Add(r2);
                }
 
                var ttt = results[results.Count - 1];
                switch (current.ToLower())
                {
                    case "инн":
                        inn = System.Convert.ToInt64(ttt);
                        break;
                    case "огрн":
                        ogrn = System.Convert.ToInt64(ttt);
                        break;
                    case "имя":
                        name = System.Convert.ToString(ttt);
                        break;
                    case "адрес (место нахождения) юр.лица":
                        address = System.Convert.ToString(ttt);
                        break;
                }
            }
 
            Console.WriteLine(address);
            Console.ReadLine();
        }
 
        private static string ExtractText(string pathToPdfFile)
        {
            System.IO.FileInfo fiPdf = new FileInfo(pathToPdfFile);
 
            if (fiPdf.Extension.ToLower() != ".pdf")
                return null;
 
            PdfReader reader = new PdfReader(pathToPdfFile);
 
            string var1 = string.Empty;
            for (int countPdfPage = 1; countPdfPage <= reader.NumberOfPages; countPdfPage++)
            {
                var1 += PdfTextExtractor.GetTextFromPage(reader, countPdfPage, new LocationTextExtractionStrategy());
            }
 
            return var1;
        }
    }
}
Немного гугл помог + советы от Dywar, но теперь проблема такая:
Данный код работает, но я хочу подключить функцию
C#
1
ExtractText(pathToPdfFile);
Я ее подключил, так:
C#
1
string var1 = ExtractText(pathToPdfFile);
но появились проблемы.
В Debug выводит ошибку на:

C#
1
var1 += PdfTextExtractor.GetTextFromPage(reader, countPdfPage, new LocationTextExtractionStrategy());
AND

C#
1
inn = System.Convert.ToInt64(ttt);
Добавлено через 12 секунд
Надеюсь на Вашу помощь :-)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.08.2014, 19:18
Помогаю со студенческими работами здесь

Как перенести HTML текст в PDF
Доброго времени суток. У меня вот проблема. нужно генерировать PDF файл с XML файла. в самом XML есть елементы MediaElement в котором есть...

Itextsharp из PDF в текст
Доброго времени суток! Не могу понять в чём проблема. Конвертирую PDF в TXT с помощью ITEXTsharp. //конвертируем PDF в TXT ...

Создание PDF файла. Русские символы не воспринимаются в iTextSharp
Доброго времени суток. Создаю PDF документ силами библиотеки iTextSharp, но возникла проблема, осознал, что проблема этой библиотекой со...

ITextSharp, Размещение картинки на PDF
Здравствуйте! Подскажите, пожалуйста, как с помощью C# и iTextSharp разместить картинку на уже существующем PDF (открыть PDF, поместить...

Itextsharp зашифровать pdf файл от редактирования
Добрый день. Добавлено через 12 минут Добрый день. У меня возникла проблема, решение которой ни самостоятельно ни в интернете я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru