2013-11-18 3 views
0

Я запустил программу для извлечения значений метаданных из pdf с помощью iTextSharp и iTextSharp.pdfa. Я хочу принять значение «Имя» из pdf, пожалуйста, обратите внимание на приведенные ниже детали моей письменной программы, и кто-то любезно поможет мне найти vaule в pdfКак извлечь значения из pdf - SharePoint 2010

Ошибка ссылки объекта в этой строке !!!

строка abc = document.CustomValues ​​["Ваше имя:"]. ToString();

Если я хочу найти «Ваше имя:» изнутри pdf, как это сделать?

using PdfSharp.Pdf; 
using PdfSharp.Pdf.IO; 
using System.Windows.Forms; 

namespace WinPdfSP 
{ 
    class PdfDocuments 
    {  
     static public class CompatiblePdfReader 
     { 
public void ExtractMetadata(string sourcePath="C:\\Users\\UserName1\\Desktop\\SampleData.pdf") 
      { 
       PdfDocument document = CompatiblePdfReader.Open(sourcePath); 

       string abc = document.CustomValues["Your First Name:"].ToString(); 

        string docdet= 

        document.Info.Author.ToString() + Environment.NewLine + 
        document.Info.CreationDate.ToString() + Environment.NewLine + 
        document.Info.Creator.ToString() + Environment.NewLine + 
        document.Info.Keywords.ToString() + Environment.NewLine + 
        document.Info.ModificationDate.ToString() + Environment.NewLine + 
        document.Info.Producer.ToString() + Environment.NewLine + 
        document.Info.Subject.ToString() + Environment.NewLine + 
        document.Info.Title.ToString() + Environment.NewLine + 
        document.FileSize.ToString() + Environment.NewLine + 
        document.FullPath.ToString() + Environment.NewLine + 
        document.Guid.ToString() + Environment.NewLine + 
        document.Language.ToString() + Environment.NewLine + 
        document.PageCount.ToString() + Environment.NewLine + 
        document.Version.ToString(); 

        document.Tag.ToString(); 
} 
+0

В вашем PDF является «Ваше имя» на самом деле значение в метаданных или это значение в поле формы/макета в формате PDF? – thst

+0

Уважаемый thst, Большое спасибо за быстрый ответ !!!!! В моих PDF две записей возможны как это Вашего Имя: David___ Ваша Фамилия: _____George_______ Я пытаюсь получить это значение, используя строковый аргумент например: если я ввод «Ваше имя» Я должен получить вывод как «Давид» – Ajain

+0

Привет, thst. Это поле формы в PDF, на самом деле не значение в метаданных. Не могли бы вы предложить что-то для продолжения? – Ajain

ответ

0

Если я правильно понимаю ваши комментарии, метки полей («Ваше имя» и «Ваше последнее имя») не существуют ничем, кроме текста в pdf («на самом деле не значение в метаданных»). Если это так, то, вероятно, не очень красивый способ сделать это, так как у вас нет никакой гарантии, как текст хранится в pdf.

Итак, если вы не хотите вникнуть в формат pdf, вам может быть не повезло. Но вам также может быть повезло, что «Ваше имя: John Dough» на самом деле хранится вместе как одна строка (в отличие от, скажем, двух разных объектов: «Ваше имя:» и отдельно «John Dough»).

Если один объект, вы можете использовать любой из методов, упомянутых здесь to extract all text from the pdf. В одном из решений используется iTextSharp, который вы уже используете. Лично я успешно использовал PDFBox (также упоминается в ссылке). После преобразования в текст вы можете посмотреть в тексте и посмотреть, где хранятся имена относительно метки поля, и создать регулярное выражение для его извлечения.

Для этого, однако, входные pdf-файлы должны быть достаточно похожими, чтобы преобразование «в строку» приводило к последовательному и находлемому шаблону, касающемуся того, где имена помещены относительно ярлыков. Как уже упоминалось: если вам повезет: они будут рядом друг с другом. Менее повезло: много другого текста между ними. Не повезло: текстовая строка - это всего лишь символы в pdf в случайном порядке.

Успехов,

/адам

+0

Дорогой Адам, Большое вам спасибо за то, что он дал мне хороший совет – Ajain

+0

@ Ajain, хороший способ показать, что ответы полезны, путем их поддержки. Кроме того, если ответ правильно ответил на ваш вопрос, приятно выбрать его в качестве ответа (отметьте галочкой). Лучший / – AdamAL

1

Если ваш PDF действительно все еще содержит поле форм (AFAIK PDF/A acrofields запрещает), вы можете получить доступ к полю форм в объекте Acrofields в itextsharp.

[Обновить: Какую версию itextsharp вы используете? Этот фрагмент кода предназначен для java itext 2.1.7 (версия LGPL), но в любом случае он должен указывать на вас в правильном направлении. Если у вас есть поля XFA, поддержка itext * ограничена в некоторых аспектах. Я предлагаю вам проверить образцы кода в главе 6 IText в действии книгиhttp://itextpdf.com/examples/iia.php?id=121]

Чтобы получить доступ поле используйте следующий фрагмент кода (это Java, но itextsharp должны быть похожи):

AcroFields fields = reader.getAcroFields(); 
if(fields != null) { 
    String value = fields.getFieldItem("My Field Name").getValue(0); 
    [ ... do sth with the value ... ] 
} 

Надеюсь, вам это поможет. Acrofields - зверь, а иногда довольно странно. Пока вы говорите текстовые поля, вы должны быть в порядке. Для радиолюбителей или флажков вы должны обязательно посмотреть описание AppearanceState в справочной системе PDF.

+0

Уважаемый thst. Вы говорите, что правильные AcroFields - это правильная опция для извлечения значений ключевых слов метаданных внутри PDF, только ключевые значения могут извлекать не все слова в PDF. Большое спасибо – Ajain

+0

@Ajain, если вы проверите результат reader.AcroFields в своем pdf, он что-нибудь возвращает? Если нет, или результат равен нулю, то у вас нет Acrofields, и единственным вариантом является извлечение текста, как было предложено AdamAL. – thst

Смежные вопросы