iTextSharp.LGPLv2.Core получить текст из PDF в строку - PullRequest
0 голосов
/ 18 июня 2020

недавно наш проект обновился до новой версии iTextSharp.LGPLv2.Core v1.6.5. У меня был метод извлечения текста из файла PDF.

Тогда я использовал это:

        if (File.Exists(pdf1Path))
        {
            var pdfReader = new PdfReader(pdf1Path);
            string pdfText;
            string currentText;

            //Text extracting to List
            for (int i = 1; i <= pdfReader.NumberOfPages; i++)
            {
                currentText = PdfTextExtractor.GetTextFromPage(pdfReader, i);
                currentText =
                    Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8,
                        Encoding.Default.GetBytes(currentText)));
                text.Append(currentText);
            }

            pdfText = text.ToString();
         }

Теперь я внезапно не могу распознать «PdfTextExtractor». Есть ли другой вариант, как заставить это работать? Обратите внимание, что мне не разрешено устанавливать какие-либо другие библиотеки или пакеты.

Я пытался использовать

using iTextSharp.text.pdf.parser;

, но он больше не распознается. И когда я пытаюсь его загрузить, он просто перекрывается с iTextSharp.LGPLv2.Core, что дает мне ошибку.

Спасибо за помощь

Ответы [ 2 ]

2 голосов
/ 18 июня 2020

IIR C (и если я правильно прочитал историю git), пространство имен iTextSharp.text.pdf.parser было введено в iTextSharp 5.0.2, т.е. оно никогда не входило в выпуски iTextSharp с лицензией LGPL.

(Ситуация немного отличается для выпусков iText / Java, здесь первые доказательства концепции уже присутствовали в последних выпусках LGPL.)

Таким образом,

недавно наш проект обновлен до новой версии iTextSharp.LGPLv2.Core v1.6.5

Если вы действительно обновили , то ваша предыдущая версия, похоже, сопровождалась резервной копией (из версии 5.x) или кросс-портированный (из iText / Java до версии 5) пространство имен парсера в нем. Однако более вероятно, что вы на самом деле понизили с iTextSharp 5.x до вилки, основанной на iTextSharp 4.2 или более ранней версии, а при понижении вы обычно теряете функции.

Я предполагаю, что вы используете iTextSharp.LGPLv2.Core, чтобы использовать LGPL вместо выбора между AGPL и коммерческой лицензией в iTextSharp 5, или вы делаете это для поддержки Core .

Если дело действительно в лицензии, вы можете либо попробовать портировать пакет парсера iText / Java в последней версии LGPL (2.1.7) или теге (4.2.0), либо полностью повторно реализовать извлечение текста.

Если речь идет о поддержке Core, и вы готовы купить лицензию или подпадать под действие AGPL, вы также можете попробовать выполнить бэкпорт последнего пространства имен парсера iText 5.x. Это должно быть проще, чем перекрестный перенос из Java, и этот код извлечения текста намного более продвинут, чем код iText / Java из более ранней версии 5.

0 голосов
/ 19 июня 2020

По прошествии некоторого времени я обнаружил, что эту проблему можно обойти. Поскольку мне не разрешено использовать PdfTextExtractor, я использовал этот код, который работает почти так же, как и упомянутый метод

        var reader = new PdfReader();
        var pdfFile = createSamplePdfFile();
        var reader = new PdfReader(pdfFile);

        var streamBytes = reader.GetPageContent(1);
        var tokenizer = new PrTokeniser(new RandomAccessFileOrArray(streamBytes));

        var stringsList = new List<string>();
        while (tokenizer.NextToken())
        {
            if (tokenizer.TokenType == PrTokeniser.TK_STRING)
            {
                stringsList.Add(tokenizer.StringValue);
            }
        }

        reader.Close();

Надеюсь, это поможет кому-то с аналогичной проблемой, чем я :)

Спасибо всем :)

...