원칙은 PPT를 PDF로 변환 한 다음 PPT 또는 PPTX에 문제가 있습니다 그리고 단순히 PPT 접미사를 검색 할 수 있습니다. 솔루션은 페이지가 중국 글꼴이라면 Microsoft Yahei와 노래 글꼴로 설정됩니다. 일부 중국 상자. POI 처리라고 의심되는데, 첫 번째 글꼴 만 읽습니다.
Baidu와 Google은 오랫동안 검색해 왔으며 일부 사람들은 Apache의 공식 웹 사이트에서 버그라고 말했지만 실제로는 Poi가 할 수 있다고 생각합니다 이 문제는 그 자체로 원래 글꼴을 읽고 현재 글꼴로 설정하지만, 많은 사람들이 많은 사람들이 나와 같은 솔루션을 찾는 데 많은 시간을 소비 할 것입니다. 인터넷에서 거의 기성품 솔루션이 없습니다. 또한 단계별로 시도했지만 PPT 형식을 언급하지는 않았지만 온라인으로 찾을 수 있습니다.
문제가 그림으로 변환되기 전에 PPTX가 다음과 같습니다.
해상도 후 PPTX는 그림으로 변환됩니다.
해결책:
각 모양을 읽고 텍스트를 통합 글꼴로 변환하십시오.
(xslfshape shape : slide [i] .getshapes ()) {if (xslftextshape) {xslftextshape txshape = (xslftextshape) sy stem.out.println ( "i + 1) +": ":" + txshape.getshapename ()); "텍스트 :" + txshape.getText (); for (xslftextrun : textrunlist) {textrun.setfontfamily ( "宋体"); 완전한 코드는 다음과 같습니다 (위의 솔루션을 제외하고는 대부분 stackoverFlow의 코드입니다).
public void contralppttopdf (string sourcepath, string filetype) {fileInputStream inputStream = double Zoom = 2; pdfdocument () pdfwriter SlideImage = null; ppt. getSlides (); = 0; i <슬라이드; k]. rtruns [l]. rtruns [l]. (pgsi ze. Zoom), bufferedimage.type_int_rgb); , 0, pgsize, pgsize. true)} if (filetype.equalsignorecase ( ". pptx")) {xmlslidshow ppt = pgsize = ppt.getPagesize [); setPagesize ((float) pgsize.getWidth (), (float) pdfwriter.open (); i ++) {for (xslfs hape shape : slide [i] .getshapes ()) {if (xslftextshape txshape) {xslftextshape) shape ( "txshape"+(i+1; ) + " + txshape textrunlist = textpara.getTextruns (xslftextrun : textrunlist) {textrun.setfontfamily ( "宋体"); ) CHARE (pgsize.height * Zoom), bufferedImage.type_int_rgb); float (0, 0, pgsize.width, pgsize.height); draw (그래픽); imageio.imageio.write (jpg). }} pdf 문서 (표). Maven 구성 :
<pectionency> <groupid> org.apache.poi </groupid> <artifactid> poi </artifactid> <!-<bersion> 3.13 </version>-> <bersion> 3.9 </version> </fextc y > <pectionency> <groupid> org.apache.poi </groupid> <artifactid> poi-ooxml </artifactid> <!-<bersion> 3.10-final </version>-> <버전> 3.9 </versi on> </fectomency> <pectinement> <groupId> com.ithoutpdf </groupid> <artifactid> ithextpdf </artifactid> <버전> 5.5.7 </version> </fectionency> <groupid> com.itextpdf .Tool </groupId> <ArtifactID> XMLWorker </artifactid> <버전> 5.5.7 </version> </fectionency> <pectionement> <groupid> org.apache.poi </groupid> <artif ctid> poi-scratchpad </artifactid> <!-<bersion> 3.12 </version>-> <버전> 3.9 </version> </fectionency>
위의 것은 Java에서 PPT를 구현하는 Java의 Barlled Chinese 문제에 대한 해결책입니다.