人类“碘”史

By admin in bet体育在线网址手机版 on 2018年12月18日

和平:武当派学渣

前言(背景介绍):
Apache
POI是Apache基金会下一个开源之序列,用来处理office体系的文档,可以创建和分析word、excel、ppt格式的文档。

碘发现前的史

碘的原子量是126.9,作为一如既往种植卤族元素广分布为地壳表层。在冰河时代,在冰川、洪水以及渗透成效等自力量综合的漫长熏陶下,碘出现了各类地理分布,首要分布为沿海地段的地壳,海带等洋产品为成碘的不过普遍来源。

大脖子病人

葛洪

在碘元素发现原先,世界上分外早记载用含碘物质治疗甲状腺肿的凡神州。早在公元前3600,中国的教育学作品就记录了受多少脖子病人(甲状腺肿大)服用海带和烧焦的海绵能压缩甲状腺肿的体积。北魏之葛洪于【肘后备急方】中记载“海藻酒方”治疗“瘿病”,“瘿病”就是众人不乏先例所说之粗脖子病,文学及称作弥漫性甲状腺肿。在之后五只世纪里,包括希波克拉底、盖伦、罗吉尔(Roger)、维拉(维拉)诺瓦的阿诺德(Arnold)等历史及闻明的教育学家,都曾经记录了这看似基于含碘海出品可以治甲状腺肿的病例。

中原北齐的文学家刘元卿,在那【贤奕编】收录了一个关于”大脖子病“的寓言故事:
南岐(qí)座获于海南、浙江邻近之沟谷中。这里的居住者老少跟山旁人接触。南岐之水大甜美,但是并无好。常年饮用那种水就是会面得非凡脖子病。南岐之居住者无一个脖子不甚的。有同样上,从山旗了一个丁,这便轰动了南岐。居民等扶老携幼都来围观。他们拘禁正在看正在,就本着外地人的领议论起来了:

“唉他大婶,你看那个人的颈部。”
“他二妹,真怪呀,他的颈部怎么那么细那么长,难看这些了!”
“干干巴巴的,他的脖子准是得矣呀病。”
“这么细之领,走至街道上,该多委丑!怎么也未用块围巾裹起来呢?”
异乡人听了,就乐着说:“你们的脖子才生病呢,这被大脖子病!你们来身患不治,反而来嘲谑我之脖子,岂不笑煞人了!”南岐丁说:“大家全村人都是那般的颈部,肥肥胖胖的,多美观啊!你掏腰包请大家治疗,大家还未干呐!”

大脖子的故事

其间针对word文档的拍卖暴发少个技巧,分别是HWPF(.doc)和XWPF(.docx)。即便你针对及时点儿只技巧熟知的话,就相应能了解使用java解析word文档的苦难所在。

碘的觉察

及科学史上诸多重要发现同样,碘的觉察充满了奇怪。

碘是法兰西化学家巴纳德(Barnard)库尔图瓦(伯纳德(Bernard)(Bernard)Courtois)在1811年发觉的,当时库尔图瓦统计从海藻的渣里提取钠和钾的化合物,提取这么些化合物的初衷是寻找创立炸药的原料,他充分硫酸(H
2 SO
4)以越来越处理样品过程遭到未小心上加了过多之硫酸,竟然出现了红色的烟雾。烟雾冷凝在屋子的金属物体及,变成了固体碘。前几天,碘重如若为碘酸钠的储(拿到的NaIO碘3)和高碘酸钠(NaIO
4) 的法存在。

及时桩事有所讽刺的地方是,库尔图瓦开是试验的初衷不是以摸索治病救人的灵丹妙药妙药,而是于补助拿破仑解决炸药原材料不足之题材:做炸药需要硝酸钾,而昔之主意中钾是源于木灰中领到的碳酸钾,但这木头缺乏,法兰西Norman底和布列塔尼(Brittany)海岸富含海藻,于是库尔图瓦品味从海藻灰里面提取碳酸钾,于是就发了端这无异于幕。

