diff --git a/CHANGELOG.md b/CHANGELOG.md index ad37a05fb..e792e7fc8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- info 'doc-producer' + ## [8.16.6] - 2025-10-02 ### Added diff --git a/docs/html/doc_meta_info.html b/docs/html/doc_meta_info.html index 4be29191e..0ac8ce086 100644 --- a/docs/html/doc_meta_info.html +++ b/docs/html/doc_meta_info.html @@ -97,7 +97,7 @@

Properties for generic metadata

Set the document creator tool (es. Venus Doc), should be usually supported in document formats like html or pdf

-

fj-doc-freemarker(html), fj-doc-mod-fop(pdf),

+

fj-doc-freemarker(html), fj-doc-mod-fop(pdf), fj-doc-mod-openpdf-ext(pdf),

@@ -108,29 +108,29 @@

Properties for generic metadata

- -

doc-language

+ +

doc-producer

-

Set the document language, should be usually supported in document formats like html or pdf

+

Set the document producer tool (es. Venus Doc), should be usually supported in document formats like html or pdf

-

fj-doc-freemarker(html), fj-doc-mod-fop(pdf),

+

fj-doc-freemarker(html), fj-doc-mod-fop(pdf), fj-doc-mod-openpdf-ext(pdf),

-

1.0.0

+

8.16.7

- -

doc-subject

+ +

doc-language

-

Set the document subject, should be usually supported in document formats like html or pdf

+

Set the document language, should be usually supported in document formats like html or pdf

fj-doc-freemarker(html), fj-doc-mod-fop(pdf),

@@ -144,11 +144,11 @@

Properties for generic metadata

- -

doc-version

+ +

doc-subject

-

A custom property to track meta model version

+

Set the document subject, should be usually supported in document formats like html or pdf

fj-doc-freemarker(html), fj-doc-mod-fop(pdf),

@@ -162,29 +162,29 @@

Properties for generic metadata

- -

default-table-padding

+ +

doc-version

-

Set default table padding, default '-1' means 'unset' (shoud be inherited by all cells, in HTML it is handled by 'padding')

+

A custom property to track meta model version

-

fj-doc-freemarker(html), fj-doc-poi(xls), fj-doc-poi(xlsx), fj-doc-mod-fop(pdf), fj-doc-mod-openpdf(pdf), fj-doc-mod-itext(pdf),

+

fj-doc-freemarker(html), fj-doc-mod-fop(pdf),

-

-1

+

-

1.5.0

+

1.0.0

- -

default-table-spacing

+ +

default-table-padding

-

Set default table spacing, default '-1' means 'unset' (shoud be inherited by all cells, in HTML it is handled by 'margin')

+

Set default table padding, default '-1' means 'unset' (shoud be inherited by all cells, in HTML it is handled by 'padding')

fj-doc-freemarker(html), fj-doc-poi(xls), fj-doc-poi(xlsx), fj-doc-mod-fop(pdf), fj-doc-mod-openpdf(pdf), fj-doc-mod-itext(pdf),

@@ -198,11 +198,11 @@

Properties for generic metadata

- -

default-cell-border-width

+ +

default-table-spacing

-

Set default cell border width for all table cells, default '-1' means 'unset'

+

Set default table spacing, default '-1' means 'unset' (shoud be inherited by all cells, in HTML it is handled by 'margin')

fj-doc-freemarker(html), fj-doc-poi(xls), fj-doc-poi(xlsx), fj-doc-mod-fop(pdf), fj-doc-mod-openpdf(pdf), fj-doc-mod-itext(pdf),

@@ -216,53 +216,53 @@

Properties for generic metadata

- -

table-border-collapse

+ +

default-cell-border-width

-

Set the default table-border-collapse mode, possible values are 'separate' or 'collapse'. (note that this is a document scoped property, all tables in documnent will be affected)

+

Set default cell border width for all table cells, default '-1' means 'unset'

-

fj-doc-mod-fop(pdf),

+

fj-doc-freemarker(html), fj-doc-poi(xls), fj-doc-poi(xlsx), fj-doc-mod-fop(pdf), fj-doc-mod-openpdf(pdf), fj-doc-mod-itext(pdf),

