2015-04-07 2 views
11

का उपयोग करते हुए आउटपुट डॉक्स में असीमित बोगस पेज तो ... मूल रूप से मेरे पास एक डॉक्क्स फ़ाइल है। और मुझे कुछ पैराग्राफ में कुछ स्वरूपण परिवर्तन करना है और फिर एक नई फ़ाइल में सहेजना है। मैं जो कर रहा हूं वह अनिवार्य रूप से अनुसरण कर रहा है।अपाचे पोई

import scala.collection.JavaConversions._ 
import org.apache.poi.xwpf.usermodel._ 

def format(sourceDocumentPath: String, outputDocumentPath: String) { 

    val sourceXWPFDocument = new XWPFDocument(new FileInputStream(sourcePath)) 

    // lets say I have a list of paragraph numbers... I want to format 
    val parasToFormat = List(2, 10, 15, 20) 

    val allParagraphs = sourceXWPFDocument.getParagraphs 

    for ((paragraph, index) <- allParagraphs.zipWithIndex) { 
    if(parasToFormat.contains(index)) { 
     formatParagraph(paragraph) 
    } 
    } 

    val outputDocx = new FileOutputStream(new File(outputDocumentPath)); 
    xwpfDocument.write(outputDocx) 
    outputDocx.close() 

} 

def formatParagraph(paragraph: XWPFParagraph): Unit = { 
    // Do some color changing to few runs 
    // Add few runs with new text. 
} 

अधिकांश भाग के लिए सब कुछ ठीक काम कर रहा है। आउटपुट डॉक्क्स मेरे उबंटू पर लिबर ऑफिस में ठीक से खुल रहा है।

लेकिन, जब मैं इस आउटपुट डॉक्स को विंडोज सिस्टम में स्थानांतरित करता हूं, और एमएस वर्ड में इस आउटपुट डॉक्स को खोलने का प्रयास करता हूं, तो मुझे अनंत (कभी बढ़ रहा है) कचरा पृष्ठ मिल रहा है।

बुद्धिमान व्यक्तियों के किसी भी अनुमान का स्वागत है।

इसके अलावा ... मेरे अनुमानों में से एक है - फाइलों में लाइन अंत हो सकता है एमएस वर्ड भ्रमित कर रहे हैं। चूंकि उबंटू का उपयोग करता है (एलएफ - \n) लाइन एंडिंग जबकि विंडोज का उपयोग करता है (सीआरएलएफ - \r\n)। यदि यह वास्तव में मुद्दा है ... तो मैं इसे कैसे ठीक करूं?

हालांकि ... मेरा कोड स्कैला में है ... मुझे लगता है कि इसी तरह जावा कोड पर भी लागू होना चाहिए ... और अधिकांश पोई उपयोगकर्ता जावा समुदाय में होंगे ... इसलिए मैं जावा टैग भी जोड़ रहा हूं।

+0

कोई भी अनुमान लगा रहा है ... ?? –

+0

क्या आपने विंडोज संस्करण में लाइन एंडिंग को बदलने की कोशिश की है? यह या तो आपके संदेह की पुष्टि या इनकार करेगा कि रेखा समाप्ति समस्या है। इस तरह लोगों को या तो पुष्टि के द्वारा सही रास्ते की ओर इशारा किया जा सकता है, या किसी गलत रास्ते पर जाने का समय बर्बाद नहीं कर सकता है, अगर समस्या कुछ और है। –

+0

अच्छा ... हालांकि हम जानते हैं कि 'docx' फ़ाइलें व्यावहारिक रूप से ज़िप फ़ाइलें हैं जिनमें विभिन्न' xml' है। अब ... हालांकि मैं इसे सभी एक्सएमएल फाइलों में बदल सकता हूं। मुझे वास्तव में यकीन नहीं है कि इन संशोधित 'xml' में से 'docx' फ़ाइल को सही तरीके से कैसे बनाया जाए। जिसका अर्थ है ... जब हम fileoutputstream पर लिख रहे हैं तो हमें किसी भी तरह लाइन अंतराल को मजबूर करने की आवश्यकता है। –

उत्तर

3

अच्छा ... इसलिए मैंने विभिन्न चीजों की कोशिश की और आखिरकार इस मुद्दे को हल किया।

असल समस्या बहुत ही सरल बात की वजह से हुआ जा रहा था,

def copyRunFontSizeAttribute(sourceRun: XWPFRun, targetRun: XWPFRun): Unit = { 
    targetRun.setFontSize(sourceRun.getFontSize) 
} 

किसी तरह, एक उदाहरण XWPFRun का फ़ॉन्ट आकार की स्थापना, की सुविधा देता है xWPFRunSource.getFontSize की वापसी मूल्य (जहां xWPFRunSource का एक और उदाहरण है xWPFRunTarget कहना XWPFRun) कुछ बहुत अजीब और अप्रत्याशित परिणाम का कारण बनता है।

तो ... इस पल के लिए मैंने उन सभी बिट्स को हटा दिया जहां मैं यह copyRunFontSizeAttribute कर रहा था जिसने इस मुद्दे को हल किया।