用作地理学家的库尔图瓦发现及好也许发现了一个初的质。他开展了同样多样试验,发现这种新的物质以及磷、氢和片五金构成可以,但非容易与氧气或碳反应。另外他还发现,当这种新物质以及氨混合、点火时不讲。但是不幸之是,在拿破仑一世的高卢鸡正处在战争被,军队财政紧张,根本未容许库尔图瓦举办再长远的试验来鉴别这新物质。他只能求助此外一个法兰西科学家德Saul姆(Desormes),德Saul姆在外女婿克莱门特(Clement)的扶持下,对这种肉色素举办了入木三分之钻研。“库哥”觉得这尚不够,他管他得的样品还依托于了任何两单名牌的法兰西共和国数学家盖吕萨克(Gay-Lussac)和安德雷安培(安德烈Ampere)。于是得到样品的有限联手人在会或杂志及个别发布了她们之觉察,当时怀疑就是千篇一律栽新物质或是某种氧化产物。最后确定这是新物质并叫她定名的桂冠落到了U.K.科学家Humphry戴维(David)爵士(Sir
汉弗莱(Humphry)(Humphry)Davy)头上,安培寄了片样品被David,大卫(David)于1813年110月10日发表,一种叫做碘(Iodine来源于韩语,黑色的意思)的初物质发现了,它的特点与氯接近。

为吕萨克

HumphryDavid爵士

其间有数独最好充裕之问题在:

碘应用于农学

每当起海藻中窥见碘的8年后, 瑞士联邦医务人员康德特(J.F.
Coindet)发现用烧了之德海绵和藻类能医治甲状腺肿,从而猜想海藻中之碘可能是
活性成分。 1819年,他配制酊剂 的碘以250mg
/天的剂量,在150个甲状腺肿的病人吃举办考试并获取了 成功:甲状腺肿
一周里就显明缩短。 并受1820年登出了外的结果。

1850年,法兰西地理学家查亭(Chatin)探究了甲状腺肿的兴和同碘在泥土、水、食品之中的浓度关系。他还研讨了补碘对甲状腺肿流行性的熏陶。
他观看到:1)甲状腺肿和克汀病(产妇摄入碘不足造成新生儿先天性甲状腺机能不足)在蕴藏碘的地点深少见;2)但以碘不足的地方却甚常见;3)补充碘能预防甲状腺肿。

查亭

1891交1892年里面,不列颠农学杂志(BMJ)发布了一样文山会海随笔,报道甲状腺提取物用于医疗甲状腺腺功用减退症。
1895年,Bauman在甲状腺中检测到高浓度碘的存在,并指出甲状腺提取物能治疗甲减正是以里含碘。人类历史第一浅找到同样种植素可以以如此“因同果”的计治疗某种病,碘的企图为人们疯狂的夸张,在跟着的非凡多年里,“碘”成了万众眼中的神药,几乎给用来临床及各样一样种疾病:瘫痪、腹泻、淋巴结核、泪管瘘、脊柱变形、念珠菌病…….以至于后来盖发现维他命c
而收获Noble(Bell)奖的匈牙利白衣战士圣捷尔吉回想自己青春时候召开医师的经历说:

If ye don’t know where, what, and why
Prescribe K and I. (假使您一头雾水,这便开钾和碘的处方吧?)

此地的K和I就是钾及碘。1851年登记在册的含碘制剂有10种,到了1956年化了1700栽。
1940年,Radish和Perloff在内分泌杂志上揭橥了“甲亢的医医疗”,在当下,单独服用碘和X射线已经变为最为健康的甲亢治疗方法。

