Ser*_*o76 6 java android docx apache-poi kotlin
我正在为我的应用程序使用库 Apache-POI。具体来说,POIshadow-all (ver. 3.17) 用于阅读 Word 文档。我成功地提取了每个段落,如下所示:
我真正需要的是提取每一行,如下所示:
提取每个段落的代码是这样的:
try {
val fis = FileInputStream(path.path + "/" + document)
val xdoc = XWPFDocument(OPCPackage.open(fis))
val paragraphList: MutableList<XWPFParagraph> = xdoc.paragraphs
private val newParagraph = paragraph.createRun()
...
for (par in paragraphList) {
var currentParagraph = par.text
Log.i("TAG","current: $currentParagraph")
...
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,变量 currentParagraph 返回整个段落。但是,我需要一个名为 currentLine 的变量,它返回一行。
我在 stackoverflow 和其他网站上研究过这个问题。我找到了一些建议,但没有一个适合我。我还尝试通过 ctr 和使用 XWPFRun 获取日期,但没有成功。
对于如何进行的任何建议,我将不胜感激。
在此先感谢您的帮助。
小智 3
文档的元数据不存储给定段落中有多少行 ,因为它取决于您呈现或查看它的方式。想象一下 Word 文档,如果字体大小较大,则给定段落中的行数会较多;反之,如果字体大小较小,则段落中的行数会较少。因此,每个段落的行数是不一致的,即一个变量。
\n但是,如果您的应用程序中存在\xe2\x80\x99s硬性且快速的要求来进行估计,您可以编写一些逻辑,例如\xe2\x80\x9c在X(常量)个字符(四舍五入)之后开始一个新行到单词的末尾)\xe2\x80\x9d。这又可能会根据屏幕尺寸、字体大小、缩放级别等而改变。所以我的建议是在您的应用程序中制定一个场景,在该场景中您不明确测量给定段落中的行数,而是测量数字单词或字符,并在绝对必要时使用它作为插入换行符的衡量标准。
\n您可以使用的另一种可能的方法是使用转义字符分隔句子,例如\xe2\x80\x9c 在每个 \xe2\x80\x98?\xe2\x80\x99, \xe2\x80\x98!\xe2\ 之后开始一个新句子x80\x99 或 \xe2\x80\x98。\xe2\x80\x99 段落中的字符。\xe2\x80\x9d这也可能变得相当棘手,具体取决于某些句子的结构。
\n因此,你的问题的答案是,没有 \xe2\x80\x9cout of the box\xe2\x80\x9d 方法来使用 Apache POI 检测给定段落中的行数,你必须编写自己的逻辑如果绝对必要的话,可以在那里(也许使用上面概述的方法)。
\n| 归档时间: |
|
| 查看次数: |
399 次 |
| 最近记录: |