39 / 27 / 12
Регистрация: 31.12.2013
Сообщений: 329

Как организовать работу PDF, чтоб он искал в PDF файле определенную строку

22.07.2014, 09:17. Показов 4566. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется код (Он всего лишь создает файл и текст, который указывается в форме)

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
using System;
using System.IO;
using System.Windows.Forms;
using iTextSharp.text;
using iTextSharp.text.pdf;
 
namespace PDFSharp
{
    public partial class PDFSharp : Form
    {
        public PDFSharp()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "" || textBox2.Text == "" || textBox1.Text == " " || textBox2.Text == " ")
            {
                MessageBox.Show("Не все поля были заполнены!");
            }
 
            else
            {
                FileStream reader = new FileStream(textBox1.Text, FileMode.Create);
                Document doc = new Document(iTextSharp.text.PageSize.LETTER, 10, 10, 42, 35);
                PdfWriter wri = PdfWriter.GetInstance(doc, reader);
                doc.Open();
                Paragraph paragraph = new Paragraph(textBox2.Text);
                doc.Add(paragraph);
                doc.Close();
 
                MessageBox.Show("Сгенерировано!");
            }
        }
    }
}
Как организовать работу PDF, чтоб он искал в PDF файле определенную строку, например ИНН и вывел ее значение?
Я использую библиотеку iTextSharp (как видно из объявления namespaces);
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.07.2014, 09:17
Ответы с готовыми решениями:

Как разместить PDF файлы в PDF файле
Есть PDF документ с одной страницей размера 700х500мм, и несколько PDF файлов. Нужно разместить PDF файлы на странице первого PDF файла с...

Как создать PDF файл с именем ZAKAZ_(дата сегодня).pdf
Как создать из "Excel таблицы" - PDF файл с именем ZAKAZ_(дата сегодня).pdf при помощи макроса? Есть такой макрос: Sub...

Как соединить несколько PDF файлов в один документ PDF?
имею распечатку книжки в 45 pdf файлах. как-то неудобно просматривать её. как их все объединить в один pdf файл? Может спец софт необходим?

6
674 / 420 / 44
Регистрация: 09.07.2012
Сообщений: 1,419
22.07.2014, 09:24
Нагуглилось
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
using iTextSharp.text.pdf;
using iTextSharp.text.pdf.parser;
using System.IO;
 
public string ReadPdfFile(string fileName)
{
    StringBuilder text = new StringBuilder();
 
    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);
 
            currentText = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(currentText)));
            text.Append(currentText);
        }
        pdfReader.Close();
    }
    return text.ToString();
}
Поиск строки в страницах PDF
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 public  List<int> ReadPdfFile(string fileName, String searthText)
            {
                List<int> pages = new List<int>();
                if (File.Exists(fileName))
                {
                    PdfReader pdfReader = new PdfReader(fileName);
                    for (int page = 1; page <= pdfReader.NumberOfPages; page++)
                    {
                        ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
 
                        string currentPageText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy);
                        if (currentPageText.Contains(searthText))
                        {
                            pages.Add(page);
                        }
                    }
                    pdfReader.Close();
                }
                return pages;
            }
1
39 / 27 / 12
Регистрация: 31.12.2013
Сообщений: 329
22.07.2014, 10:23  [ТС]
Такс, спасибо.
Вот еще вопрос, я новичок в этом деле, эти фанки я вставил в программу, а как-нибудь их вызвать можно ?
0
674 / 420 / 44
Регистрация: 09.07.2012
Сообщений: 1,419
22.07.2014, 11:02
Надо прочитать книгу по C#, или посмотреть пару полных видео курсов. Просто такие вещи должны быть "вшиты".

Например первый пример вам больше подходит, передаете методу ReadPdfFile полный путь к вашему файлу.
В ответ он вам возвращает одну строку, в которой находится сразу весь текст со всех страниц файла.

В этой строке уже можете искать ИНН. Документ у вас маленький можно и так работать.

Но этот код тестовый, т.к. вместо string нужно использовать stringbuilder в методе ReadPdfFile.

Строку можете сохранить или вывести на консоль/окно. Проверить что работает, и найти там взглядом ИНН.
Если так, то переходим к этапу №2 - вынуть ИНН.
Для этого гуглим "C# как вынуть слово из строки" "C# как найти слово в строке" и т.д.
Примеров очень много.

Прочитать тут http://msdn.microsoft.com/ru-r... s.90).aspx, можно найти все что вам нужно.
1
39 / 27 / 12
Регистрация: 31.12.2013
Сообщений: 329
22.07.2014, 12:25  [ТС]
Спасибо.
Но все-же, в C++ я вызывал функцию так:
C++
1
2
3
name_of_func(args /* if have */);
else
name_of_func();
Но в C# не получается так, в чем беда?

Добавлено через 1 час 2 минуты
С вызовом функции все нормально, разобрался

Добавлено через 14 минут
Остался вопрос с парсингом значения.
К примеру, имеется строка ИНН 999999999999999999
Вывести только 999999999999999999

Надеюсь на Вашу помощь, ребята!
0
674 / 420 / 44
Регистрация: 09.07.2012
Сообщений: 1,419
22.07.2014, 17:28
Ссылка чуть выше на http://msdn.microsoft.com/ru-r... s.90).aspx, если случайно ее открыть и прочитать то можно заметить код

C#
1
2
3
4
5
6
7
8
9
10
string s3 = "Visual C# Express";
System.Console.WriteLine(s3.Substring(7, 2));
// Output: "C#"
 
