html转pdf(总结五种方法Java)

article/2025/9/11 18:03:35

html转pdf(总结五种方法Java)

Java 实现html转pdf,总结五种方法。
推荐使用wkhtmltopdf,Itext
(img-M4kXdzcT-1669887116934)(_v_images/20221201165346879_22464.png)]

方法一:使用wkhtmltopdf

1、下载插件wkhtmltopdf
https://wkhtmltopdf.org/downloads.html(img-lzLsty7k-1669887116935)(_v_images/20221201163606556_16343.png)]

2、本机测试
本目录下cmd进入
输入命令 wkhtmltopdf.exe ‪E:\学习文档\百度常用标签.html ‪E:\学习文档\百度常用标签.pdf
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fPVH6Enr-1669887116935)(_v_images/20221201164132812_15695.png)]

3、java代码实现
HtmlToPdf类

import java.io.File;public class HtmlToPdf {//    wkhtmltopdf在系统中的路径private static final String toPdfTool = "‪D:\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";/*** html转pdf** @param srcPath  html路径,可以是硬盘上的路径,也可以是网络路径* @param destPath pdf保存路径* @return 转换成功返回true*/public static boolean convert(String srcPath, String destPath,String toPdfTool){File file = new File(destPath);File parent = file.getParentFile();//如果pdf保存路径不存在,则创建路径if(!parent.exists()){parent.mkdirs();}StringBuilder cmd = new StringBuilder();cmd.append(toPdfTool);cmd.append(" ");cmd.append(" --header-line");//页眉下面的线cmd.append(" --margin-top 3cm ");//设置页面上边距 (default 10mm)// cmd.append(" --header-html file:///"+WebUtil.getServletContext().getRealPath("")+FileUtil.convertSystemFilePath("\\style\\pdf\\head.html"));// (添加一个HTML页眉,后面是网址)cmd.append(" --header-spacing 5 ");// (设置页眉和内容的距离,默认0)//cmd.append(" --footer-center (设置在中心位置的页脚内容)");//设置在中心位置的页脚内容//cmd.append(" --footer-html file:///"+WebUtil.getServletContext().getRealPath("")+FileUtil.convertSystemFilePath("\\style\\pdf\\foter.html"));// (添加一个HTML页脚,后面是网址)cmd.append(" --footer-line");//* 显示一条线在页脚内容上)cmd.append(" --footer-spacing 5 ");// (设置页脚和内容的距离)cmd.append(srcPath);cmd.append(" ");cmd.append(destPath);boolean result = true;try{Process proc = Runtime.getRuntime().exec(cmd.toString());HtmlToPdfInterceptor error = new HtmlToPdfInterceptor(proc.getErrorStream());HtmlToPdfInterceptor output = new HtmlToPdfInterceptor(proc.getInputStream());error.start();output.start();proc.waitFor();}catch(Exception e){result = false;e.printStackTrace();}return result;}public static void main(String[] args) {String sourcePath = "https://blog.csdn.net/weixin_43981813/article/details/127895442?spm=1001.2014.3001.5502";HtmlToPdf.convert(sourcePath, "D:\\testpdf.pdf",toPdfTool);System.out.println("0000");}}

HtmlToPdfInterceptor类

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;public class HtmlToPdfInterceptor extends Thread {private InputStream is;public HtmlToPdfInterceptor(InputStream is){this.is = is;}public void run(){try{InputStreamReader isr = new InputStreamReader(is, "utf-8");BufferedReader br = new BufferedReader(isr);String line = null;while ((line = br.readLine()) != null) {System.out.println(line.toString()); //输出内容}}catch (IOException e){e.printStackTrace();}}
}

linux版本参考: https://blog.csdn.net/weixin_43981813/article/details/128257492

方法二:使用Itext

1、引入依赖

<!-- itext7html转pdf  -->
<dependency><groupId>com.itextpdf</groupId><artifactId>html2pdf</artifactId><version>3.0.2</version>
</dependency>
<!-- 中文字体支持 -->
<dependency><groupId>com.itextpdf</groupId><artifactId>font-asian</artifactId><version>7.1.13</version>
</dependency>

2、解决水印和页码
只需实现实现com.itextpdf.kernel.events.IEventHandler接口即可

/*** 水印*/
public class WaterMarkEventHandler implements IEventHandler {/*** 水印内容*/private String waterMarkContent;/*** 一页中有几列水印*/private int waterMarkX;/*** 一页中每列有多少水印*/private int waterMarkY;public WaterMarkEventHandler(String waterMarkContent) {this(waterMarkContent, 5, 5);}public WaterMarkEventHandler(String waterMarkContent, int waterMarkX, int waterMarkY) {this.waterMarkContent = waterMarkContent;this.waterMarkX = waterMarkX;this.waterMarkY = waterMarkY;}@Overridepublic void handleEvent(Event event) {PdfDocumentEvent documentEvent = (PdfDocumentEvent) event;PdfDocument document = documentEvent.getDocument();PdfPage page = documentEvent.getPage();Rectangle pageSize = page.getPageSize();PdfFont pdfFont = null;try {pdfFont = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", false);} catch (IOException e) {e.printStackTrace();}PdfCanvas pdfCanvas = new PdfCanvas(page.newContentStreamAfter(), page.getResources(), document);Paragraph waterMark = new Paragraph(waterMarkContent).setOpacity(0.5f);Canvas canvas = new Canvas(pdfCanvas, pageSize).setFontColor(WebColors.getRGBColor("lightgray")).setFontSize(16).setFont(pdfFont);for (int i = 0; i < waterMarkX; i++) {for (int j = 0; j < waterMarkY; j++) {canvas.showTextAligned(waterMark, (150 + i * 300), (160 + j * 150), document.getNumberOfPages(), TextAlignment.CENTER, VerticalAlignment.BOTTOM, 120);}}canvas.close();}
}
/*** 页码*/
public class PageEventHandler implements IEventHandler {@Overridepublic void handleEvent(Event event) {PdfDocumentEvent documentEvent = (PdfDocumentEvent) event;PdfDocument document = documentEvent.getDocument();PdfPage page = documentEvent.getPage();Rectangle pageSize = page.getPageSize();PdfFont pdfFont = null;try {pdfFont = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", false);} catch (IOException e) {e.printStackTrace();}PdfCanvas pdfCanvas = new PdfCanvas(page.getLastContentStream(), page.getResources(), document);Canvas canvas = new Canvas(pdfCanvas, pageSize);float  x = (pageSize.getLeft() + pageSize.getRight()) / 2;float  y = pageSize.getBottom() + 15;Paragraph paragraph = new Paragraph("第" + document.getPageNumber(page) + "页/共" + document.getNumberOfPages() + "页").setFontSize(10).setFont(pdfFont);canvas.showTextAligned(paragraph, x, y, TextAlignment.CENTER);canvas.close();}
}

3、转换工具类

/*** Itext7转换工具类*/
@Slf4j
public class HtmlToPdfUtils {/*** html转pdf** @param inputStream  输入流* @param waterMark    水印* @param fontPath     字体路径,ttc后缀的字体需要添加<b>,0<b/>* @param outputStream 输出流* @date : 2022/11/15 14:07*/public static void convertToPdf(InputStream inputStream, String waterMark, String fontPath, OutputStream outputStream) throws IOException {PdfWriter pdfWriter = new PdfWriter(outputStream);PdfDocument pdfDocument = new PdfDocument(pdfWriter);//设置为A4大小pdfDocument.setDefaultPageSize(PageSize.A4);//添加水印pdfDocument.addEventHandler(PdfDocumentEvent.END_PAGE, new WaterMarkEventHandler(waterMark));//添加中文字体支持ConverterProperties properties = new ConverterProperties();FontProvider fontProvider = new FontProvider();//        设置字体/*PdfFont sysFont = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", false);fontProvider.addFont(sysFont.getFontProgram(), "UniGB-UCS2-H");*///添加自定义字体,例如微软雅黑if (StringUtils.isNotBlank(fontPath)) {PdfFont microsoft = PdfFontFactory.createFont(fontPath, PdfEncodings.IDENTITY_H, false);fontProvider.addFont(microsoft.getFontProgram(), PdfEncodings.IDENTITY_H);}properties.setFontProvider(fontProvider);//        读取Html文件流,查找出当中的&nbsp;或出现类似的符号空格字符inputStream = readInputStrem(inputStream);if (inputStream != null) {//        生成pdf文档HtmlConverter.convertToPdf(inputStream, pdfDocument, properties);pdfWriter.close();pdfDocument.close();return;} else {log.error("转换失败!");}}/*** 读取HTML 流文件,并查询当中的&nbsp;或类似符号直接替换为空格** @param inputStream* @return*/private static InputStream readInputStrem(InputStream inputStream) {// 定义一些特殊字符的正则表达式 如:String regEx_special = "\\&[a-zA-Z]{1,10};";try {//<1>创建字节数组输出流,用来输出读取到的内容ByteArrayOutputStream baos = new ByteArrayOutputStream();//<2>创建缓存大小byte[] buffer = new byte[1024]; // 1KB//每次读取到内容的长度int len = -1;//<3>开始读取输入流中的内容while ((len = inputStream.read(buffer)) != -1) { //当等于-1说明没有数据可以读取了baos.write(buffer, 0, len);   //把读取到的内容写到输出流中}//<4> 把字节数组转换为字符串String content = baos.toString();//<5>关闭输入流和输出流//            inputStream.close();baos.close();//            log.info("读取的内容:{}", content);//            判断HTML内容是否具有HTML的特殊字符标记Pattern compile = Pattern.compile(regEx_special, Pattern.CASE_INSENSITIVE);Matcher matcher = compile.matcher(content);String replaceAll = matcher.replaceAll("");//            log.info("替换后的内容:{}", replaceAll);//            将字符串转化为输入流返回InputStream stringStream = getStringStream(replaceAll);//<6>返回结果return stringStream;} catch (Exception e) {e.printStackTrace();log.error("错误信息:{}", e.getMessage());return null;}}/*** 将一个字符串转化为输入流* @param sInputString 字符串* @return*/public static InputStream getStringStream(String sInputString) {if (sInputString != null && !sInputString.trim().equals("")) {try {ByteArrayInputStream tInputStringStream = new ByteArrayInputStream(sInputString.getBytes());return tInputStringStream;} catch (Exception e) {e.printStackTrace();}}return null;}}

4、测试

@Slf4j
public class Test {public static void main(String[] args) throws IOException {long startTime = System.currentTimeMillis();//       html文件所在相对路径String htmlFile = "src/main/resources/html/index2.html";//       pdf文件存储相对路径String pdfFile = "src/main/resources/x6.pdf";//        自定义水印String waterMarkText =  "";InputStream inputStream = new FileInputStream(htmlFile);OutputStream outputStream = new FileOutputStream(pdfFile);//微软雅黑在windows系统里的位置如下,linux系统直接拷贝该文件放在linux目录下即可//        String fontPath = "src/main/resources/font/STHeiti Light.ttc,0";String fontPath = "src/main/resources/font/simsun.ttc,0";HtmlToPdfUtils.convertToPdf(inputStream, waterMarkText, fontPath, outputStream);log.info("转换结束,耗时:{}ms",System.currentTimeMillis()-startTime);}
}

5、注意事项

  • 页面中不能出现html的特殊字符标记,如 等(代码中已经处理,所有都替换为空)可忽略
  • 页面中的图片路径,必须是在项目根路径后面的所有地址(相对路径)
  • 页面中的标签要符合规范,必须都具有结束标签等

方法三:使用Spire.Doc

将文档从一种格式转换为另一种格式是Spire.Doc的主要功能之一。这种转换只不过是加载和保存操作的组合。因此,使用Spire.DOC可以将文档从任何受支持的加载格式转换为任何受支持的保存格式。
spire.doc分为商业版和免费版,免费版只支持转换前3页,以免费版为例

1、增加一个maven仓库路径

<repositories><repository><id>com.e-iceblue</id><url>http://repo.e-iceblue.cn/repository/maven-public/</url></repository>
</repositories>

依赖

<!--    免费版,只支持前三页转化 -->
<dependency><groupId>e-iceblue</groupId><artifactId>spire.doc.free</artifactId><version>3.9.0</version>
</dependency>

2、转换工具类

/*** @Author:lzh* @Create:2022/11/19/18:04* @Description:html转换pdf* @Version:1.0*/
public class Html3Pdf {public static void main(String[] args) throws IOException {}/*** 免费版,只支持前三页转换* @param inputHtml HTML地址* @param pdfName pdf保存地址* @throws IOException*/public void  spireDoc(String inputHtml,String pdfName) throws IOException {inputHtml = "src/main/resources/html/index2.html";//新建Document对象Document doc = new Document();//添加sectionSection sec = doc.addSection();//        将html转化为流字符串String htmlText = readTextFromFile(inputHtml);//添加段落并写入HTML文本sec.addParagraph().appendHTML(htmlText);pdfName = "src/main/resources/x4.pdf";//将文档另存为PDFdoc.saveToFile(pdfName, FileFormat.PDF);doc.dispose();}/*** 将该路径的HTML页面转化为流字符串* @param fileName 文件地址* @return* @throws IOException*/public static String readTextFromFile(String fileName) throws IOException {StringBuffer sb = new StringBuffer();BufferedReader br = new BufferedReader(new FileReader(fileName));String content;while ((content = br.readLine()) != null) {sb.append(content);}return sb.toString();}
}

可参考:https://blog.csdn.net/csdnerM/article/details/120649237

方法四:使用Flying Sauser(技术老旧,对样式不支持)

Flying Sauser实现html2pdf,纠错能力差,支持中文、支持简单的页面和样式,开源
对html代码要求很严格。极易出现中文乱码问题

实现:

public class Html2Pdf {/*** HTML代码转PDF文档** @param content 待转换的HTML代码* @param storagePath 保存为PDF文件的路径*/public static void parsePdf(String content, String storagePath) {FileOutputStream os = null;try {File file = new File(storagePath);if(!file.exists()) {file.createNewFile();}os = new FileOutputStream(file);ITextRenderer renderer = new ITextRenderer();//解决中文支持问题//            ITextFontResolver resolver = renderer.getFontResolver();//            resolver.addFont("simhei.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);//            resolver.addFont("simhei.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);renderer.setDocumentFromString(content);// 解决图片的相对路径问题,图片路径必须以file开头// renderer.getSharedContext().setBaseURL("file:/");renderer.layout();renderer.createPDF(os);} catch (DocumentException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {if(null != os) {try {os.close();} catch (IOException e) {e.printStackTrace();}}}}/*** 对Html要求特别严格* @param args* @throws IOException*/public static void main(String[] args) throws IOException {String htmlFilePath = "";htmlFilePath = "F:/pdf/IText实现对PDF文档属性的基本设置 - 半亩池光 - 博客园.html";StringBuilder content = new StringBuilder();BufferedInputStream in;byte[] bys = new byte[1024];int len;in = new BufferedInputStream(new FileInputStream(htmlFilePath));while ((len = in.read(bys)) != -1) {content.append(new String(bys, 0, len));}String html = closeHTML(content.toString());html = html.replace(" "," ");parsePdf(html,"F:/pdf/wahaha.pdf");}public static String closeHTML(String str){List arrTags = new ArrayList();arrTags.add("br");arrTags.add("hr");arrTags.add("link");arrTags.add("meta");arrTags.add("img");arrTags.add("input");for(int i=0;i<arrTags.size();i++){for(int j=0;j<str.length();){int tagStart = str.indexOf("<"+arrTags.get(i),j);if(tagStart>=0){int tagEnd = str.indexOf(">",tagStart);j = tagEnd;String preCloseTag = str.substring(tagEnd-1,tagEnd);if(!"/".equals(preCloseTag)){String preStr = str.substring(0,tagEnd);String afterStr = str.substring(tagEnd);str = preStr + "/" + afterStr;}}else{break;}}}return str;}}

方法五:使用PD4ML(样式有问题)

PD4ML是纯Java的类库,使用HTML、CSS作为页面布局和内容定义格式来生成PDF文档的强大工具,可以简化最终用户生成PDF的工作。参考网站:http://www.pd4ml.com
可参考:https://github.com/linkamnal/Html2Pdf
工具类:

public class HtmlToPDFUtil {public static void main(String[] args) throws Exception {//HtmlToPDFUtil htmlToPDFUtil = new HtmlToPDFUtil();HtmlToPDFUtil.generatePDF_2(new File("F:\pdf/demo_ch_pd4ml.pdf"),"F:\pdf/flying saucer 使用中的一些问题 (java导出pdf) - 真的勇士,敢于直面这扯淡的人生 - ITeye博客.htm");//File pdfFile = new File("D:/Test/test3.pdf");//        String pdfPath = "D:/Test1/mmt";////        File file = new File(pdfPath);//        if (!file.exists()) {//            file.mkdirs();//        }//        String pdfName = "aa.pdf";//        File pdfFile = new File(pdfPath+File.separator+pdfName);//        StringBuffer html = new StringBuffer();//        html.append("<html>")//                .append("<head>")//                .append("<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />")//                .append("</head>").append("<body>")//                //.append("<font face='KaiTi_GB2312'>")//                .append("<font face='KaiTi'>")//                .append("<font color='red' size=22>显示中文aaaaaaaaaa</font>")//                .append("</font>").append("</body></html>");//        StringReader strReader = new StringReader(html.toString());//        HtmlToPDFUtil.generatePDF_1(pdfFile, strReader);}// 手动构造HTML代码public static void generatePDF_1(File outputPDFFile, StringReader strReader)throws Exception {FileOutputStream fos = new FileOutputStream(outputPDFFile);PD4ML pd4ml = new PD4ML();pd4ml.setPageInsets(new Insets(20, 10, 10, 10));pd4ml.setHtmlWidth(950);pd4ml.setPageSize(pd4ml.changePageOrientation(PD4Constants.A4));pd4ml.useTTF("java:fonts", true);        //pd4ml.setDefaultTTFs("KaiTi_GB2312", "KaiTi_GB2312", "KaiTi_GB2312");pd4ml.setDefaultTTFs("KaiTi", "KaiTi", "KaiTi");pd4ml.enableDebugInfo();pd4ml.render(strReader, fos);}// HTML代码来自于HTML文件public static void generatePDF_2(File outputPDFFile, String inputHTMLFileName)throws Exception {FileOutputStream fos = new FileOutputStream(outputPDFFile);PD4ML pd4ml = new PD4ML();pd4ml.setPageInsets(new Insets(20, 10, 10, 10));pd4ml.setHtmlWidth(950);pd4ml.setPageSize(pd4ml.changePageOrientation(PD4Constants.A4));pd4ml.useTTF("java:fonts", true);pd4ml.setDefaultTTFs("KaiTi", "KaiTi", "KaiTi");pd4ml.enableDebugInfo();pd4ml.render("file:" + inputHTMLFileName, fos);}}

http://chatgpt.dhexx.cn/article/Zj7l5vuI.shtml

相关文章

Java 动态规划

Java中的动态规划 介绍 动态规划典型的被用于优化递归算法&#xff0c;因为它们倾向于以指数的方式进行扩展。动态规划主要思想是将复杂问题&#xff08;带有许多递归调用&#xff09;分解为更小的子问题&#xff0c;然后将它们保存到内存中&#xff0c;这样我们就不必在每次…

PDF如何转换成jpg图片

PDF文件转换成jpg&#xff0c;有些人一看到问题可能有点懵逼&#xff0c;其实就是PDF转换成图片了&#xff0c;只要转换器中的PDF转图片功能中图片格式支持jpg格式&#xff0c;就可以直接转换成jpg图片了&#xff0c;比如奥凯丰 PDF转换大师&#xff0c;支持PDF转jpg、PDF转png…

数据结构和算法Java实现(韩顺平)

目录 稀疏数组 队列 数组模拟队列思路 数组模拟环形队列 链表 单链表的翻转 单链表的逆序输出&#xff08;栈&#xff09; 双向链表 Jasephu 问题 栈 数组模拟 栈实现计算器 中缀表达式 计算器 逆波兰表达式 &#xff08;后缀表达式&#xff09; 中缀转后缀实现计算…

pdf文件转图片(java实现)

项目中pdf文件太大&#xff0c;在手机端打开缓慢。需要将pdf文件转换成图片。加载比较快&#xff0c;增加用户体验。话不多说&#xff0c;直接上干货。 一、在pom引入依赖的jar <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/fontbox --><dependency&g…

袋鼠云与中航金网达成战略合作并成立信创大数据联合实验室

当前&#xff0c;加快推进“新基建”已成为新形势下国家稳定经济发展的重要方针&#xff0c;而作为“新基建底座”的信创产业&#xff0c;有望成为未来中国十年科技发展的核心领域。纵观信创产业近五年发展&#xff0c;产品和技术已从“基本可用”向“好用易用”大跨步迈进&…

基于java实现PDF转图片图片合成PDF

平常在工作中&#xff0c;经常需要用到pdf转换成图片或者图片转换成pdf的功能。能将pdf转换成图片的工具比较多&#xff0c;比如wps就支持转换为图片&#xff0c;不过高清的转换需要开通会员才行&#xff0c;比较麻烦。免费的转换不光清晰度有问题&#xff0c;还存在水印等&…

《Java语言程序设计(第三版 沈泽刚)》编程练习2

编程练习 2 2.1 编写程序&#xff0c;从键盘上输入一个double类型的华氏温度&#xff0c;然后将其转换为摄氏温度输出。转换公式为&#xff1a; 摄氏度 &#xff08; 5 / 9 &#xff09;&#xff08;华氏度 − 32 &#xff09; 摄氏度&#xff08;5/9&#xff09;&#xff08…

PDF怎么转换成jpg图片保存?简单几步就能解决。

在我们的日常工作和生活中&#xff0c;我们经常会和别人在线传输各种文件。但是在传输Word文档、Excel表格、PPT等格式的文件时&#xff0c;文件内容排版和布局容易出现变化。因此&#xff0c;人们在传输文件时一般都将文件转换为PDF&#xff0c;但PDF文件在手机上观看并不方便…

pdf如何转换成jpg图片?

pdf如何转换成jpg图片&#xff1f;PDF&#xff08;Portable Document Format&#xff09;是一种常见的文件格式&#xff0c;由Adobe Systems创建。与其他文档格式相比&#xff0c;它具有固定页面布局和跨平台兼容性等优点&#xff0c;因此广泛应用于电子书、论文、技术手册、合…

PDF怎么转换成jpg图片

PDF怎么转换成jpg图片&#xff1f;在日常工作中&#xff0c;PDF文件是一种非常常用的格式类型。文件存储安全性高&#xff0c;可以保护用户文件的内容&#xff0c;文件的转换也很方便。支持多种文件类型&#xff0c;可自由切换。有的朋友还是比较习惯查阅图片格式的内容&#x…

动态规划(Java)

文章目录 前言一、背包问题二、字符串转化问题三、纸牌问题四、最少贴纸数总结 前言 动态规划的目的就是避免重复计算&#xff0c;在暴力递归的过程中若在计算过程中产生了重复计算那么就可以进行动态规划的优化。以空间换时间&#xff0c;可以根据暴力递归的过程写出动态规划…

袋鼠云与中航金网达成战略合作,成立信创大数据联合实验室

当前&#xff0c;加快推进“新基建”已成为新形势下国家稳定经济发展的重要方针&#xff0c;而作为“新基建底座”的信创产业&#xff0c;有望成为未来中国十年科技发展的核心领域。纵观信创产业近五年发展&#xff0c;产品和技术已从“基本可用”向“好用易用”大跨步迈进&…

北京市委书记蔡奇调研 PingCAP 立足自主研发和开源战略,助推产业数字化转型

2021 年 3 月&#xff0c;开源正式被列入国家十四五规划发展纲要&#xff0c;可以预期&#xff0c;开源将成为中国未来发展基础软硬件技术的关键路径。**3 月 23 日上午&#xff0c;北京市委书记蔡奇一行参观考察 PingCAP&#xff08;平凯星辰&#xff09;&#xff0c;专题调研…

如何把pdf转成图片?

怎么把pdf转成图片&#xff1f;作为上班族&#xff0c;能熟练的使用各种办公软件是职场必备技能&#xff0c;特别是在处理各种类型的文件时候&#xff0c;如果能熟练的将文件格式进行相互转换&#xff0c;那不仅能提升自己的工作效率&#xff0c;也会方便跟自己对接工作的人。就…

袋鼠云与沃趣科技达成战略合作,共同驱动企业数字化升级

12月3日,袋鼠云与沃趣科技正式达成战略合作,并于袋鼠云总部举行签约仪式。沃趣科技创始人&CEO 陈栋、联合创始人&CTO 李建辉、合伙人&总裁 郭华、技术中心负责人 魏兴华,袋鼠云创始人&董事长 陈吉平、联合创始人&CEO 徐进挺、联合创始人&易知微CEO 宁海…

袋鼠云陈吉平:深耕国产自研数字化技术与服务,持续为客户创造价值

在经济面临下行压力、疫情反复等不确定因素之下&#xff0c;推动数字化转型就成为了许多企业的“救命稻草”。然而&#xff0c;较高的数字化转型门槛、不成系统的数据服务&#xff0c;以及缺乏规范的行业标准等都成了企业数字化转型路上的“绊脚石”。 ​ 2015年&#xff0c;…

陈吉平-阿里巴巴离职DBA在35岁总结的职业生涯

导读&#xff1a;去年很多朋友私下或新浪微博上在总结自己的职业生涯与职业规划&#xff0c;也感觉到很纠结与彷徨&#xff0c;尤其技术人的职业生涯&#xff0c;随年龄增加&#xff0c;一些优势逐渐丧失。4月 13 日数据库技术大会的主办方举行的晚宴上&#xff0c;也让本人支持…

从产品到平台和生态,数据中台「竞争」升级

据可靠信源&#xff0c;中国首家数据中台公司袋鼠云已于去年年底完成C轮融资&#xff0c;由中信证券领投&#xff0c;东方富海、杭州凯泰资本跟投。 这意味着自去年以来颇受争议的数据中台赛道已经有公司率先突破C轮魔咒、迈上新台阶。 创投圈存在一个“C轮死”的魔咒&#xff…

B12专访 | 袋鼠云拖雷:未来十年是数据中台的黄金年代

B座12楼(以下简称“B12”&#xff09;&#xff0c;关注创业和投资的互联网媒体&#xff0c;精准覆盖创投圈数十万粉丝&#xff0c;让创新得到赞赏。 最近&#xff0c;B12找到拖雷&#xff0c;聊了聊大众对数据中台的认知误区、袋鼠云的数据中台“51”方法论以及袋鼠云的生态等&…

陈吉平的Oracle职业生涯:兴趣与思考 成败之所系

陈吉平的Oracle职业生涯&#xff1a;兴趣与思考 成败之所系 出处信息 编者按&#xff1a;这是陈吉平以前在ITPUB论坛上写下的职业生涯总结&#xff0c;随着时间推移&#xff0c;他早已经从技术岗位转向了管理&#xff0c;现在带领团队承担着淘宝无线的开发工作(现在淘宝拆分了&…