对“碘”的神奇性最有力之公然质疑来自20世纪初,瑞士联邦性病科医务人员考克尔(Theodor
Kocher),值得一提的是考克尔因为对此甲状腺切除手术的立异而取了1909年初诺贝尔(Noble)(Bell)文学奖,这是史上第一软为是唯一的相同浅诺贝尔(Noble)(Bell)奖颁发给甲状腺领域。在外得奖后的第二年,考克尔公开报道外拍摄入碘之后身体来严重的甲亢,他更反对将碘制剂用于另外形式的甲亢治疗。因为Noble(Bell)为考克尔带来的丕名声,他本着碘治疗的“恐惧症”可能正当其时。很多甲状腺医务人员一样卷蜂的丢弃了拿碘剂用于突眼甲状腺肿大之治病措施。因为考克尔的影响,临床医务人员分成了2派:“碘派”,主张选择碘剂治疗甲亢,除非效果不完美的气象才使X线照射或者手术;“手术派”,不提出用碘剂,而是推荐手术作为甲亢的绝无仅有治疗模式。影响不光局限为亚洲,也关乎到了美利坚合众国,即使就生多治病证据单独的碘治疗对甲亢的管用,“手术是甲亢的最紧要看方法”那样的意见也于美利哥高速扩散起来。

考克尔

率先凡是就有限独八九不离十并无统一之父类和接口(隔壁的XSSF和HSSF投过来鄙视的见解),所以不得已展开同一格式的接口式编程;

马林试验以及碘化食盐预防碘紧缺的履

以发现碘的100年内,碘在医疗及之运多都是按照经验和试错举办的,碘作为人体必须微量元素的概念还浑然无建起来。1911年,法兰西生科学家伯特(Bert)兰(加布里埃尔(Gabriel)Bertrand)第一坏提议人身微量元素的定义,并认为身体微量元素是人生长等为主生理过程所须的。他最早在植物中发现了氧化酶,同时发现金属锰对于氧化酶的法力是少不了的。基于Bert兰的微量元素理论,美利坚联邦合众国病经济学家大卫马林(大卫Marine)举办了恐是史上第一赖、也说不定是终极一潮因为微量元素也研讨对象的广人体试验,该试验以弗吉尼亚州底在校女子受到(10~18年度)举行,时间跨度达5年。试验目标要没有甲状腺肿大的症状,分为对照组(2305人数,不补碘),实验组(2190人口,补充4g/年之碘盐,这么些剂量分外给前天引进剂量的60倍增!)。经过2年半的观看,495单对照组女孩出现了甲状腺肿大(22%),不过单独生5独补碘组女孩发出症状(0.2%),此外还有0.5%之女孩出现了碘中毒的症状。那些考试的要在明日看来咋样高估计都非呢过,它首先不善显示了扳平栽微量元素对人体之生理是要的。

伯特兰

据悉马林的尝试,食盐补碘被工学界和公众普遍接受,瑞士联邦同美利坚合众国大凡社会风气上顶早推行食盐补碘的国度。对于美利坚同盟国的话,围绕五老大湖区、阿巴拉契亚深山与西北地区是“粗脖子病”的高发区,当地小孩子之发病率就高及26%~70%,所以就片地点也于叫做“粗脖子带”(goiter
belt)。40年代末,美利坚合众国甲状腺流行病委员会已提出了一个法案提议:强制在所有州行加碘食盐,但结尾那法案没可以经过。在州就顶尖,大多数州是执行加碘食盐的,从50年份到现行,美利坚合众国市场高达加碘食盐的比重平昔在70~76%。

碘除了是体内合成氨基酸的原料外,它吗是胎儿在子宫内的脑髓鞘形成与产后早期所不可不的。特别是在孕期和哺乳期够呛容易有缺碘。从官卫生角度,包括中国在内的多数国度缺碘导致的大规模甲状腺肿大盛就并无在,不过对孕期、哺乳期之补碘依旧是惨重的公共卫生问题。世界卫生协会推举在孕期和哺乳期每一日拍入碘250微克。美国甲状腺协会跟内分泌协会的指南也推荐孕期维他中当包含150微克的碘化钾/天。

中国立国后起初举行碘盐,制订了食盐碘含量之标准。并拓展了全国性碘营养监测和碘盐质地检测,并冲检测结果制定中国食用盐加碘的正儿八经。近期相同涂鸦全国检测是二〇〇五年,结果彰显多数省级行政区之平分尿碘值稍过世界卫生社团援引的适用水平,少数省份过量,有9只省份水平适当。当时涉企调研的师都看,应稍加增幅下调食用盐中的碘含量。同时专家为看未该于举国上下范围外执行同的加碘量,应该遵照每个省或所在地点的尿碘值具体调整,以避免暴发小位置超越,有些地区缺碘的意况。基于这些,国家展开了第三潮食用盐加碘量标准的调整:

  • 碘含量平均范围:20mg/kg~30mg/kg
  • 每个看因地点境况于上述限选定一个值,然后以该值的功底及同意上下变动30%

其次凡官API中连从未文档中图纸相对地方的接口,这虽导致了尽管你能够拿到文档中之所有图片,不过若连无可知精晓那一个图是以乌,以后若显示图片就无可奈何插入到正确的地点。

国内外指南对碘摄入剂量的推介

世界卫生协会(WHO)、国际决定碘紧缺症理事会(ICCIDD)和联合国孩童基金会(UNICEF)的同步报告对每一日推荐碘充分摄入量(RDA,AI,即下限)如下:

  • 成人:150μg
  • 身怀六甲及哺乳期女性:250μg
  • 未成年人:按年龄酌情递减

一般认为正常人对碘的忍受程度很高,各公司、国家针对人类的每一天最要命安全碘摄入量上限(UL)有异规定:

  • 欧盟:法定:600μg
  • 美国:法定:1100μg
  • 中国腹地:学者共识:700μg~800μg

参考文献
Guy E. Abraham, MD,“The History of Iodine in Medicine“ The Original
Internist, 2006
Angela M. Leung, “History of U.S. Iodine Fortification and
Supplementation”Nutrients 2012, 4, 1740-1746
“The History of Iodine”.
http://www.mnwelldir.org/

对此第一接触,我是没什么办法,能够讨论下其余连锁技能,比如jacob,doc4j等看望暴发没来其他的化解方案,但是doc4j这货一般只好处理2007文档(.docx)。

于第二碰,本文将为闹作者之缓解方案,实际上,那吗是自己形容本文的目的所在。

 

小心:简单求快的同室圈第二章与老三章就行了;

相同、预备知识

1.word文档的个别栽格式对承诺少于种植不同之贮存方

不问可知,word文档有有限栽存储格式:doc和docx

doc:习惯及称Word2003,使用亚迈入制储存多少;这一个不是大家前几天议论的重点.

docx:word2007,使用xml来存储数据和格式.

或是你谋面咨询了,明明是docx结尾的文档,怎么成了xml格式了?

良简短:你无选一个docx文件,右键使用压缩工具打开,就可知取一个这样的目结构:

 

 图片 1

之所以若当docx是一个完完全全的文档,其实它仅仅是一个压缩文件。(docx:?_?)

 

2.Word文档中xml的定义格式:

自打眼前咱们解了docx文档使用压缩文件也不怕是xml来叙述数据,那么word文档中之多少具体是怎么定义之也罢?

由篇幅的干,那里不会见详细地描述整个压缩的文档,这里只简单介绍下零星个文本/文件夹:

相同凡是word目录下的documen.xml文件,那么些就是是全方位文档内容之概念;

次凡word目录下之media文件夹,看名字啊会估摸出来是文件夹里面凡是文档中的多媒体内容:

图片 2图片 3

                                       
   
图3:word/document.xml(定义文档内容)                                     图4:word/media文件夹下的情

 

以下是document.xml文档的一些关键内容:

A:document全部结构定义:

图片 4图片 5