-

separate

+

-1

-

3.2.2

+

1.5.0

- -

default-font-name

+ +

table-border-collapse

-

Set the default font name

+

Set the default table-border-collapse mode, possible values are 'separate' or 'collapse'. (note that this is a document scoped property, all tables in documnent will be affected)

-

fj-doc-mod-fop(pdf), fj-doc-mod-openpdf-ext(pdf), fj-doc-mod-openrtf-ext(rtf),

+

fj-doc-mod-fop(pdf),

-

helvetica

+

separate

-

1.4.5

+

3.2.2

- -

default-font-size

+ +

default-font-name

-

Set the default font size

+

Set the default font name

fj-doc-mod-fop(pdf), fj-doc-mod-openpdf-ext(pdf), fj-doc-mod-openrtf-ext(rtf),

-

10

+

helvetica

1.4.5

@@ -270,17 +270,17 @@

Properties for generic metadata

- -

default-font-style

+ +

default-font-size

-

Set the default font style

+

Set the default font size

fj-doc-mod-fop(pdf), fj-doc-mod-openpdf-ext(pdf), fj-doc-mod-openrtf-ext(rtf),

-

normal

+

10

1.4.5

@@ -288,28 +288,46 @@

Properties for generic metadata

+ +

default-font-style

+ + +

Set the default font style

+ + +

fj-doc-mod-fop(pdf), fj-doc-mod-openpdf-ext(pdf), fj-doc-mod-openrtf-ext(rtf),

+ + +

normal

+ + +

1.4.5

+ + + +

suppress-wrong-type-error

- +

If set to 'a' or 'true' it will set suppress some type error.

- +

fj-doc-mod-openpdf-ext(pdf), fj-doc-mod-openrtf-ext(rtf),

- +

false

- +

8.11.5

- +

table-check-integrity

- +

Check integrity of table structure, see https://github.com/fugerit-org/fj-doc/issues/480. Allowed values : @@ -318,13 +336,13 @@

Properties for generic metadata

'fail' - report on the log table structure issues as error and throw a DocFeatureRuntimeException.

- +

all,

- +

warn

- +

8.15.0

