Я пытаюсь прочитать файл docx и заменить имена авторов постоянной строкой.
Это код моей основной функции.
import jakarta.xml.bind.JAXBException;
import org.docx4j.openpackaging.exceptions.Docx4JException;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
import org.docx4j.wml.CTTrackChange;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
public class App {
public static void main(String[] args) throws IOException, Docx4JException {
try {
// Replace "path/to/your/document.docx" with the actual file path
String inputFilePath = "src/main/java/shapes.docx";
String outputFilePath = "output_no_user_info.docx";
// Load the document
WordprocessingMLPackage wmlPackage = WordprocessingMLPackage.load(new File(inputFilePath));
// Remove user information
removeUserInfo(wmlPackage);
// Save the modified document
FileOutputStream fos = new FileOutputStream(outputFilePath);
wmlPackage.save(fos);
fos.close();
System.out.println("User information removed successfully. Saved as: " + outputFilePath);
} catch (Docx4JException | JAXBException e) {
e.printStackTrace();
System.err.println("Error processing the document: " + e.getMessage());
}
}
public static void removeUserInfo(WordprocessingMLPackage wmlPackage) throws Docx4JException, JAXBException {
MainDocumentPart documentPart = wmlPackage.getMainDocumentPart();
List trackedChanges = documentPart.getJAXBNodesViaXPath("//w:ins | //w:del", true);
for (Object change : trackedChanges) {
if (change instanceof CTTrackChange) {
CTTrackChange trackChange = (CTTrackChange) change;
trackChange.setAuthor("External");
}
}
}
}
pom.xml
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
org.example
Docx4jTest
1.0-SNAPSHOT
Archetype - Docx4jTest
http://maven.apache.org
org.docx4j
docx4j-core
11.4.9
org.docx4j
docx4j-JAXB-MOXy
11.4.5
org.eclipse.persistence
org.eclipse.persistence.moxy
4.0.2
org.apache.maven.plugins
maven-compiler-plugin
3.11.0
11
11
Я наблюдаю ошибку, показанную ниже, и она появляется, когда в документе есть какие-либо фигуры. Я вижу, что CTWordprocessingShape и org.eclipse.persistence.internal.oxm.Root — это разные классы, которые нужно привести, и код в этой строке (AbstractMarshalRecordImpl) нарушается.
Root xr = (Root) originalObject;
Ссылка на код для AbstractMarshalRecordImpl: — https://github.com/payara/patched-src-e ... .core/src/ org/eclipse/persistence/internal/oxm/record/AbstractMarshalRecordImpl.java
Я новичок в библиотеке и, пожалуйста, дайте мне знать, есть ли способ обойти эту проблему.
Я пробовал использовать ReferenceImpl вместо Moxy, ReferenceImpl не вызывает описанную ниже проблему.
Exception in thread "main" java.lang.ClassCastException: class org.docx4j.com.microsoft.schemas.office.word.x2010.wordprocessingShape.CTWordprocessingShape cannot be cast to class org.eclipse.persistence.internal.oxm.Root (org.docx4j.com.microsoft.schemas.office.word.x2010.wordprocessingShape.CTWordprocessingShape and org.eclipse.persistence.internal.oxm.Root are in unnamed module of loader 'app')
at org.eclipse.persistence.internal.oxm.record.AbstractMarshalRecordImpl.addXsiTypeAndClassIndicatorIfRequired(AbstractMarshalRecordImpl.java:211)
at org.eclipse.persistence.oxm.record.XMLRecord.addXsiTypeAndClassIndicatorIfRequired(XMLRecord.java:406)
at org.eclipse.persistence.internal.oxm.XMLObjectBuilder.buildIntoNestedRow(XMLObjectBuilder.java:462)
at org.eclipse.persistence.oxm.mappings.XMLAnyCollectionMapping.buildCompositeRow(XMLAnyCollectionMapping.java:683)
at org.eclipse.persistence.oxm.mappings.XMLAnyCollectionMapping.writeFromObjectIntoRow(XMLAnyCollectionMapping.java:554)
at org.eclipse.persistence.internal.oxm.XMLObjectBuilder.writeOutMappings(XMLObjectBuilder.java:349)
at org.eclipse.persistence.internal.oxm.XMLObjectBuilder.buildIntoNestedRow(XMLObjectBuilder.java:465)
at org.eclipse.persistence.internal.oxm.XMLObjectBuilder.buildIntoNestedRow(XMLObjectBuilder.java:445)
at org.eclipse.persistence.oxm.mappings.XMLCompositeObjectMapping.buildCompositeRowForDescriptor(XMLCompositeObjectMapping.java:466)
at org.eclipse.persistence.oxm.mappings.XMLCompositeObjectMapping.buildCompositeRow(XMLCompositeObjectMapping.java:447)
at org.eclipse.persistence.oxm.mappings.XMLCompositeObjectMapping.writeSingleValue(XMLCompositeObjectMapping.java:680)
at org.eclipse.persistence.oxm.mappings.XMLCompositeObjectMapping.writeFromObjectIntoRow(XMLCompositeObjectMapping.java:645)
at org.eclipse.persistence.internal.oxm.XMLObjectBuilder.writeOutMappings(XMLObjectBuilder.java:349)
at org.eclipse.persistence.internal.oxm.XMLObjectBuilder.buildIntoNestedRow(XMLObjectBuilder.java:465)
at org.eclipse.persistence.internal.oxm.XMLObjectBuilder.buildIntoNestedRow(XMLObjectBuilder.java:445)
at org.eclipse.persistence.oxm.mappings.XMLCompositeObjectMapping.buildCompositeRowForDescriptor(XMLCompositeObjectMapping.java:466)
Подробнее здесь: https://stackoverflow.com/questions/793 ... ith-shapes
Обработка DocX4j не удалась для документа с фигурами ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1736569472
Anonymous
Я пытаюсь прочитать файл docx и заменить имена авторов постоянной строкой.
Это код моей основной функции.
import jakarta.xml.bind.JAXBException;
import org.docx4j.openpackaging.exceptions.Docx4JException;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
import org.docx4j.wml.CTTrackChange;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
public class App {
public static void main(String[] args) throws IOException, Docx4JException {
try {
// Replace "path/to/your/document.docx" with the actual file path
String inputFilePath = "src/main/java/shapes.docx";
String outputFilePath = "output_no_user_info.docx";
// Load the document
WordprocessingMLPackage wmlPackage = WordprocessingMLPackage.load(new File(inputFilePath));
// Remove user information
removeUserInfo(wmlPackage);
// Save the modified document
FileOutputStream fos = new FileOutputStream(outputFilePath);
wmlPackage.save(fos);
fos.close();
System.out.println("User information removed successfully. Saved as: " + outputFilePath);
} catch (Docx4JException | JAXBException e) {
e.printStackTrace();
System.err.println("Error processing the document: " + e.getMessage());
}
}
public static void removeUserInfo(WordprocessingMLPackage wmlPackage) throws Docx4JException, JAXBException {
MainDocumentPart documentPart = wmlPackage.getMainDocumentPart();
List trackedChanges = documentPart.getJAXBNodesViaXPath("//w:ins | //w:del", true);
for (Object change : trackedChanges) {
if (change instanceof CTTrackChange) {
CTTrackChange trackChange = (CTTrackChange) change;
trackChange.setAuthor("External");
}
}
}
}
pom.xml
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
org.example
Docx4jTest
1.0-SNAPSHOT
Archetype - Docx4jTest
http://maven.apache.org
org.docx4j
docx4j-core
11.4.9
org.docx4j
docx4j-JAXB-MOXy
11.4.5
org.eclipse.persistence
org.eclipse.persistence.moxy
4.0.2
org.apache.maven.plugins
maven-compiler-plugin
3.11.0
11
11
Я наблюдаю ошибку, показанную ниже, и она появляется, когда в документе есть какие-либо фигуры. Я вижу, что CTWordprocessingShape и org.eclipse.persistence.internal.oxm.Root — это разные классы, которые нужно привести, и код в этой строке (AbstractMarshalRecordImpl) нарушается.
Root xr = (Root) originalObject;
Ссылка на код для AbstractMarshalRecordImpl: — https://github.com/payara/patched-src-eclipselink/blob/master/foundation/org.eclipse.persistence.core/src/ org/eclipse/persistence/internal/oxm/record/AbstractMarshalRecordImpl.java
Я новичок в библиотеке и, пожалуйста, дайте мне знать, есть ли способ обойти эту проблему.
Я пробовал использовать ReferenceImpl вместо Moxy, ReferenceImpl не вызывает описанную ниже проблему.
Exception in thread "main" java.lang.ClassCastException: class org.docx4j.com.microsoft.schemas.office.word.x2010.wordprocessingShape.CTWordprocessingShape cannot be cast to class org.eclipse.persistence.internal.oxm.Root (org.docx4j.com.microsoft.schemas.office.word.x2010.wordprocessingShape.CTWordprocessingShape and org.eclipse.persistence.internal.oxm.Root are in unnamed module of loader 'app')
at org.eclipse.persistence.internal.oxm.record.AbstractMarshalRecordImpl.addXsiTypeAndClassIndicatorIfRequired(AbstractMarshalRecordImpl.java:211)
at org.eclipse.persistence.oxm.record.XMLRecord.addXsiTypeAndClassIndicatorIfRequired(XMLRecord.java:406)
at org.eclipse.persistence.internal.oxm.XMLObjectBuilder.buildIntoNestedRow(XMLObjectBuilder.java:462)
at org.eclipse.persistence.oxm.mappings.XMLAnyCollectionMapping.buildCompositeRow(XMLAnyCollectionMapping.java:683)
at org.eclipse.persistence.oxm.mappings.XMLAnyCollectionMapping.writeFromObjectIntoRow(XMLAnyCollectionMapping.java:554)
at org.eclipse.persistence.internal.oxm.XMLObjectBuilder.writeOutMappings(XMLObjectBuilder.java:349)
at org.eclipse.persistence.internal.oxm.XMLObjectBuilder.buildIntoNestedRow(XMLObjectBuilder.java:465)
at org.eclipse.persistence.internal.oxm.XMLObjectBuilder.buildIntoNestedRow(XMLObjectBuilder.java:445)
at org.eclipse.persistence.oxm.mappings.XMLCompositeObjectMapping.buildCompositeRowForDescriptor(XMLCompositeObjectMapping.java:466)
at org.eclipse.persistence.oxm.mappings.XMLCompositeObjectMapping.buildCompositeRow(XMLCompositeObjectMapping.java:447)
at org.eclipse.persistence.oxm.mappings.XMLCompositeObjectMapping.writeSingleValue(XMLCompositeObjectMapping.java:680)
at org.eclipse.persistence.oxm.mappings.XMLCompositeObjectMapping.writeFromObjectIntoRow(XMLCompositeObjectMapping.java:645)
at org.eclipse.persistence.internal.oxm.XMLObjectBuilder.writeOutMappings(XMLObjectBuilder.java:349)
at org.eclipse.persistence.internal.oxm.XMLObjectBuilder.buildIntoNestedRow(XMLObjectBuilder.java:465)
at org.eclipse.persistence.internal.oxm.XMLObjectBuilder.buildIntoNestedRow(XMLObjectBuilder.java:445)
at org.eclipse.persistence.oxm.mappings.XMLCompositeObjectMapping.buildCompositeRowForDescriptor(XMLCompositeObjectMapping.java:466)
Подробнее здесь: [url]https://stackoverflow.com/questions/79346466/docx4j-processing-is-failing-for-a-document-with-shapes[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия