Apache poi xwpf word转PDF中文显示与页码问题解决

这篇具有很好参考价值的文章主要介绍了Apache poi xwpf word转PDF中文显示与页码问题解决。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

POM依赖

核心配置代码

PDF下载流问题

WPS模板问题


原问题解决方法:https://github.com/opensagres/xdocreport/issues/161

POM依赖

   <properties>
        <java.version>1.8</java.version>
        <poi.version>3.14</poi.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>${poi.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>${poi.version}</version>
        </dependency>
        <dependency>
            <groupId>fr.opensagres.xdocreport</groupId>
            <artifactId>fr.opensagres.poi.xwpf.converter.pdf-gae</artifactId>
            <version>2.0.1</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>fr.opensagres.xdocreport</groupId>
            <artifactId>fr.opensagres.xdocreport.document</artifactId>
            <version>2.0.1</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

请记住,word转换如果没问题,那么就要设置pdf的字体,这个是铁律!

核心配置代码

将PdfOptions提出来作为方法使用

 private PdfOptions getPdfOptions() {
        PdfOptions pdfOptions = PdfOptions.create();
        // 解决中文不显示问题
        pdfOptions.fontProvider(new IFontProvider() {
            @Override
            public Font getFont(String familyName, String encoding, float size, int style, Color color) {
                try {
                    File file = new File(pdfChineseTTF);
                    Preconditions.checkState(file.exists(), "中文字体文件不存在:" + pdfChineseTTF);
                    BaseFont bfChinese = BaseFont.createFont(pdfChineseTTF, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
                    Font fontChinese = new Font(bfChinese, size, style, color);
                    if (familyName != null) {
                        fontChinese.setFamily(familyName);
                    }
                    return fontChinese;
                } catch (Throwable e) {
                    e.printStackTrace();
                    // An error occurs, use the default font provider.
                    return ITextFontRegistry.getRegistry().getFont(familyName, encoding, size, style, color);
                }
            }
        });
        return pdfOptions;
    }

PDF下载流问题

注意前端PDF文件流空白问题参考以下方案进行处理

js下载PDF文件流,打开空白问题_使用jspdf导出服务器上pdf文件的时候文件里面没有内容_夏小锋的博客-CSDN博客

前端下载二进制流pdf文件,下载成功,打开空白问题解决_前端下载pdf文件流打开空白_Helen_fight的博客-CSDN博客

WPS模板问题

使用wps处理的template.docx文件不能识别到页脚信息,请使用微软提供的office进行编辑

以下是WPS footer xml部分,不是OOXML需要的解析范式:文章来源地址https://www.toymoban.com/news/detail-722549.html

<pkg:part pkg:name="/word/footer1.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml">
    <pkg:xmlData>
      <w:ftr xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" 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:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" xmlns:wpsCustomData="http://www.wps.cn/officeDocument/2013/wpsCustomData" mc:Ignorable="w14 w15 wp14">
        <w:p>
          <w:pPr>
            <w:pStyle w:val="2"/>
            <w:tabs>
              <w:tab w:val="right" w:pos="8426"/>
            </w:tabs>
            <w:jc w:val="right"/>
            <w:rPr>
              <w:rFonts w:hint="default" w:eastAsia="宋体"/>
              <w:lang w:val="en-US" w:eastAsia="zh-CN"/>
            </w:rPr>
          </w:pPr>
          <w:r>
            <w:rPr>
              <w:sz w:val="18"/>
            </w:rPr>
            <mc:AlternateContent>
              <mc:Choice Requires="wps">
                <w:drawing>
                  <wp:anchor distT="0" distB="0" distL="114300" distR="114300" simplePos="0" relativeHeight="251659264" behindDoc="0" locked="0" layoutInCell="1" allowOverlap="1">
                    <wp:simplePos x="0" y="0"/>
                    <wp:positionH relativeFrom="margin">
                      <wp:align>center</wp:align>
                    </wp:positionH>
                    <wp:positionV relativeFrom="paragraph">
                      <wp:posOffset>0</wp:posOffset>
                    </wp:positionV>
                    <wp:extent cx="1828800" cy="1828800"/>
                    <wp:effectExtent l="0" t="0" r="0" b="0"/>
                    <wp:wrapNone/>
                    <wp:docPr id="3" name="文本框 3"/>
                    <wp:cNvGraphicFramePr/>
                    <a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
                      <a:graphicData uri="http://schemas.microsoft.com/office/word/2010/wordprocessingShape">
                        <wps:wsp>
                          <wps:cNvSpPr txBox="1"/>
                          <wps:spPr>
                            <a:xfrm>
                              <a:off x="0" y="0"/>
                              <a:ext cx="1828800" cy="1828800"/>
                            </a:xfrm>
                            <a:prstGeom prst="rect">
                              <a:avLst/>
                            </a:prstGeom>
                            <a:noFill/>
                            <a:ln w="6350">
                              <a:noFill/>
                            </a:ln>
                          </wps:spPr>
                          <wps:style>
                            <a:lnRef idx="0">
                              <a:schemeClr val="accent1"/>
                            </a:lnRef>
                            <a:fillRef idx="0">
                              <a:schemeClr val="accent1"/>
                            </a:fillRef>
                            <a:effectRef idx="0">
                              <a:schemeClr val="accent1"/>
                            </a:effectRef>
                            <a:fontRef idx="minor">
                              <a:schemeClr val="dk1"/>
                            </a:fontRef>
                          </wps:style>
                          <wps:txbx>
                            <w:txbxContent>
                              <w:p>
                                <w:pPr>
                                  <w:pStyle w:val="2"/>
                                </w:pPr>
                                <w:r>
                                  <w:t xml:space="preserve">第 </w:t>
                                </w:r>
                                <w:r>
                                  <w:fldChar w:fldCharType="begin"/>
                                </w:r>
                                <w:r>
                                  <w:instrText xml:space="preserve"> PAGE  \* MERGEFORMAT </w:instrText>
                                </w:r>
                                <w:r>
                                  <w:fldChar w:fldCharType="separate"/>
                                </w:r>
                                <w:r>
                                  <w:t>1</w:t>
                                </w:r>
                                <w:r>
                                  <w:fldChar w:fldCharType="end"/>
                                </w:r>
                                <w:r>
                                  <w:t xml:space="preserve"> 页 共 </w:t>
                                </w:r>
                                <w:r>
                                  <w:fldChar w:fldCharType="begin"/>
                                </w:r>
                                <w:r>
                                  <w:instrText xml:space="preserve"> NUMPAGES  \* MERGEFORMAT </w:instrText>
                                </w:r>
                                <w:r>
                                  <w:fldChar w:fldCharType="separate"/>
                                </w:r>
                                <w:r>
                                  <w:t>2</w:t>
                                </w:r>
                                <w:r>
                                  <w:fldChar w:fldCharType="end"/>
                                </w:r>
                                <w:r>
                                  <w:t xml:space="preserve"> 页</w:t>
                                </w:r>
                              </w:p>
                            </w:txbxContent>
                          </wps:txbx>
                          <wps:bodyPr rot="0" spcFirstLastPara="0" vertOverflow="overflow" horzOverflow="overflow" vert="horz" wrap="none" lIns="0" tIns="0" rIns="0" bIns="0" numCol="1" spcCol="0" rtlCol="0" fromWordArt="0" anchor="t" anchorCtr="0" forceAA="0" upright="0" compatLnSpc="1">
                            <a:spAutoFit/>
                          </wps:bodyPr>
                        </wps:wsp>
                      </a:graphicData>
                    </a:graphic>
                  </wp:anchor>
                </w:drawing>
              </mc:Choice>
              <mc:Fallback>
                <w:pict>
                  <v:shape id="_x0000_s1026" o:spid="_x0000_s1026" o:spt="202" type="#_x0000_t202" style="position:absolute;left:0pt;margin-top:0pt;height:144pt;width:144pt;mso-position-horizontal:center;mso-position-horizontal-relative:margin;mso-wrap-style:none;z-index:251659264;mso-width-relative:page;mso-height-relative:page;" filled="f" stroked="f" coordsize="21600,21600" o:gfxdata="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&#10;AAAAAAYABgBZAQAAwwUAAAAA&#10;">
                    <v:fill on="f" focussize="0,0"/>
                    <v:stroke on="f" weight="0.5pt"/>
                    <v:imagedata o:title=""/>
                    <o:lock v:ext="edit" aspectratio="f"/>
                    <v:textbox inset="0mm,0mm,0mm,0mm" style="mso-fit-shape-to-text:t;">
                      <w:txbxContent>
                        <w:p>
                          <w:pPr>
                            <w:pStyle w:val="2"/>
                          </w:pPr>
                          <w:r>
                            <w:t xml:space="preserve">第 </w:t>
                          </w:r>
                          <w:r>
                            <w:fldChar w:fldCharType="begin"/>
                          </w:r>
                          <w:r>
                            <w:instrText xml:space="preserve"> PAGE  \* MERGEFORMAT </w:instrText>
                          </w:r>
                          <w:r>
                            <w:fldChar w:fldCharType="separate"/>
                          </w:r>
                          <w:r>
                            <w:t>1</w:t>
                          </w:r>
                          <w:r>
                            <w:fldChar w:fldCharType="end"/>
                          </w:r>
                          <w:r>
                            <w:t xml:space="preserve"> 页 共 </w:t>
                          </w:r>
                          <w:r>
                            <w:fldChar w:fldCharType="begin"/>
                          </w:r>
                          <w:r>
                            <w:instrText xml:space="preserve"> NUMPAGES  \* MERGEFORMAT </w:instrText>
                          </w:r>
                          <w:r>
                            <w:fldChar w:fldCharType="separate"/>
                          </w:r>
                          <w:r>
                            <w:t>2</w:t>
                          </w:r>
                          <w:r>
                            <w:fldChar w:fldCharType="end"/>
                          </w:r>
                          <w:r>
                            <w:t xml:space="preserve"> 页</w:t>
                          </w:r>
                        </w:p>
                      </w:txbxContent>
                    </v:textbox>
                  </v:shape>
                </w:pict>
              </mc:Fallback>
            </mc:AlternateContent>
          </w:r>
          <w:r>
            <w:rPr>
              <w:rFonts w:hint="eastAsia"/>
              <w:sz w:val="18"/>
              <w:lang w:val="en-US" w:eastAsia="zh-CN"/>
            </w:rPr>
            <w:tab/>
          </w:r>
          <w:r>
            <w:rPr>
              <w:rFonts w:hint="eastAsia"/>
              <w:sz w:val="18"/>
              <w:lang w:val="en-US" w:eastAsia="zh-CN"/>
            </w:rPr>
            <w:tab/>
          </w:r>
          <w:r>
            <w:rPr>
              <w:rFonts w:hint="eastAsia"/>
              <w:sz w:val="18"/>
              <w:lang w:val="en-US" w:eastAsia="zh-CN"/>
            </w:rPr>
            <w:t>合同编号:</w:t>
          </w:r>
          <w:r>
            <w:t>skdfdz20231019142503</w:t>
          </w:r>
        </w:p>
      </w:ftr>
    </pkg:xmlData>
  </pkg:part>

到了这里,关于Apache poi xwpf word转PDF中文显示与页码问题解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 设置word目录从正文开始记录页码,并解决word目录正常,但正文页脚处只显示第一页的页码

    问题详情1:如何设置目录从正文开始记录页码 问题详情2:word目录处的页码正常,但正文只有第一页的页脚处显示页码 在设置目录从正文开始记录页码时需在目录后插入分节符(相同的节可以把当前页的页脚链接到上一页,但是不同的节就不行,因此可以利用分节来从 正文

    2024年03月10日
    浏览(116)
  • 【Java】itext 实现 html根据模板生成pdf 中文不显示/图片不显示问题解决

    工作中需要使用生成pdf记录,选取使用的是itext 生成 pdf方式。分享下实现方式及遇到的问题。 这里随便找个html课程表作为示例,添加了几张图片为了展示图片转pdf功能。 一:引入jar包 二:导入ftl文件 这块使用的是html语法,将文件后缀名改为ftl即可,在需要参数的地方通过

    2024年02月05日
    浏览(45)
  • Mac版Word设置从第K页开始显示页码

    最近有同学问我怎么在word文档中 从第四页开始设置页码 , 也就是首页以及第二页第三页的说明页都不编页码, 从第四页开始页码为1, 然后往后编号这种. 一开始我以为直接在页码设置处就有这个选项的(毕竟写东西几乎不用word, 也不熟悉), 后来发现还是too young too simple了, 查了

    2024年02月07日
    浏览(42)
  • word里的页码问题

    封面不需要页码怎么办 一份文档写完,如果需要页码,第一页是封面,封面不需要页码怎么办? 解决:打开页眉页脚,然后把首页不同勾选上,这一页就没有页码了。 目录页与正文页码格式不同怎么办 目录页往往要使用罗马数字的123,其他正文又要用123数字。格式不同怎么

    2024年02月15日
    浏览(41)
  • java使用apache.poi导出word文件

    功能说明: 将试卷导出word,并可以打印,装订,效果图: 下面是实现代码:

    2024年02月15日
    浏览(48)
  • 【python】jupyter notebook导出pdf和pdf不显示中文问题

    使用jupyter notebook导出pdf时,出现了一些问题: 1)会报错,缺少安装包; 2)没有报错并且生成了pdf,但是只显示英文,不显示中文; 3)插入svg图片问题; 下面是给出了一些网搜后适用自己的解决办法。 导出pdf步骤: File- Download as - PDF via LaTex(.pdf) : 出现报错没有 Pandoc :

    2024年02月11日
    浏览(49)
  • java.lang.NoClassDefFoundError: org.apache.poi.POIXMLDocument问题排查解决

    项目打包部署完成,用jar包在部署环境运行,在使用到poi相关的服务时报错 java.lang.NoClassDefFoundError: org.apache.poi.POIXMLDocument 然后我查找了些解决办法,对处理方法做了梳理: 使用XSSWorkbook,使用时出错 pom文件少引入依赖 包依赖冲突 使用模块没有声明所需依赖(这是我遇到的

    2024年02月06日
    浏览(87)
  • 【Java Easypoi & Apache poi】 Word导入与导出

            如果这里造成了读取resources下的文件返回前端乱码问题:除了HttpServletResponse响应中设置字体问题,还有可能是因为在编译期文件就已经乱码了,所以需要在pom.xml中增加以下配置。

    2024年02月10日
    浏览(55)
  • Java POI导出Word、Excel、Pdf文档(可在线预览PDF)

    1、导入依赖Pom.xml        dependency             groupIdorg.apache.poi/groupId             artifactIdpoi/artifactId             version3.14/version         /dependency 2、Controller   3、Service a、pdfService b、wordService c、excelService  4、Utils 5、模板截图   6、前端

    2024年02月08日
    浏览(59)
  • 【Easypoi & Apache poi】 Java后端 Word导入与导出

            如果这里造成了读取resources下的文件返回前端乱码问题:除了HttpServletResponse响应中设置字体问题,还有可能是因为在编译期文件就已经乱码了,所以需要在pom.xml中增加以下配置。

    2024年02月11日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包