<w:document mc:ignorable="w14 w15 wp14" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" xmlns:wpscustomdata="http://www.wps.cn/officeDocument/2013/wpsCustomData">
    <w:body>
        <w:p>
            <w:ppr>
                <w:pstyle w:val="2">
                </w:pstyle>
                <w:keepnext w:val="0">
                </w:keepnext>
                <w:keeplines w:val="0">
                </w:keeplines>
                <w:widowcontrol>
                </w:widowcontrol>
                <w:suppresslinenumbers w:val="0">
                </w:suppresslinenumbers>
                <w:pbdr>
                    <w:top w:color="auto" w:space="0" w:sz="0" w:val="none">
                    </w:top>
                    <w:left w:color="auto" w:space="0" w:sz="0" w:val="none">
                    </w:left>
                    <w:bottom w:color="auto" w:space="0" w:sz="0" w:val="none">
                    </w:bottom>
                    <w:right w:color="auto" w:space="0" w:sz="0" w:val="none">
                    </w:right>
                </w:pbdr>

View Code

 

B:文档段落内容:

图片 6图片 7

<w:p>
            <w:ppr>
                <w:pstyle w:val="2">
                </w:pstyle>
                <w:keepnext w:val="0">
                </w:keepnext>
                <w:keeplines w:val="0">
                </w:keeplines>
                <w:widowcontrol>
                </w:widowcontrol>
                <w:suppresslinenumbers w:val="0">
                </w:suppresslinenumbers>
                <w:pbdr>
                    <w:top w:color="auto" w:space="0" w:sz="0" w:val="none">
                    </w:top>
                    <w:left w:color="auto" w:space="0" w:sz="0" w:val="none">
                    </w:left>
                    <w:bottom w:color="auto" w:space="0" w:sz="0" w:val="none">
                    </w:bottom>
                    <w:right w:color="auto" w:space="0" w:sz="0" w:val="none">
                    </w:right>
                </w:pbdr>
                <w:shd w:fill="FAFAFA" w:val="clear">
                </w:shd>
                <w:spacing w:after="150" w:afterautospacing="0" w:before="150" w:beforeautospacing="0" w:line="378" w:linerule="atLeast">
                </w:spacing>
                <w:ind w:firstline="0" w:left="0" w:right="0">
                </w:ind>
                <w:rpr>
                    <w:rfonts w:ascii="Verdana" w:cs="Verdana" w:hansi="Verdana" w:hint="default">
                    </w:rfonts>
                    <w:i w:val="0">
                    </w:i>
                    <w:caps w:val="0">
                    </w:caps>
                    <w:color w:val="404040">
                    </w:color>
                    <w:spacing w:val="0">
                    </w:spacing>
                    <w:sz w:val="21">
                    </w:sz>
                    <w:szcs w:val="21">
                    </w:szcs>
                </w:rpr>
            </w:ppr>
            <w:r>
                <w:rpr>
                    <w:rfonts w:ascii="Verdana" w:cs="Verdana" w:hansi="Verdana" w:hint="default">
                    </w:rfonts>
                    <w:i w:val="0">
                    </w:i>
                    <w:caps w:val="0">
                    </w:caps>
                    <w:color w:val="404040">
                    </w:color>
                    <w:spacing w:val="0">
                    </w:spacing>
                    <w:sz w:val="21">
                    </w:sz>
                    <w:szcs w:val="21">
                    </w:szcs>
                    <w:bdr w:color="auto" w:space="0" w:sz="0" w:val="none">
                    </w:bdr>
                    <w:shd w:fill="FAFAFA" w:val="clear">
                    </w:shd>
                </w:rpr>
                <w:t>
                    作者: Brian Dear
                </w:t>
            </w:r>
        </w:p>

View Code

 

C:图片内容定义:

图片 8图片 9

