最近做了一个在word中替换指定字符串,插入图片,转换成pdf的需求,弄了两天多才搞出来,本以为everything is ok,但是在本地调试什么都是好的。放到服务器上以后。。。却乱码了。。。乱码了。。。码了。。。了,求大佬列出可能的情况。乱码的样子是这样的:刚刚问了下运维:服务器是这个alpine 贴上代码,各位大佬帮忙分析分析public JSONObject createTemplatePdf(File file) throws Exception {
JSONObject res;
// 验证License
if (getLicense()) {
FileOutputStream fileOutputStream = null;
FileInputStream pdfInputStream = null;
try {
Document doc = new Document(new FileInputStream(file));
// 以下几行代码是把这个word文件转化成pdf文件
File pdfFile = mkDirectoryAndFile(FILE_TYPE_PDF);
fileOutputStream = new FileOutputStream(pdfFile);
doc.save(fileOutputStream, SaveFormat.PDF);
// 下面把这个文件传到文件服务器,并返回信息
pdfInputStream = new FileInputStream(pdfFile);
MultipartFile multipartFile = getMulFile(pdfFile);
JSONArray jsonArray = sharedServiceClient.saveFile(multipartFile);
res = jsonArray.getJSONObject(0);
// 删除临时文件
if (pdfFile.exists()) {
pdfFile.delete();
}
// 删除临时文件
if (file.exists()) {
file.delete();
}
} finally {
if (fileOutputStream != null) {
fileOutputStream.flush();
fileOutputStream.close();
}
if (pdfInputStream != null) {
pdfInputStream.close();
}
}
} else {
throw new Exception("授权文件失效!");
}
return res;
}public MultipartFile getMulFile(File file) {
FileItem fileItem = createFileItem(file);
MultipartFile mfile = new CommonsMultipartFile(fileItem);
return mfile;
}@PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
JSONArray saveFile(@Param("file") MultipartFile file);调试了一下,发现是word转pdf的时候,有问题。帮忙看下这一段代码有什么地方会造成本地和服务器的差异吗?
9 回答

温温酱
TA贡献1752条经验 获得超4个赞
应该是字体问题,服务器环境经常会出现和开发环境字体不一致,以前试过html转PDF,也是这个坑,导致两个环境生成的PDF字体大小不一样,解决方法是给服务器环境配置齐全字体,或者代码处理字体
更正---------------------------
语言包有误导,改为字体

萧十郎
TA贡献1815条经验 获得超13个赞
中文也有很多种字体,上面可能描述成语言包有误导,是字体,比如windows默认微软雅黑,但是很多时候我们比较喜欢使用宋体,新宋体等字体编写文档,这就导致字体不一致,转换PDF就出现乱码。

忽然笑
TA贡献1806条经验 获得超5个赞
下载了语言包也要在生成pdf的时候设置
//生成空白pdf文件
Document document = new Document();
PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(mmSavePath + ppFileName));
//设置只有打印权限 pdfWriter.setEncryption(null,null, PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128); document.open(); document.newPage(); document.add(new Paragraph(" ")); document.close(); pdfWriter.close(); String url = new File(file1).toURI().toURL().toString(); String outputFile = mmSavePath + ppFileName; OutputStream os = new FileOutputStream(outputFile); ITextRenderer renderer = new ITextRenderer(); /*PDFEncryption pdfEncryption = new PDFEncryption(null,null,PdfWriter.ALLOW_PRINTING,PdfWriter.ENCRYPTION_AES_128); renderer.setPDFEncryption(pdfEncryption); //只有打印权限的
*/ renderer.setDocument(url);
// 解决中文问题 ITextFontResolver fontResolver = renderer.getFontResolver(); fontResolver.addFont(basePath + "muban/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); fontResolver.addFont(basePath + "muban/SIMFANG.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); renderer.layout(); renderer.createPDF(os); os.close(); 但是我这是生成html,转换为pdf,你可以看看,

HUWWW
TA贡献1874条经验 获得超12个赞
添加回答
举报
0/150
提交
取消