سؤال

أنا أحاول فتح MS Word 2003 الوثيقة في جافا, البحث عن سلسلة محددة واستبدالها مع سلسلة جديدة.يمكنني استخدام APACHE POI أن تفعل ذلك.قانون بلدي مثل التالي:

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

أنا استدعاء هذه الدالة مع الحجج التالية:

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

عندما Test.doc الملف يحتوي على خط بسيط مثل هذا :"AAA EEE"،فإنه يعمل بنجاح ولكن عند استخدام ملف معقد فإنه سيتم قراءة المحتوى بنجاح و توليد Test1.doc الملف ولكن عندما أحاول فتحه يعطيني الخطأ التالي:

كلمة غير قادر على قراءة هذه الوثيقة.قد تكون فاسدة.حاول إجراء واحد أو أكثر من الإجراءات التالية:* فتح و إصلاح الملف.* افتح الملف باستخدام محول "استرداد النص".(C: est1.doc)

من فضلك قل لي ما يجب القيام به لأن أنا مبتدئ في POI و لم أجد تعليمي جيد على ذلك.

هل كانت مفيدة؟

المحلول

قد تتمكن من محاولة أوبن أوفيس API, ولكن هناك تخلخل العديد من الموارد هناك أن أقول لك كيفية استخدامها.

نصائح أخرى

أولا وقبل كل شيء يجب أن يكون إغلاق المستند الخاص بك.

إلى جانب أن ما توحي به هو resaving الأصلي مستند Word Word مستند XML ، ثم تغيير امتداد يدويا من .XML .doc .ثم ننظر في XML الفعلية الوثيقة كنت تعمل مع وتتبع المحتوى للتأكد من أنك لا قصد تحرير القيم الست عشرية (AAA و EEE يمكن عرافة القيم في مجالات أخرى).

دون رؤية الفعلية مستند Word من الصعب القول ما الذي يجري.

ليس هناك الكثير من الوثائق حول POI على الإطلاق خصوصا مستند Word للأسف.

أنا لا أعرف :هو موافق للرد على نفسي ، ولكن فقط لتبادل المعرفة سوف أجيب على نفسي.

بعد التنقل في ويب, الحل النهائي وجدته هو :المكتبة يسمى docx4j هو جيد جدا في التعامل مع MS الملف docx, على الرغم من أن الوثائق ليست كافية حتى الآن و المنتدى لا يزال في بداية الخطوات ، ولكن عموما أنها تساعد لي أن أفعل ما أريد..

شكرا 4 كل من ساعدني..

يمكنك أيضا محاولة هذا واحد: http://www.dancrintea.ro/doc-to-pdf/

يبدو هذا يمكن أن يكون مشكلة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top