<w:r>
                <w:rpr>
                    <w:rfonts w:ascii="Verdana" w:cs="Verdana" w:hansi="Verdana" w:hint="default">
                    </w:rfonts>
                    <w:i w:val="0">
                    </w:i>
                    <w:caps w:val="0">
                    </w:caps>
                    <w:color w:val="404040">
                    </w:color>
                    <w:spacing w:val="0">
                    </w:spacing>
                    <w:sz w:val="21">
                    </w:sz>
                    <w:szcs w:val="21">
                    </w:szcs>
                    <w:bdr w:color="auto" w:space="0" w:sz="0" w:val="none">
                    </w:bdr>
                    <w:shd w:fill="FAFAFA" w:val="clear">
                    </w:shd>
                </w:rpr>
                <w:drawing>
                    <wp:inline distb="0" distl="114300" distr="114300" distt="0">
                        <wp:extent cx="5543550" cy="5543550">
                        </wp:extent>
                        <wp:effectextent b="0" l="0" r="0" t="0">
                        </wp:effectextent>
                        <wp:docpr descr="IMG_256" id="1" name="Picture 1">
                        </wp:docpr>
                        <wp:cnvgraphicframepr>
                            <a:graphicframelocks nochangeaspect="1" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
                            </a:graphicframelocks>
                        </wp:cnvgraphicframepr>
                        <a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
                            <a:graphicdata uri="http://schemas.openxmlformats.org/drawingml/2006/picture">
                                <pic:pic xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture">
                                    <pic:nvpicpr>
                                        <pic:cnvpr descr="IMG_256" id="1" name="Picture 1">
                                        </pic:cnvpr>
                                        <pic:cnvpicpr>
                                            <a:piclocks nochangeaspect="1">
                                            </a:piclocks>
                                        </pic:cnvpicpr>
                                    </pic:nvpicpr>
                                    <pic:blipfill>
                                        <a:blip r:embed="rId4">
                                        </a:blip>
                                        <a:stretch>
                                            <a:fillrect>
                                            </a:fillrect>
                                        </a:stretch>
                                    </pic:blipfill>
                                    <pic:sppr>
                                        <a:xfrm>
                                            <a:off x="0" y="0">
                                            </a:off>
                                            <a:ext cx="5543550" cy="5543550">
                                            </a:ext>
                                        </a:xfrm>
                                        <a:prstgeom prst="rect">
                                            <a:avlst>
                                            </a:avlst>
                                        </a:prstgeom>
                                        <a:nofill>
                                        </a:nofill>
                                        <a:ln w="9525">
                                            <a:nofill>
                                            </a:nofill>
                                        </a:ln>
                                    </pic:sppr>
                                </pic:pic>
                            </a:graphicdata>
                        </a:graphic>
                    </wp:inline>
                </w:drawing>
            </w:r>

View Code

 

 

起趣味之童鞋可以看一下边三截xml代码,我此一直为结论了:

  word文档shema文件:xmlns:w=”http://schemas.openxmlformats.org/wordprocessingml/2006/main

     
 文档根节点:<w:document> 定义了整个文档的初叶

         <w:body>是document的子节点,文档的基本点内容

          <w:p>body子节点,一个段,就是word文档中的段落

            <w:r>P元素的子节点,一个Run定义了段中享有同等格式的平等段子内容

              <w:t>Run元素节点的子节点,就是文档的内容.

              <w:drawing> run元素的子节点,定义了同等摆图:

                <w:inline> drawing子节点,具体行使也没浓密商讨

                <a:graphic> 定义图片内容

                  <pic:blipfill>这一个是graphic文档的子节点,定义了图内容之目,具体来说,poi能由此称谓将到图片所对应之资源,而得文档图片地方的要也固然在此地

图片 10

 

整看来:XWPF解析docx文档就是举办了xml文档的辨析,将拥有的节点保存下去,然后换成为更加好用的属性,提供API出来供用户使用.

从而大家尽管可知因而POI提供给大家的接口拿到文档内容,自己去分析文档中的多寡,就会获拿到图片是以啊一个截里了,当然你呢得以摸清图片是坐落哪一个Run元素的后边.

 

二、实现