System.Console.WriteLine(s3.Replace("C#", "Basic"));
// Output: "Visual Basic Express"
 
// Index values are zero-based
int index = s3.IndexOf("C");
// index = 7
Пробелов может быть больше чем 1, значит скидываем слово.... а ладно, сейчас напишу сам

C#
1
2
3
4
5
6
7
8
9
string a = "ИНН  999999999999999999"; // два пробела
            string inn = a.Replace("ИНН", "").Trim(); // trim - удаляет пробелы, ИНН заменяем на пустую строку.
            Console.WriteLine(inn);
//ИНН физического лица содержит 12 цифр - через IF можно проверять длину сразу, и выводить ошибку.
//ИНН юридического лица состоит из 10 цифр
 
//Если надо сложнее то можно:
а) использовать регулярные выражения (медленнее)
б) искать первое число в строке через int.tryparse, и как его нашли отсечь индекс до него, и взять оставшееся поле.
1
39 / 27 / 12
Регистрация: 31.12.2013
Сообщений: 329
22.07.2014, 19:28  [ТС]
Я уже сам написал решение, только одна проблема осталась.
Не распознает contains компилятор , в чем беда? или какой нужен namespace для него?

Добавлено через 11 минут
Решено:
C#
1
using System.Linq;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.07.2014, 19:28
Помогаю со студенческими работами здесь

Как разбить 1-ин pdf документ на множество pdf файлов в соответствии с регулярным выражением ?
Есть документ представляющий собой сборник статей тезисов (c рисунками) в двух формате pdf, задача получить из многостраничного документа...

Как сделать, чтоб pdf файл открывался , а не просто скачивался?
Я залил пдф файл на хостинг в папку проекта и указал его имя в разметке, при нажатии этот файл просто скачивается, а надо , чтоб...

Как переделать макрос так, что бы после слияния Word создавал PDF и сохранял в PDF каждый раздел отдельно?
Добрый вечер всем! Помогите переделать макрос что бы после слияние, word создавал PDF и сохранял в PDF по отдельности. Данный макрос...

Нужна java-программа для чтения электронных книг в формате PDF. Или как можно переделать PDF книгу в вордовский файл?
Нужна java- программа для чтения электронных книг в формате PDF. Нужна очень срочно прошу помощи завтра экзамен просто нада успеть. Или...

Копирование объекта (файла PDF ) в определенную папку
День добрый всем! Проблема: 1) Есть файл со вставленными как объект PDF файлами. Необходимо: Скопировать эти файлы в...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

Новые блоги и статьи
Оптимизация производительности Express.js бэкенда
Reangularity 23.05.2025
Express. js заслуженно остаётся одним из самых популярных инструментов для создания бэкенда, но даже он не застрахован от проблем с производительностью. Многие разработчики сталкиваются с ситуацией,. . .
Продвинутая обработка данных с LINQ в C#
stackOverflow 23.05.2025
LINQ (Language Integrated Query) — это фундаментальное изменение парадигмы работы с данными в C#. Простые запросы Where и Select знакомы любому разработчику, но настоящая мощь LINQ раскрывается в. . .
Инфраструктура PKI и сертификатов безопасности
Mr. Docker 23.05.2025
PKI (Public Key Infrastructure) — это невидимый фундамент цифрового доверия, без которого современный интернет просто рассыпался бы как карточный домик. За этой аббревиатурой скрывается целый. . .
Аутентификация OAuth в Python
py-thonny 22.05.2025
OAuth (Open Authorization) — это целый стандарт для делегированного доступа. Звучит занудно? Давайте проще: OAuth позволяет приложениям получать доступ к информации пользователя на сторонних сервисах. . .
Хеширование и соль паролей в веб-приложениях C#
stackOverflow 22.05.2025
Когда-то в начале своей карьеры я тоже грешил простейшими подходами к хранению паролей – MD5-хеширование казалось верхом защиты. Но технологии не стоят на месте, вычислительные мощьности растут, и. . .
Генераторы Python для эффективной обработки данных
AI_Generated 21.05.2025
В Python существует инструмент настолько мощный и в то же время недооценённый, что я часто сравниваю его с тайным оружием в арсенале программиста. Речь идёт о генераторах — одной из самых элегантных. . .
Чем заменить Swagger в .NET WebAPI
stackOverflow 21.05.2025
Если вы создавали Web API на . NET в последние несколько лет, то наверняка сталкивались с зелёным интерфейсом Swagger UI. Этот инструмент стал практически стандартом для документирования и. . .
Использование Linq2Db в проектах C# .NET
UnmanagedCoder 21.05.2025
Среди множества претендентов на корону "идеального ORM" особое место занимает Linq2Db — микро-ORM, балансирующий между мощью полноценных инструментов и легковесностью ручного написания SQL. Что. . .
Реализация Domain-Driven Design с Java
Javaican 20.05.2025
DDD — это настоящий спасательный круг для проектов со сложной бизнес-логикой. Подход, предложенный Эриком Эвансом, позволяет создавать элегантные решения, которые точно отражают реальную предметную. . .
Возможности и нововведения C# 14
stackOverflow 20.05.2025
Выход версии C# 14, который ожидается вместе с . NET 10, приносит ряд интересных нововведений, действительно упрощающих жизнь разработчиков. Вы уже хотите опробовать эти новшества? Не проблема! Просто. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru