Domanda

Sto cercando di aprire MS Word 2003 documento in java, la ricerca di una stringa specificata e sostituirlo con una nuova stringa. Io uso APACHE POI per farlo. Il mio codice è come la seguente:

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);
        }
}

Io chiamo questa funzione con i seguenti argomenti:

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

Quando il file Test.doc contiene una semplice linea come questa: " AAA EEE ", funziona con successo, ma quando io uso un file complicata si leggerà il contenuto con successo e generare il Test1. file doc ma quando provo ad aprirlo, ma mi darà il seguente errore:

Parola in grado di leggere questo documento. Potrebbe essere danneggiato. Provare una o più delle seguenti operazioni: * Apri e ripristina il file. * Aprire il file con convertitore di ripristino di testo.  (C: \ Test1.doc)

Ti prego, dimmi che cosa fare, perché io sono un principiante in PDI e non ho trovato un buon tutorial per esso.

È stato utile?

Soluzione

Si potrebbe provare a OpenOffice API , ma vi arent molte risorse là fuori per dirvi come usarlo.

Altri suggerimenti

Prima di tutto si dovrebbe essere la chiusura del documento.

Oltre a questo, quello che suggerisco di fare è salvare di nuovo il documento Word originale come un documento XML di Word, quindi cambiando l'estensione manualmente da .XML al doc. Poi guardate l'XML del documento attuale si sta lavorando con e tracciare il contenuto per assicurarsi che non si è accidentalmente modifica dei valori esadecimali (AAA e EEE potrebbero essere valori esadecimali in altri campi).

Senza vedere il documento di Word attuale è difficile dire che cosa sta succedendo.

Non c'è molto documentazione su POI a tutti, in particolare per il documento Word purtroppo.

Non lo so: è il suo OK per rispondere a me stesso, ma solo per condividere la conoscenza, risponderò io

.

Dopo la navigazione sul web, la soluzione finale che ho trovato è: La Biblioteca chiamato docx4j è molto buono per fare con file di MS docx , anche se la sua documentazione non è sufficiente fino ad ora e il suo forum è ancora in una fasi iniziando, ma nel complesso mi aiuta a fare quello che devo ..

Grazie 4 tutti coloro che mi aiutano ..

Si può anche provare questo: http://www.dancrintea.ro/doc -to-pdf /

questo potrebbe essere il problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top