我正在使用POI
来阅读.doc
个文件,我想选择一些内容来构建新的.doc
文件。具体来说,是否可以将“范围”中“段落”的内容写入新文件?谢谢。
HWPFDocument doc = new HWPFDocument(fs);
Range range = doc.getRange();
for (int i = 0; i < range.numParagraphs(); i++) {
//here I wish to write the content in a Paragraph
//into a new .doc file "doc1""doc2"
//instead of doc.write(pathName) that only write one .doc file.
}
答案 0 :(得分:1)
所以这是适用于当前任务的代码。选择段落的标准非常简单:段落11..20转到文件“us.docx”,而21..30转到“japan.docx”。
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Paragraph;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
public class SplitDocs {
public static void main(String[] args) {
FileInputStream in = null;
HWPFDocument doc = null;
XWPFDocument us = null;
XWPFDocument japan = null;
FileOutputStream outUs = null;
FileOutputStream outJapan = null;
try {
in = new FileInputStream("wto.doc");
doc = new HWPFDocument(in);
us = new XWPFDocument();
japan = new XWPFDocument();
Range range = doc.getRange();
for (int parIndex = 0; parIndex < range.numParagraphs(); parIndex++) {
Paragraph paragraph = range.getParagraph(parIndex);
String text = paragraph.text();
System.out.println("***Paragraph" + parIndex + ": " + text);
if ( (parIndex >= 11) && (parIndex <= 20) ) {
createParagraphInAnotherDocument(us, text);
} else if ( (parIndex >= 21) && (parIndex <= 30) ) {
createParagraphInAnotherDocument(japan, text);
}
}
outUs = new FileOutputStream("us.docx");
outJapan = new FileOutputStream("japan.docx");
us.write(outUs);
japan.write(outJapan);
in.close();
outUs.close();
outJapan.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private static void createParagraphInAnotherDocument(XWPFDocument document, String text) { XWPFParagraph newPar = document.createParagraph();
newPar.createRun().setText(text, 0);
}
}
我使用.docx作为输出,因为它更容易将新段落添加到.docx而不是.doc文件。用于将新insertAfter(ParagraphProperties props, int styleIndex)
插入给定Paragraph
的方法range
现已弃用(我使用POI版本3.10),我找不到一种简单而合理的方法来创建新的XWPFParagraph newPar = document.createParagraph();
空的.doc文件中的段落对象。虽然很高兴使用简单明了的{{1}}。
但是,此代码使用.doc作为输入,如您的任务所需。希望这会有所帮助:)
P.S。这里我们使用一个简单的选择标准,使用段落索引。如果您需要类似字体标准的内容,正如您所说,您可能会发布另一个问题,或者您可能会自己找到解决方案。无论如何,使用docx事情会变得更容易。
答案 1 :(得分:0)
这与我的情况相同,请查看Apache POI - Split Word document (docx) to pages以获得解决方案。 需要注意的是,虽然这个解决方案比上面提供的解决方案更好,因为它生成格式化页面,但在处理表格和图像方面却不尽如人意。