До сих пор все примеры, похоже, связаны с добавлением метаданных при создании нового документа. Я хочу взять существующий PDF-файл и добавить GUID для XMP каждой страницы, используя штампКак добавить метаданные XMP на каждую страницу существующего PDF с помощью iTextSharp
ответ
Наиболее распространенное использование XMP в контексте PDF - это когда вы добавляете поток XMP для всего документа, на который ссылается корневой словарь PDF (он же Каталог).
Однако, если вы обратитесь к спецификации PDF, вы заметите, что XMP можно использовать в контексте многих других объектов внутри PDF, причем уровень страницы является одним из них. Если вы посмотрите на спецификацию, вы обнаружите, что /Metadata
является дополнительным ключом в словаре страниц. Он ожидает ссылки на поток XMP.
Если вы хотите использовать iText для создания PDF-документа с нуля, вы не найдете конкретного метода для добавления этих метаданных, но вы можете использовать общий addPageDictEntry()
, который доступен в PdfWriter
. Вы передали бы PdfName.METADATA
в качестве ключа и ссылку на поток, который уже добавлен в значение PdfWriter
.
Ваш вопрос заключается не в создании PDF-кода с нуля, а в изменении существующего PDF-файла. В этом случае вам также нужен словарь. Это очень легко получить эти словари:
PdfReader reader = new PdfReader(src);
int n = reader.getNumberOfPages();
PdfDictionary page;
for (int p = 1; p <= n; p++) {
page = reader.getPageN(p);
// do stuff with the page dictionary
}
Этот фрагмент был взят сюда на Rotate90Degrees
примере. В этом примере мы рассмотрим /Rotate
запись, которая является номер:
PdfNumber rotate = page.getAsNumber(PdfName.ROTATE);
Вы должны искать /Metadata
записи, которая представляет собой поток:
PRStream stream = (PRStream) page.getAsStream(PdfName.METADATA);
Может быть, этот поток null
, в этот случай, вам нужно добавить /Metadata
запись, как показано в примере AddXmpToPage:
// We create some XMP bytes
ByteArrayOutputStream baos = new ByteArrayOutputStream();
XmpWriter xmp = new XmpWriter(baos, new PdfDictionary());
xmp.close();
// We add the XMP bytes to the writer
PdfIndirectObject ref = stamper.getWriter().addToBody(new PdfStream(baos.toByteArray()));
// We add a reference to the XMP bytes to the page dictionary
page.put(PdfName.METADATA, ref.getIndirectReference());
Если есть поток XMP, вы хотите сохранить его и добавить что-то к нему.
Это, как вы получите байты XMP:
byte[] xmpBytes = PdfReader.getStreamBytes(stream);
Вы выполняете свой XML магию этих байт, в результате чего нового byte[]
именованного newXmpBytes. Вы заменить исходные байты с этими новыми байт, как это:
stream.setData(newXmpBytes);
Все эти операции выполняются на существующем файле, который находится в PdfReader
объекте. Теперь вы должны сохранить изменения следующим образом:
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
stamper.close();
reader.close();
- 1. Прочитать XMP из существующего PDF с помощью iTextSharp
- 2. Удалить метаданные из существующего Pdf с помощью iTextsharp
- 3. Ссылка на метаданные XMP внутри PDF
- 4. Метаданные XMP из Pdf с использованием PdfSharp
- 5. Отделите каждую страницу в файле PDF iTextsharp
- 6. Как добавить пустую страницу в pdf с помощью iTextSharp?
- 7. Можно ли загрузить файл XMP в PDF с помощью iTextSharp?
- 8. Как вставить метаданные XMP в многостраничный файл PDF/A3?
- 9. Добавить страницу в документ PDF с помощью iTextSharp
- 10. Как установить метаданные метаданных существующего PDF с помощью iTextSharp для C#
- 11. Добавить созданную PDF-страницу с существующим PDF-файлом с iTextSharp
- 12. Как заполнить xmp в/Запись метаданных страниц PDF
- 13. как добавить гиперссылку в pdf страницу на страницу с помощью itextsharp
- 14. Как разбить каждую страницу pdf на несколько PDF-файлов на C# (используя iTextSharp)?
- 15. Внедрение метаданных XMP в PDF
- 16. Добавить закладку в pdf с помощью itextsharp
- 17. Как добавить Rectangle на каждую страницу документа с помощью iText?
- 18. как добавить pagenumbers к каждой странице pdf с помощью itextsharp
- 19. PDF iTextSharp, писать PDF линию другую страницу
- 20. iTextSharp - Изменить дополнительные метаданные в формате PDF
- 21. Добавить страницу в середине itextsharp
- 22. Как встроить метаданные в пользовательское поле XMP с помощью exiftool?
- 23. Чтение значения настраиваемого свойства из XMP с помощью itextsharp 5.5.9
- 24. Как добавить новую страницу в pdf для нескольких записей iTextsharp
- 25. Как печатать PDF с другим PDF-файлом с помощью iTextSharp
- 26. Как масштабировать страницу PDF при сохранении ориентации с помощью iTextSharp?
- 27. Как добавить поле формы PDF (или текст) и ссылку в нижней части страницы существующего документа PDF с помощью iTextSharp?
- 28. Изменение шрифта PDF с помощью iTextSharp
- 29. Как установить метаданные изображений XMP в iOS?
- 30. Добавить изображение на страницы PDF с помощью iTextSharp
Большое вам спасибо (общий ленивый вопрос, который я знаю), но как добавить запись метаданных. Не гарантируется, что на каждой странице будет запись метаданных. Еще раз спасибо – Rahul
Я обновляю свой вопрос. –