IText – PDF/A – Установка метаданных XMP для счета-фактуры ZUGFeRDC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 IText – PDF/A – Установка метаданных XMP для счета-фактуры ZUGFeRD

Сообщение Anonymous »

У меня возникла проблема с обработкой метаданных XMP при создании счета ZUGFeRD в формате PDF/A 3b. Прежде всего, я должен сказать, что я никогда раньше не имел дела с метаданными XMP, так что это действительно очень новая тема для меня.
Я использую версию 8.0.5 пакета iText, .NET Framework 4.7.2. с C#.
Это мой текущий код для установки метаданных XMP для документа PDF/A, но на самом деле этот код не работает, потому что я постоянно получаю ошибки, которые
< цитата>
iText.Kernel.XMP.XMPException: 'URI пространства имен схемы и префикс
несоответствие'

например, в этой строке код:
xmpMeta.SetStructField(extensionNamespace, schemaArrayItemPath, schemaNamespace, "schema", "Factur-X PDF/A Extension Schema");

У меня уже есть рабочий пример, в котором код не сталкивается с исключениями, но когда я проверяю документ PDF/A с помощью veraPDF, он сообщает мне много ошибок, что PDF /A не соответствует требованиям.
Нет ли примера установки действительных метаданных XMP для счетов-фактур ZUGFeRD? Я уже много искал, но безуспешно. Любая помощь будет очень признательна.
Это мой текущий код:
byte[] xmpBytes = pdfaDoc.GetXmpMetadata();
XMPMeta xmpMeta;
if (xmpBytes != null && xmpBytes.Length > 0)
{
xmpMeta = XMPMetaFactory.ParseFromBuffer(xmpBytes);
}
else
{
xmpMeta = XMPMetaFactory.Create();
}
XMPMetaFactory.GetSchemaRegistry().RegisterNamespace("http://www.aiim.org/pdfa/ns/extension/", "pdfaExtension");
XMPMetaFactory.GetSchemaRegistry().RegisterNamespace("http://www.aiim.org/pdfa/ns/schema#", "pdfaSchema");
XMPMetaFactory.GetSchemaRegistry().RegisterNamespace("http://www.aiim.org/pdfa/ns/property#", "pdfaProperty");
XMPMetaFactory.GetSchemaRegistry().RegisterNamespace("urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#", "fx");

PropertyOptions arrayOptions = new PropertyOptions(PropertyOptions.ARRAY | PropertyOptions.ARRAY_ORDERED);
PropertyOptions structOptions = new PropertyOptions(PropertyOptions.STRUCT);

string extensionNamespace = "http://www.aiim.org/pdfa/ns/extension/";
string schemaNamespace = "http://www.aiim.org/pdfa/ns/schema#";
string propertyNamespace = "http://www.aiim.org/pdfa/ns/property#";
string zugferdNamespace = "urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#";

xmpMeta.AppendArrayItem(extensionNamespace, "schemas", arrayOptions, null, null);

string schemaArrayItemPath = extensionNamespace + "schemas[1]";

xmpMeta.SetStructField(extensionNamespace, schemaArrayItemPath, schemaNamespace, "schema", "Factur-X PDF/A Extension Schema");
xmpMeta.SetStructField(extensionNamespace, schemaArrayItemPath, schemaNamespace, "namespaceURI", zugferdNamespace);
xmpMeta.SetStructField(extensionNamespace, schemaArrayItemPath, schemaNamespace, "prefix", "fx");

xmpMeta.SetStructField(extensionNamespace, schemaArrayItemPath, schemaNamespace, "property", null, arrayOptions);

string propertyArrayItemPath = schemaArrayItemPath + "/property[1]";

xmpMeta.AppendArrayItem(propertyNamespace, schemaArrayItemPath + "/property", structOptions, null, null);
xmpMeta.SetStructField(propertyNamespace, propertyArrayItemPath, propertyNamespace, "name", "ConformanceLevel");
xmpMeta.SetStructField(propertyNamespace, propertyArrayItemPath, propertyNamespace, "valueType", "Text");
xmpMeta.SetStructField(propertyNamespace, propertyArrayItemPath, propertyNamespace, "category", "external");
xmpMeta.SetStructField(propertyNamespace, propertyArrayItemPath, propertyNamespace, "description", "Conformance level of the invoice.");

xmpMeta.AppendArrayItem(propertyNamespace, schemaArrayItemPath + "/property", structOptions, null, null);
string secondPropertyPath = schemaArrayItemPath + "/property[2]";
xmpMeta.SetStructField(propertyNamespace, secondPropertyPath, propertyNamespace, "name", "DocumentType");
xmpMeta.SetStructField(propertyNamespace, secondPropertyPath, propertyNamespace, "valueType", "Text");
xmpMeta.SetStructField(propertyNamespace, secondPropertyPath, propertyNamespace, "category", "external");
xmpMeta.SetStructField(propertyNamespace, secondPropertyPath, propertyNamespace, "description", "Type of the document.");


Подробнее здесь: https://stackoverflow.com/questions/792 ... rd-invoice
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»