2014-11-04 1 views
1

Извините за непонятный вопрос, который вчера я опубликовал. Я хочу сохранить 2 строки (string1 и string2) в пользовательском свойстве, так что строка с pdf. У меня уже есть строка, но я не знаю, как ее сохранить в области пользовательских свойств. Область настраиваемого свойства относится к FILE ---> Свойства ----> Пользовательские ----> Пользовательские свойства, которые попадают в «Имя» и «Значение» парами. Я хочу, чтобы строки string1 хранятся в хранилищах «Value» и string2 в «Name».Добавить/удалить/извлечь информацию из PDF с использованием настраиваемого свойства

Позже, я хочу получить/удалить строки в области пользовательских свойств. Могу ли я спросить, как достичь этого с помощью itext?

Спасибо и наилучшими пожеланиями,

Brian

ответ

2

Спасибо за разъяснение. Основываясь на вашем описании того, как добавить данные, которые вы хотите использовать, Acrobat, мы теперь знаем, что вы ссылались на метаданные.

Я использовал Acrobat для добавления пользовательской записи метаданных с именем «Test» со значением «test», и когда вы заглянете внутрь этого файла, вы увидите, что эта пара ключей/значений появляется на двух местах (отмечена красная точка):

enter image description here

  1. Он присутствует в словаре Info, который является традиционным места для хранения метаданных.
  2. Он присутствует в потоке метаданных XMP в виде тега с именем Test с префиксом pdfx (для пользовательских тегов).

Добавление дополнительного значения в словарь информации легко при использовании iText. Также возможно обновление метаданных XMP, но вам нужно будет создать поток XMP самостоятельно, и, возможно, это будет излишним в вашем случае. Возможно, ваш PDF-файл содержит только словарь Info и XMP.

Кроме того: вы говорите, что целью этого ключа является получение его значения и последующее удаление пользовательской записи. В этом случае достаточно добавить дополнительную запись в словаре Info.

В зависимости от того, хотите ли вы добавить пользовательскую запись в словаре Info в формате PDF, созданный с нуля или к существующему PDF вам нужно один из следующих примеров:

В CustomMetaEntry мы добавим стандартную запись метаданных для названия и пользовательская запись под названием Test:

public void createPdf(String dest) throws IOException, DocumentException { 
    Document document = new Document(); 
    PdfWriter.getInstance(document, new FileOutputStream(dest)); 
    document.addTitle("Some example"); 
    document.add(new Header("Test", "test")); 
    document.open(); 
    Paragraph p = new Paragraph("Hello World"); 
    document.add(p); 
    document.close(); 
} 

Как вы можете видеть, IText были addX() методов, чтобы добавить заголовок, автор, ... метаданные. Однако, если вы хотите добавить пользовательскую запись, вам необходимо использовать метод add(), чтобы добавить экземпляр Header. Вам необходимо добавить метаданные до, открывая документ.

Если вы хотите добавить записи в информационном словаре существующего PDF, вы можете взять пример из book, например MetadataPdf:

public void manipulatePdf(String src, String dest) throws IOException, DocumentException { 
    PdfReader reader = new PdfReader(src); 
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); 
    Map<String, String> info = reader.getInfo(); 
    info.put("Title", "Hello World stamped"); 
    info.put("Subject", "Hello World with changed metadata"); 
    info.put("Keywords", "iText in Action, PdfStamper"); 
    info.put("Creator", "Silly standalone example"); 
    info.put("Author", "Also Bruno Lowagie"); 
    stamper.setMoreInfo(info); 
    stamper.close(); 
    reader.close(); 
} 

В этом примере, мы получаем информацию словарь из PdfReader с использованием метода getInfo().

Это также ответ на вопрос о том, как получить пользовательские данные из PDF. Если Map содержит запись с ключом Test, вы можете получить его значение, как это:

String test = info.get("Test"); 

Теперь вы можете добавить дополнительные пары String с до этого Map. В этом примере мы добавляем стандартные ключи для метаданных, но вы также можете использовать пользовательские ключи.

Удаление записи из существующего файла PDF выполняется так же, как добавление записи. Достаточно добавить значение null. Например:

info.put("Test", null); 

Это позволит удалить пользовательскую запись с именем Test в случае, если такое значение присутствовал в словаре Info.

+0

Могу ли я попросить код восстановить пару строк обратно, предположим, что я сохраняю в пользовательском свойстве Name (Test) и Value (test), и я знаю, что Name is Test, как вернуть значение? Спасибо – brian

+0

Другое дело, когда я хэш pdf, прежде чем добавить пользовательское свойство (Test, test), я получаю строку a. – brian

+0

Однако, когда я использую метод info.put («Test», null) для удаления свойства Custom. После удаления пользовательского свойства я снова сделаю хеш-файл pdf, получаю еще одну строку b. Эти две строки не совпадают. Как я могу заставить их получить тот же результат хэша? Хеш-алгоритм я использую MD5 – brian