package com.szdfhx.reportStatistic.util;
import com.microsoft.schemas.vml.CTShape;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFPictureData;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.xmlbeans.XmlCursor;
import org.apache.xmlbeans.XmlObject;
import org.openxmlformats.schemas.drawingml.x2006.main.CTGraphicalObject;
import org.openxmlformats.schemas.drawingml.x2006.picture.CTPicture;
import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTInline;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDrawing;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTObject;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class XWPFUtils {

    //获取某一个段落中的所有图片索引
    public static List<String> readImageInParagraph(XWPFParagraph paragraph) {
        //图片索引List
        List<String> imageBundleList = new ArrayList<String>();

        //段落中所有XWPFRun
        List<XWPFRun> runList = paragraph.getRuns();
        for (XWPFRun run : runList) {
            //XWPFRun是POI对xml元素解析后生成的自己的属性,无法通过xml解析,需要先转化成CTR
            CTR ctr = run.getCTR();

            //对子元素进行遍历
            XmlCursor c = ctr.newCursor();
            //这个就是拿到所有的子元素:
            c.selectPath("./*");
            while (c.toNextSelection()) {
                XmlObject o = c.getObject();
                //如果子元素是<w:drawing>这样的形式,使用CTDrawing保存图片
                if (o instanceof CTDrawing) {
                    CTDrawing drawing = (CTDrawing) o;
                    CTInline[] ctInlines = drawing.getInlineArray();
                    for (CTInline ctInline : ctInlines) {
                        CTGraphicalObject graphic = ctInline.getGraphic();
                        //
                        XmlCursor cursor = graphic.getGraphicData().newCursor();
                        cursor.selectPath("./*");
                        while (cursor.toNextSelection()) {
                            XmlObject xmlObject = cursor.getObject();
                // 如果子元素是<pic:pic>这样的形式
                            if (xmlObject instanceof CTPicture) {
                                org.openxmlformats.schemas.drawingml.x2006.picture.CTPicture picture = (org.openxmlformats.schemas.drawingml.x2006.picture.CTPicture) xmlObject;
                                //拿到元素的属性
                                imageBundleList.add(picture.getBlipFill().getBlip().getEmbed());
                            }
                        }
                    }
                }
                //使用CTObject保存图片
          //<w:object>形式
                if (o instanceof CTObject) {
                    CTObject object = (CTObject) o;
                    System.out.println(object);
                    XmlCursor w = object.newCursor();
                    w.selectPath("./*");
                    while (w.toNextSelection()) {
                        XmlObject xmlObject = w.getObject();
                        if (xmlObject instanceof CTShape) {
                            CTShape shape = (CTShape) xmlObject;
                            imageBundleList.add(shape.getImagedataArray()[0].getId2());
                        }
                    }
                }
            }
        }
        return imageBundleList;
    }

}

 

首先要提取出来是XWPF对xml元素的包裹:

<w:document> 对应XWPFDocument类

<w:run>对应XWPFRun类

差不多就对诺到Run这同一重叠,因为run的子元素有为数不少,所以没有更于下的层次封装和定义了,

之所以大家采用API只好拿到具备的XWPFRun对象转成其的xml的概念:CTR对象。最后使CTR去读取和分析的Run元素中之情节,获取图片的目录。

 

帮忙假使谈的即使是任何XML元素的概念:

我们可以看出POI使用的凡Apache下的xmlbeans这么些技术分析的XML,相关的技巧不开深谈,关键要了解两接触:

1:xml文档中之享有因素经过xmlbean是包后还连续了一个XMLObject的接口,所以可以就此这看似来收获取到的子元素;

