Pregunta

Estoy intentando abrir MS Word documento de 2003 en Java, la búsqueda de una cadena especificada y sustituirla por una nueva cadena. Yo uso APACHE PDI para hacer eso. Mi código es como la siguiente:

public void searchAndReplace(String inputFilename, String outputFilename,
            HashMap<String, String> replacements) {
    File outputFile = null;
    File inputFile = null;
    FileInputStream fileIStream = null;
    FileOutputStream fileOStream = null;
    BufferedInputStream bufIStream = null;
    BufferedOutputStream bufOStream = null;
    POIFSFileSystem fileSystem = null;
    HWPFDocument document = null;
    Range docRange = null;
    Paragraph paragraph = null;
    CharacterRun charRun = null;
    Set<String> keySet = null;
    Iterator<String> keySetIterator = null;
    int numParagraphs = 0;
    int numCharRuns = 0;
    String text = null;
    String key = null;
    String value = null;
        try {
            // Create an instance of the POIFSFileSystem class and
            // attach it to the Word document using an InputStream.
            inputFile = new File(inputFilename);
            fileIStream = new FileInputStream(inputFile);
            bufIStream = new BufferedInputStream(fileIStream);
            fileSystem = new POIFSFileSystem(bufIStream);
            document = new HWPFDocument(fileSystem);
            docRange = document.getRange();
            numParagraphs = docRange.numParagraphs();
            keySet = replacements.keySet();
            for (int i = 0; i < numParagraphs; i++) {
                paragraph = docRange.getParagraph(i);
                text = paragraph.text();
                numCharRuns = paragraph.numCharacterRuns();
                for (int j = 0; j < numCharRuns; j++) {
                    charRun = paragraph.getCharacterRun(j);
                    text = charRun.text();
                    System.out.println("Character Run text: " + text);
                    keySetIterator = keySet.iterator();
                    while (keySetIterator.hasNext()) {
                        key = keySetIterator.next();
                        if (text.contains(key)) {
                            value = replacements.get(key);
                            charRun.replaceText(key, value);
                            docRange = document.getRange();
                            paragraph = docRange.getParagraph(i);
                            charRun = paragraph.getCharacterRun(j);
                            text = charRun.text();
                        }
                    }
                }
            }
            bufIStream.close();
            bufIStream = null;
            outputFile = new File(outputFilename);
            fileOStream = new FileOutputStream(outputFile);
            bufOStream = new BufferedOutputStream(fileOStream);
            document.write(bufOStream);
        } catch (Exception ex) {
            System.out.println("Caught an: " + ex.getClass().getName());
            System.out.println("Message: " + ex.getMessage());
            System.out.println("Stacktrace follows.............");
            ex.printStackTrace(System.out);
        }
}

Me llamo esta función con los argumentos siguientes:

HashMap<String, String> replacements = new HashMap<String, String>();
replacements.put("AAA", "BBB");
searchAndReplace("C:/Test.doc", "C:/Test1.doc", replacements);

Cuando el archivo Test.doc contiene una línea simple como esto: " AAA AEE ", funciona con éxito, pero cuando se utiliza un archivo complicado que va a leer el contenido con éxito y generar el Prueba1. archivo doc, pero cuando trato de abrirlo, me dará el siguiente error:

Word no pudo leer este documento. Puede que esté dañado. Pruebe una o varias de las siguientes: * Abrir y reparar el archivo. * Abra el archivo con el convertidor de recuperación de texto.  (C: \ Test1.doc)

Por favor, dime qué hacer, porque soy un principiante en el PDI y no he encontrado un buen tutorial para ello.

¿Fue útil?

Solución

Usted podría intentar OpenOffice API , pero que enviaban muchos recursos por ahí que le diga cómo usarlo.

Otros consejos

En primer lugar se debe cerrar el documento.

Además de eso, lo que yo sugiero hacer es volver a guardar el documento de Word original como un documento XML Word, a continuación, cambiar la extensión manualmente desde .XML a .doc. Luego, busquen en el XML del documento real que se está trabajando y rastrear el contenido para asegurarse de que no se está editando accidentales de los valores hexadecimales (AAA y AEE podrían ser valores hexadecimales en otros campos).

Sin ver el documento de Word real es difícil de decir lo que está pasando.

No existe mucha documentación acerca de puntos de interés en todos, especialmente para documento de Word por desgracia.

No sé: es su visto bueno a responder a mí mismo, pero sólo para compartir el conocimiento, voy a responder a mí mismo

.

Después de navegar por la web, la solución final que he encontrado es: La Biblioteca llamado docx4j es muy bueno para tratar con archivos de MS docx , aunque su documentación no es suficiente hasta ahora y su foro se encuentra todavía en un pasos iniciales, pero en general me ayude a hacer lo que necesito ..

Gracias 4 todos los que me ayude ..

También puede probar esto: http://www.dancrintea.ro/doc -to-pdf /

Parece que este podría ser el problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top