diff --git a/fj-doc-base/src/main/java/org/fugerit/java/doc/base/config/VenusVersion.java b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/config/VenusVersion.java new file mode 100644 index 000000000..0dc612f92 --- /dev/null +++ b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/config/VenusVersion.java @@ -0,0 +1,36 @@ +package org.fugerit.java.doc.base.config; + +import org.fugerit.java.core.util.mvn.FJCoreMaven; +import org.fugerit.java.core.util.mvn.MavenProps; + +import java.util.Optional; + +public class VenusVersion { + + private VenusVersion() {} + + public static final String FJ_DOC_BASE_ARTIFACT_ID = "fj-doc-base"; + + public static final String NOT_AVAILABLE = "NA"; + + public static final String VENUS_CREATOR = String.format( "%s (https://github.com/fugerit-org/fj-doc)", DocConfig.FUGERIT_VENUS_DOC ); + + public static final String VENUS_PRODUCER_FORMAT = "%s (%s) over %s (%s)"; + + public static Optional getFjDocCoreVersion() { + return getFjDocModuleVersion( FJ_DOC_BASE_ARTIFACT_ID ); + } + + public static String getFjDocCoreVersionS() { + return getFjDocCoreVersion().orElse( NOT_AVAILABLE ); + } + + public static Optional getFjDocModuleVersion( String artifactId ) { + return MavenProps.getPropertyOptional(FJCoreMaven.FJ_CORE_GROUP_ID, artifactId, MavenProps.VERSION ); + } + + public static String getFjDocModuleVersionS( String artifactId ) { + return getFjDocModuleVersion( artifactId ).orElse( NOT_AVAILABLE ); + } + +} diff --git a/fj-doc-base/src/main/java/org/fugerit/java/doc/base/model/DocBase.java b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/model/DocBase.java index 93a61b670..ca68ff5bc 100644 --- a/fj-doc-base/src/main/java/org/fugerit/java/doc/base/model/DocBase.java +++ b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/model/DocBase.java @@ -163,6 +163,10 @@ public String getInfoDocCreator() { return this.getStableInfo().getProperty( DocInfo.INFO_DOC_CREATOR ); } + public String getInfoDocProducer() { + return this.getStableInfo().getProperty( DocInfo.INFO_DOC_PRODUCER ); + } + public String getInfoDocLanguage() { return this.getStableInfo().getProperty( DocInfo.INFO_DOC_LANGUAGE ); } diff --git a/fj-doc-base/src/main/java/org/fugerit/java/doc/base/model/DocInfo.java b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/model/DocInfo.java index f6c8cf5c1..65e5d9d21 100644 --- a/fj-doc-base/src/main/java/org/fugerit/java/doc/base/model/DocInfo.java +++ b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/model/DocInfo.java @@ -61,6 +61,11 @@ public DocInfo() { * See {@link GenericConsts#INFO_KEY_DOC_CREATOR}. */ public static final String INFO_DOC_CREATOR = GenericConsts.INFO_KEY_DOC_CREATOR; + + /** + * See {@link GenericConsts#INFO_KEY_DOC_PRODUCER}. + */ + public static final String INFO_DOC_PRODUCER = GenericConsts.INFO_KEY_DOC_PRODUCER; /** * See {@link GenericConsts#INFO_KEY_DOC_LANGUAGE}. diff --git a/fj-doc-base/src/main/java/org/fugerit/java/doc/base/typehelper/generic/GenericConsts.java b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/typehelper/generic/GenericConsts.java index 57f00f992..7ebe2e4bd 100644 --- a/fj-doc-base/src/main/java/org/fugerit/java/doc/base/typehelper/generic/GenericConsts.java +++ b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/typehelper/generic/GenericConsts.java @@ -50,6 +50,13 @@ private GenericConsts() {} * @since 1.0 */ public static final String INFO_KEY_DOC_CREATOR = "doc-creator"; + + /** + * See 'doc-producer' documentation + * + * @since 1.0 + */ + public static final String INFO_KEY_DOC_PRODUCER = "doc-producer"; /** * See 'doc-language' documentation diff --git a/fj-doc-base/src/main/resources/META-INF/native-image/org.fugerit.java/fj-doc-base/reflect-config.json b/fj-doc-base/src/main/resources/META-INF/native-image/org.fugerit.java/fj-doc-base/reflect-config.json index ebc9be094..408adc460 100644 --- a/fj-doc-base/src/main/resources/META-INF/native-image/org.fugerit.java/fj-doc-base/reflect-config.json +++ b/fj-doc-base/src/main/resources/META-INF/native-image/org.fugerit.java/fj-doc-base/reflect-config.json @@ -162,6 +162,9 @@ }, { "name" : "getInfoDocLanguage", "parameterTypes" : [ ] + }, { + "name" : "getInfoDocProducer", + "parameterTypes" : [ ] }, { "name" : "getInfoDocSubject", "parameterTypes" : [ ] @@ -3070,6 +3073,51 @@ "name" : "wait", "parameterTypes" : [ "long", "int" ] } ] +}, { + "condition" : { + "typeReachable" : "org.fugerit.java.doc.base.facade.DocFacadeSource" + }, + "name" : "org.fugerit.java.doc.base.config.VenusVersion", + "methods" : [ { + "name" : "equals", + "parameterTypes" : [ "java.lang.Object" ] + }, { + "name" : "getClass", + "parameterTypes" : [ ] + }, { + "name" : "getFjDocCoreVersion", + "parameterTypes" : [ ] + }, { + "name" : "getFjDocCoreVersionS", + "parameterTypes" : [ ] + }, { + "name" : "getFjDocModuleVersion", + "parameterTypes" : [ "java.lang.String" ] + }, { + "name" : "getFjDocModuleVersionS", + "parameterTypes" : [ "java.lang.String" ] + }, { + "name" : "hashCode", + "parameterTypes" : [ ] + }, { + "name" : "notify", + "parameterTypes" : [ ] + }, { + "name" : "notifyAll", + "parameterTypes" : [ ] + }, { + "name" : "toString", + "parameterTypes" : [ ] + }, { + "name" : "wait", + "parameterTypes" : [ ] + }, { + "name" : "wait", + "parameterTypes" : [ "long" ] + }, { + "name" : "wait", + "parameterTypes" : [ "long", "int" ] + } ] }, { "condition" : { "typeReachable" : "org.fugerit.java.doc.base.facade.DocFacadeSource" diff --git a/fj-doc-base/src/test/java/test/org/fugerit/java/doc/base/config/TestVenusVersion.java b/fj-doc-base/src/test/java/test/org/fugerit/java/doc/base/config/TestVenusVersion.java new file mode 100644 index 000000000..adb3cd6bf --- /dev/null +++ b/fj-doc-base/src/test/java/test/org/fugerit/java/doc/base/config/TestVenusVersion.java @@ -0,0 +1,15 @@ +package test.org.fugerit.java.doc.base.config; + +import org.fugerit.java.doc.base.config.VenusVersion; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class TestVenusVersion { + + @Test + void testVersion() { + Assertions.assertNotNull( VenusVersion.getFjDocCoreVersionS() ); + Assertions.assertNotNull( VenusVersion.getFjDocModuleVersionS( "fj-doc-base" ) ); + } + +} diff --git a/fj-doc-base/src/test/java/test/org/fugerit/java/doc/base/model/TestDocBase.java b/fj-doc-base/src/test/java/test/org/fugerit/java/doc/base/model/TestDocBase.java index 336492fb8..70bce1c02 100644 --- a/fj-doc-base/src/test/java/test/org/fugerit/java/doc/base/model/TestDocBase.java +++ b/fj-doc-base/src/test/java/test/org/fugerit/java/doc/base/model/TestDocBase.java @@ -38,6 +38,7 @@ void test1() { log.info( "info 8 : {}", docBase.isUseFooter() ); log.info( "info 9 : {}", docBase.isUseHeader() ); log.info( "info 10 : {}", docBase.getInfoDocCreator() ); + log.info( "info 11 : {}", docBase.getInfoDocProducer() ); docBase.setDocHeader( new DocHeader() ); docBase.setDocFooter( new DocFooter() ); log.info( "info 8 : {}", docBase.isUseFooter() ); diff --git a/fj-doc-guide/src/main/docs/asciidoc/chapters/03_4_doc_format_info.adoc b/fj-doc-guide/src/main/docs/asciidoc/chapters/03_4_doc_format_info.adoc index 553f71197..da0d34840 100644 --- a/fj-doc-guide/src/main/docs/asciidoc/chapters/03_4_doc_format_info.adoc +++ b/fj-doc-guide/src/main/docs/asciidoc/chapters/03_4_doc_format_info.adoc @@ -11,6 +11,8 @@ For instance in this document we set following _info_ elements : * doc-title * doc-author * doc-language +* doc-creator +* doc-producer Some DocHandler will ignore some info elements. diff --git a/fj-doc-lib-autodoc/src/test/resources/docs/meta_xml/adm_standard_meta_info.xml b/fj-doc-lib-autodoc/src/test/resources/docs/meta_xml/adm_standard_meta_info.xml index 8e451a5f5..9c4d517d9 100644 --- a/fj-doc-lib-autodoc/src/test/resources/docs/meta_xml/adm_standard_meta_info.xml +++ b/fj-doc-lib-autodoc/src/test/resources/docs/meta_xml/adm_standard_meta_info.xml @@ -72,7 +72,18 @@ pdf fj-doc-freemarker(html) fj-doc-mod-fop(pdf) - + fj-doc-mod-openpdf-ext(pdf) + + + doc-producer + Set the document producer tool (es. Venus Doc), should be usually supported in document formats like html or pdf + 8.16.7 + html + pdf + fj-doc-freemarker(html) + fj-doc-mod-fop(pdf) + fj-doc-mod-openpdf-ext(pdf) + doc-language Set the document language, should be usually supported in document formats like html or pdf diff --git a/fj-doc-mod-fop/src/main/java/org/fugerit/java/doc/mod/fop/PdfFopTypeHandler.java b/fj-doc-mod-fop/src/main/java/org/fugerit/java/doc/mod/fop/PdfFopTypeHandler.java index 65c05015c..771b670bc 100644 --- a/fj-doc-mod-fop/src/main/java/org/fugerit/java/doc/mod/fop/PdfFopTypeHandler.java +++ b/fj-doc-mod-fop/src/main/java/org/fugerit/java/doc/mod/fop/PdfFopTypeHandler.java @@ -22,13 +22,10 @@ import org.fugerit.java.core.lang.helpers.BooleanUtils; import org.fugerit.java.core.lang.helpers.ClassHelper; import org.fugerit.java.core.lang.helpers.StringUtils; +import org.fugerit.java.core.util.mvn.MavenProps; import org.fugerit.java.core.xml.dom.DOMIO; import org.fugerit.java.core.xml.dom.DOMUtils; -import org.fugerit.java.doc.base.config.DocCharsetProvider; -import org.fugerit.java.doc.base.config.DocConfig; -import org.fugerit.java.doc.base.config.DocInput; -import org.fugerit.java.doc.base.config.DocOutput; -import org.fugerit.java.doc.base.config.DocTypeHandler; +import org.fugerit.java.doc.base.config.*; import org.fugerit.java.doc.mod.fop.config.FopConfigClassLoaderWrapper; import org.w3c.dom.Element; import org.w3c.dom.NodeList; @@ -121,6 +118,16 @@ public void setFopConfig(FopConfig fopConfig) { private transient UnsafeConsumer fopWrapConsumer; + private static String getModuleVersion() { + return VenusVersion.getFjDocModuleVersionS( "fj-doc-mod-fop"); + } + + private static String getApacheFOPVersion() { + return MavenProps.getProperty( "org.apache.xmlgraphics", "fop", MavenProps.VERSION ); + } + + private static final String PRODUCER_DEFAULT = String.format( VenusVersion.VENUS_PRODUCER_FORMAT, DocConfig.FUGERIT_VENUS_DOC , getModuleVersion() , "Apache FOP", getApacheFOPVersion() ); + public PdfFopTypeHandler( Charset charset, FopConfig fopConfig, boolean accessibility, boolean keepEmptyTags ) { super( DocConfig.TYPE_PDF, charset ); this.fopConfig = fopConfig; @@ -172,6 +179,8 @@ private FopConfigWrap newFopWrap() throws ConfigException { } foUserAgent.setAccessibility( this.isAccessibility() ); foUserAgent.setKeepEmptyTags( this.isKeepEmptyTags() ); + foUserAgent.setProducer( PRODUCER_DEFAULT ); + foUserAgent.setCreator( VenusVersion.VENUS_CREATOR ); return new FopConfigWrap( fopFactory, foUserAgent ); } diff --git a/fj-doc-mod-fop/src/test/java/test/org/fugerit/java/doc/mod/fop/TestProducer.java b/fj-doc-mod-fop/src/test/java/test/org/fugerit/java/doc/mod/fop/TestProducer.java new file mode 100644 index 000000000..60f10c65d --- /dev/null +++ b/fj-doc-mod-fop/src/test/java/test/org/fugerit/java/doc/mod/fop/TestProducer.java @@ -0,0 +1,37 @@ +package test.org.fugerit.java.doc.mod.fop; + +import lombok.extern.slf4j.Slf4j; +import org.fugerit.java.core.function.SafeFunction; +import org.fugerit.java.core.lang.helpers.ClassHelper; +import org.fugerit.java.doc.base.config.DocInput; +import org.fugerit.java.doc.base.config.DocOutput; +import org.fugerit.java.doc.base.config.DocTypeHandler; +import org.fugerit.java.doc.mod.fop.FreeMarkerFopTypeHandlerUTF8; +import org.fugerit.java.doc.mod.fop.InitFopHandler; +import org.fugerit.java.doc.mod.fop.PdfFopTypeHandler; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import test.org.fugerit.java.BasicTest; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStreamReader; + +@Slf4j +class TestProducer extends BasicTest { + + @Test + void testProducer() throws Exception { + DocTypeHandler handler = PdfFopTypeHandler.HANDLER; + String fileName = "doc_producer"; + File outputFile = new File( String.format( "target/%s.%s", fileName, handler.getType() ) ); + try ( InputStreamReader reader = new InputStreamReader( ClassHelper.loadFromDefaultClassLoader( String.format( "sample/%s.xml", fileName ) ) ); + FileOutputStream fos = new FileOutputStream( outputFile ) ) { + handler.handle( DocInput.newInput( handler.getType(), reader ) , DocOutput.newOutput( fos ) ); + log.info( "file {}", outputFile.getCanonicalFile() ); + Assertions.assertTrue( outputFile.exists() ); + } + } + +} diff --git a/fj-doc-mod-fop/src/test/resources/sample/doc_producer.xml b/fj-doc-mod-fop/src/test/resources/sample/doc_producer.xml new file mode 100644 index 000000000..50de348b7 --- /dev/null +++ b/fj-doc-mod-fop/src/test/resources/sample/doc_producer.xml @@ -0,0 +1,19 @@ + + + 10;10;10;30 + collapse + Apache FOP doc-producer + Integration test for doc-producer info attribure + fugerit79 + My Creator + + Page ${currentPage} + + + + Producer doc sample + Test producer for FOP Module + + diff --git a/fj-doc-mod-openpdf-ext/src/main/java/org/fugerit/java/doc/mod/openpdf/ext/helpers/DocumentMetaHelper.java b/fj-doc-mod-openpdf-ext/src/main/java/org/fugerit/java/doc/mod/openpdf/ext/helpers/DocumentMetaHelper.java index b814bb3d7..033c96a24 100644 --- a/fj-doc-mod-openpdf-ext/src/main/java/org/fugerit/java/doc/mod/openpdf/ext/helpers/DocumentMetaHelper.java +++ b/fj-doc-mod-openpdf-ext/src/main/java/org/fugerit/java/doc/mod/openpdf/ext/helpers/DocumentMetaHelper.java @@ -3,7 +3,9 @@ import com.lowagie.text.Document; import org.fugerit.java.core.function.SafeFunction; import org.fugerit.java.core.function.UnsafeConsumer; +import org.fugerit.java.core.util.mvn.MavenProps; import org.fugerit.java.doc.base.config.DocConfig; +import org.fugerit.java.doc.base.config.VenusVersion; import org.fugerit.java.doc.base.model.DocBase; import org.fugerit.java.doc.base.typehelper.generic.GenericConsts; @@ -11,9 +13,15 @@ public class DocumentMetaHelper { private DocumentMetaHelper() {} - public static final String CREATOR_DEFAULT = String.format( "%s (https://github.com/fugerit-org/fj-doc)", DocConfig.FUGERIT_VENUS_DOC ); + private static String getModuleVersion() { + return VenusVersion.getFjDocModuleVersionS( "fj-doc-mod-openpdf-ext"); + } + + private static String getOpenPDFVersion() { + return MavenProps.getProperty( "com.github.librepdf", "openpdf", MavenProps.VERSION ); + } - public static final String PRODUCER_DEFAULT = String.format( "%s over %s", DocConfig.FUGERIT_VENUS_DOC , Document.getProduct() ); + private static final String PRODUCER_DEFAULT = String.format( VenusVersion.VENUS_PRODUCER_FORMAT, DocConfig.FUGERIT_VENUS_DOC , getModuleVersion() , Document.getProduct(), getOpenPDFVersion() ); private static void metaWorker(String property, UnsafeConsumer fun ) { SafeFunction.applyIfNotNull( property, () -> fun.accept( property ) ); @@ -34,9 +42,11 @@ public static void handleDocMeta(Document document, DocBase docBase) { docBase.getStableInfo().getProperty(GenericConsts.INFO_KEY_DOC_LANGUAGE), document::setDocumentLanguage ); metaWorker( - docBase.getStableInfo().getProperty(GenericConsts.INFO_KEY_DOC_CREATOR, CREATOR_DEFAULT), + docBase.getStableInfo().getProperty(GenericConsts.INFO_KEY_DOC_CREATOR, VenusVersion.VENUS_CREATOR), document::addCreator ); - document.addProducer( PRODUCER_DEFAULT ); + metaWorker( + docBase.getStableInfo().getProperty(GenericConsts.INFO_KEY_DOC_PRODUCER, PRODUCER_DEFAULT), + document::addProducer ); } }