二、PDF转PNG代码

String pdfBase64 = "XXXXX";

PDDocument pdDocument = PDDocument.load(Base64Utils.decodeFromString(pdfBase64));

PDFRenderer renderer = new PDFRenderer(pdDocument);

BufferedImage bufferedImage = renderer.renderImage(0);

ImageIO.write(bufferedImage, "png", new File("xxx.png"));

三、PNG中文方块乱码

查看linux服务器上的字体库如下。

转换后的PNG如下。

日志中打印出类似这样的日志(例:Using fallback XXX for CID-keyed font STSong-Light),就说明系统没有安装STSong-Light字体,pdfbox使用XXX字体来替代了。如果出现方块,就说明没有这种字体,并且替代字体也没有,日志也有相应的其他提示。

四、linux添加字体库

可以选择STSong-Light字体,而我这里选择simsun.ttf字体。

#cd /usr/share/fonts/ // 进入系统自带的字体目录

#mkdir myfonts // myfonts 是你自己随便取得文件夹名字,一定要有这一步

#将字体文件拷贝到这个文件夹下,在cd /usr/share/fonts/目录下执行以下命令

#mkfontscale

#mkfontdir

#fc-cache -fv //更新字体缓存

#fc-list // 查看系统中所有得字体,可用于测试是否安装字体成功

如果 /usr/share/fonts/ 目录当前用户没有权限,可以在 ~/.fonts/ 目录下新增字体库,操作步骤和上面一样。

注意:一定要创建字体对应的文件夹,如果字体直接放在fonts目录,不会生效。

新增字体之后,可以看到字体库列表中有如下 宋体 的字样了。

最终转换后正常的PNG如下。

一、引入依赖org.apache.pdfboxfontbox2.0.13org.apache.pdfboxpdfbox2.0.13二、PDF转PNG代码String pdfBase64 = "XXXXX";PDDocument pdDocument = PDDocument.load(Base64Utils.decodeFromString(pdfBase64));PDFRenderer rend... <dependency> <groupId>org.apache. pdfbox </groupId> <artifactId> pdfbox </artifactId> <version>2.0.13<... import org.apache. pdfbox .pdmodel.PDDocument; import org.apache. pdfbox .rendering.ImageType; import org.apache. pdfbox .rendering. PDF Renderer; public class Pdf To Png { public static void main(String[] args) throws IOException { // 加载 PDF 文件 File file = new File("file. pdf "); PDDocument document = PDDocument.load(file); // 使用 PDF Renderer 将 PDF 换为图像 PDF Renderer renderer = new PDF Renderer(document); BufferedImage image = renderer.renderImage(0, 1, ImageType.RGB); document.close(); // 将图像写入文件 ImageIO.write(image, " PNG ", new File("file. png ")); 在这段代码中,我们 使用 了 Apache PDFBox 库来 实现 PDF 换为图像的功能。我们首先 使用 PDDocument 类加载了 PDF 文件,然后 使用 PDF Renderer 类将其 换为图像。最后,我们 使用 ImageIO 类将图像写入文件。 注意:在 使用 这段代码之前,你需要将 Apache PDFBox 库的 jar 文件添加到你的项目的 classpath 中。 希望这对你有帮助!