2:元素遍历是经XmlCursor来做的,具体获取子元素是因XmlCursor对象的selectPath属性来决定,当selectPath为”./*”时就定义也任何历子元素;

就此写成了如下的代码:能遍历当前因素的子元素,并且检验子元素的品种:

          

 CTR ctr = run.getCTR();

            //对子元素进行遍历
            XmlCursor c = ctr.newCursor();
            //这个就是拿到所有的子元素:
            c.selectPath("./*");
            while (c.toNextSelection()) {
                XmlObject o = c.getObject();
                //如果子元素是<w:drawing>这样的形式,使用CTDrawing保存图片
                if (o instanceof CTDrawing) {
                    CTDrawing drawing = (CTDrawing) o;

 

终极你可能汇合起疑难,不是说<w:drawing>那多少个元素定义了相同布置图为?

那么

if (o instanceof CTObject) {
CTObject object = (CTObject) o;
...
}

本条次独判断标准是为此来涉及嘛的?

精明能干之而应该已经猜到了

从未错!docx文档中的xml定义图片的道除了<w:drawing>这无异种之外,仍是可以够接纳<w:object>元素去定义,

怎只有及时点儿栽?

坐自己独自下第一栽办法分析,发现有点图片丢失了,于是发现了次种形式…….也许不止两栽?我耶不精通,反正对于眼前的本人的话就没问题了.

唯恐聪明之汝在实践中还赶上了双重强意况?

这就是说下地点提到的xml解析方法,相信你为可以正确读取,得到好想要之目值.

重复推广一点,假使POI还生另没提供的API,大家是未是吗克由此XML解析的技能和好实现吗?这多少个虽然用我们在实践中去研讨了,相信日子会见给大家答案

 

吓了,现在大家用到了搜寻引值,那么哪些去用到图片资源也?

POI提供了现的形式:

XWPFDocument类中有getPictureDataByID(String picture);艺术好得到XWPFPictrueDate对象,这多少个就是图表的资源了.

切切实实的操作可以参考相关的博文和API,这里就是未详细介绍了.

 

三、测试:

运Junit4测试的代码:

package com.szdfhx.reportStatistic.util;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFPictureData;
import org.junit.Test;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Collections;
import java.util.List;

import static org.junit.Assert.*;

public class XWPFUtilsTest {

    @Test
    public void readImageInParagraph() throws IOException {
        InputStream in = new FileInputStream("D:\\Document\\我的博客\\Java解析word,获取文档中图片位置\\示例.docx");
        XWPFDocument xwpfDocument = new XWPFDocument(in);
        List<XWPFParagraph> paragraphList = xwpfDocument.getParagraphs();
        System.out.println("图片的索引\t|图片名称\t|图片上一段文字的内容\t");
        System.out.pringln("------------------------------------------");
        for(int i = 0;i < paragraphList.size();i++){
            List<String> imageBundleList = XWPFUtils.readImageInParagraph(paragraphList.get(i));
            if(CollectionUtils.isNotEmpty(imageBundleList)){
                for(String pictureId:imageBundleList){
                    XWPFPictureData pictureData = xwpfDocument.getPictureDataByID(pictureId);
                    String imageName = pictureData.getFileName();
                    String lastParagraphText = paragraphList.get(i-1).getParagraphText();
                    System.out.println(pictureId +"\t|" + imageName + "\t|" + lastParagraphText);
                }
            }
        }
    }

}

 

 

展现结果:

图片 11

此间运用图片名称指代声明自身得到了相应的资源,实际上
假若您对前文的始末还熟稔的话,会发觉图片的称号实际上就是是word/media文件夹下的保有图片的真名称。

在相应的XWPFPictureData对象吃,图像的二进制数据可经getData()属性来将到,这样你就是好保存及数据库或者是您本地的文书夹着了!

 

四、其他:

言语到此地,先河提到的次只问题这里就都解决了。

那么,第一单问题怎么处置呢?

假定您的网对快要求未赛的话,那么自己于您的提出是,把doc文档转化成docx文档来分析–POI就发成熟的API来做

比方即使考虑性能的话,这即便只可以写少学方法去分析文档。

那……doc类型的word文档怎么抱图片的争持地点也?

自身啊未知道········或者,你来报我?

 


 

参考:

POI官网:https://poi.apache.org/

Apache POI Word – 快捷指南
https://www.w3cschool.cn/apache\_poi\_word/apache\_poi\_word\_quick\_guide.html

 

 

 

 

       

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2018 mobile.365-838.com 版权所有