整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

Java组件生成PDF文件

Java组件生成PDF文件

ava组件生成PDF文件

前言

最近和一位朋友聊自己微信小程序的事情,朋友的建议将小程序的文章给去掉,增加一个新的功能,他说我写的文章很鸡肋。自己听完之后内心及其犹豫,一方面自己也很清楚自己的文字的功底确实不行,写的技术文章没多少人看,但是一直想这个能锻炼出来。另一方面虽然文章没人看,但是文章的功能是自己一点一点写出来的,让我隐藏起来,我确实有点不想接受。

犹豫几天,还是决定去除这个功能,刚好最近对于后台的重构也在进行,所以决定来一个大的改版(估计需要一段时间才能真正上线新的功能)。

今天的文章,也就是在准备的过程中实现的一个功能-导出PDF。

组件选用

在日常的工作中,利用POI导出Excel的功能需求自己做了不少,但是导出PDF确实是第一次做,在百度上进行一番查阅,发现大家基本都是使用Abode的iText组件来生成PDF

所以这里也随大流,选用iText,官网上iText已经到7了,但是百度搜索的案例中,大多用的都是iText5,这里考虑自己对iText不熟悉,所以还是根据案例也选用5,一方面,入手快有现成的代码可以复制,另一方面用的人多,对于一些常见的坑,填的人也会多,自己就不用一点点摸索了

当然了,如果愿意摸索,可以去官网看案例和API,下面附上官网地址:https://itextpdf.com/en

开发记录

引入依赖文件

		<!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
		<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>itextpdf</artifactId>
			<version>5.5.13</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/com.itextpdf/itext-asian -->
		<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>itext-asian</artifactId>
			<version>5.2.0</version>
		</dependency>

创建Document对象,三种方式:

Document document=new Document(); // 默认页面大小是A4

Document document=new Document(PageSize.A4); // 指定页面大小为A4

Document document=new Document(PageSize.A4,50,50,30,20); // 指定页面大小为A4,且自定义页边距(marginLeft、marginRight、marginTop、marginBottom)

创建PdfWriter对象

第一个参数是对文档对象的引用

第二个参数是需要写入的PDF文件的实际路径。我们也可以使用字节数组流实现。

 //实际文件
 File file=new File("/Users/chenlong/Documents/test.pdf");
 PdfWriter writer=PdfWriter.getInstance(document, new FileOutputStream(file));
 //字节数组流
 ByteArrayOutputStream baos=null;
 baos=new ByteArrayOutputStream();//构建字节输出流
 PdfWriter.getInstance(doc,baos);//将PDF文档对象写入到流

Write对象创建完的操作

首先打开documet(这个过程就像我们创建一个空的pdf文件,然后打开来创作一样)

然后开始写入数据

设置文档属性

最后关闭

 document.open();
 document.addTitle("标题");
 document.addAuthor("每天学Java");
 document.addSubject("测试报表");
 document.addKeywords("关键字");
 document.addCreator("陈龙");
 new PDFUtil().generatePDF(document, reportVO);
 document.close();

而generatePDF方法是自定义的方法,对于文档内容的填充。

通常我们会用到的内容内容类有:

段落Paragraph
表格table
单元格内容样式cell 
直线 LineSeparator
点线 DottedLineSeparator
超链接 Anchor
添加图片 Image
定位 Anchor
水印功能
Watermark内部类,需要继承 PdfPageEventHelper类
writer.setPageEvent(new Watermark());

里面的详细属性这里就不在说了,我们只看简单的段落

 //字体大小,粗细,颜色
 Font titlefont=new Font(bfChinese, 16, Font.BOLD,, BaseColor.RED);
 //段落
 Paragraph paragraph=new Paragraph("测试报表", titlefont);
 //段落属性
 paragraph.setAlignment(1); //设置文字居中 0靠左 1,居中 2,靠右
 paragraph.setIndentationLeft(100); //设置左缩进
 paragraph.setIndentationRight(100); //设置右缩进
 paragraph.setFirstLineIndent(24); //设置首行缩进
 paragraph.setLeading(40f); //行间距
 paragraph.setSpacingBefore(5f); //设置段落上空白
 paragraph.setSpacingAfter(10f); //设置段落下空白
 //分割线
 Paragraph p1=new Paragraph();
 p1.add(new Chunk(new LineSeparator()));
 //如果需要换行
 paragraph.add(Chunk.NEWLINE);
 //定义一个块,块之间的换行也可以使用Chunk.NEWLINE
 Chunk chunk=new Chunk("我是一个文本块");
 chunk.setFont(problems);
 chunk.setWordSpacing(50);
 paragraph.add(chunk);
 
 //需要将段落增加到document中
 document.add(paragraph);
 document.add(p1);

实现过程参考文章:

https://blog.csdn.net/weixin_37848710/article/details/89522862

关于小程序:

之前朋友问我,指望这个挣钱吗?我也好好的问了自己,如实回答,自己毕业一年多了,小程序也一年多了,我确实希望它通过广告费啥的挣到钱,但是如果没有广告,我觉得还是会去做,因为到了这个阶段,每一次代码的改动和架构的调整,需要我付出学习和思考的时间,而这能让我拿到现阶段我工作中所得不到知识。

今,搜索已经渗透到人们生活的各个领域,有效结合用户真实需求的搜索也为企业的成长开辟了更广阔的天地。

9月20日,2023海量引擎搜索广告营销大会正式召开,主题为“搜索未来,抓住机遇”。围绕电商、本地、线索、下载四大场景的业务需求,解读了一场规模宏大的搜索广告营销大会。搜索引擎营销的产品特性和行业解决方案帮助商家进行新的战略搜索。



01 搜索流量快速增长,不容错过的新战略机遇

抖音,搜索已成为连接用户和信息的重要枢纽。据巨引擎平台2023年数据显示,三年内抖音搜索次数增长了三倍以上,90%以上的用户已经建立或初步养成了搜索习惯。目前,抖音搜索结果覆盖200多个内容类别,不仅涵盖影视等用户感兴趣的生活内容,还涵盖教育、游戏、汽车等商业价值较高的类别。

抖音丰富的内容生态系统准确接收并放大用户搜索流量。 短视频中的“相关搜索”、搜索栏下的“猜你想搜什么”、评论互动场景中的热门词等都成为用户的重要场景。随着抖音“启发式搜索”不断侵入用户的生活,用户已经养成了深刻的搜索习惯,从搜索内容到搜索产品和服务。

随着流量的不断增长和用户习惯的不断培养,搜索可以在电子商务、本地商务、线索和下载等各种业务场景中为商家带来显着的增长。



为了进一步帮助商户抓住搜索机遇,聚居引擎还加大流量投入,为行业提供专业支持,构建人才培养体系,提升综合服务能力,为商户开拓搜索新蓝海。



02 更新全场景产品特性,推动业务增长

如今,大量用户每天都会搜索后购买产品、购买团购、预约咨询、下载和使用产品。巨引擎还不断优化产品营销能力,适应四大主要场景,帮助商家利用搜索驱动确定性增长。



网店搜索:从初创到运营,一站式服务伴随成长

过去一年,日均电子商务搜索量增长了 93%,其中电子商务搜索是增长的关键中心。海量搜索引擎广告帮助商家实现从创业到运营的全面成长。



初期,商家可通过“新客无忧投放”享受搜索流量支持和长达7天免订单补偿等双重激励,并快速测试产品,加快订单转化。在运营阶段,商家可以利用“产品卡”触达大群潜在客户,提高投放后CVR和CTR。利用“蓝海产品推荐”寻找搜索量高、供应量少、竞争少的定制产品,以更低的出价获得更多。多种交通选择;利用“新品加速”快速度过冷启动阶段,实现新品突破。

在长期运营阶段,交易者可以通过“巨云图”获得全阶段策略指导,利用“抖音电商指南针”理清业务,科学高效地实现确定性增长。

本地搜索:生活服务综合链接,选品促转化

去年,抖音生活服务相关搜索流量突破百亿。截至去年底,抖音门店数量超过200万家,GMV翻倍增长。 Judo Engine的本地搜索产品也不断更新,为商家提供创新的解决方案。

本地团购卡是优化拓展团购综合搜索和垂直搜索多渠道入口,精准拓展本地流量的卡之一。暑期旅游旺季,长隆欢乐世界利用当地团购卡推广产品,仅一周团购订单GMV就突破百万。下季度,聚道引擎将推出团购卡直投产品。商家可以直接在App和PC上投放团购卡广告,并通过App长期进行推广,实现店内客流稳定。



团购+直播+产品专业化的结合,还可以让搜索GMV速度翻倍:团购利润分成配合产品专业化流量管理,及时吸引高意愿群体进入品牌私域,配合直播推广转换。数据显示,在团购+流媒体+产品专业化的加持下,商家每千次搜索的GMV增长了46%。



引领下载搜索:全程启动再升级,打破瓶盖有效吸引客户

除了帮助商家在商圈获得好生意,聚道引擎还更新了营销领域的搜索广告,对商家进行广告全程跟踪,有效提升获客效率和效果。



流量供给方面,“蓝海流量宝藏”即将发布。通过蓝海关键词推荐,帮助广告主寻找蓝海流量机会,提高流量效率。

内容类型中加入原创图文样式,降低广告主创意输出门槛,提高投放效率。同时,一张适应引导和下载行业的“聚合卡”可以帮助广告主提高获客效率。测试数据显示,组合卡可有效帮助搜索渠道下载量提升137%,点击转化量提升15%。

在商业投放方面,巨引擎将不断完善与广告相关的产品或服务信息,帮助广告主提高广告竞争力,收集精准流量提高转化效率。此外,广告主还可以利用7天周期内的“周期性稳定投入”,解决运费波动较大等问题,实现智能投放和优化。


03 行业解决方案更新,助力商户突围

强有力的支持和优质的产品是重要的激励,但商家要想真正做好生意,还需要适应行业特点的精准博弈。

全链路深度管理,实现线索转化,提质增效

以营销为主导的行业为例,受决策周期长、转化路径复杂等行业特点影响,提升线索效率和转化效率是营销人员普遍面临的问题。

针对精准流量的搜索广告不仅能有效渗透潜在客群、利用有机流量和商业流量,还能帮助商家打通完美的线索收集和转化环节。

汽车品牌别克就是通过搜索挖掘新增长点的典型案例之一。别克加强搜索产品投放,触达现有A3人群,同时获取新流量。使用搜索出价和搜索后登陆页面,别克在发布后 7 天内实现了日均搜索量、搜索购买转化率和搜索量的 84% 增长。交易比例分别增加了15%和20%。 % 分别。



内容广告双管齐下,下载行业迎来长期增长

充电行业已经经历了广泛的收购阶段。要实现用户增长和付费增长,商家需要做好内容布局和广告宣传。搜索可以捕获受多种类型内容启发的用户兴趣并缩短下载链接。同时,通过搜索广告投放,商家可以不断引入新用户,激活现有用户,实现注册、下载、支付等多级转化目标。

比如《万国觉醒》这款游戏,通过内容建设和搜索广告的战略配合,突破了新增获客和现有用户费用的转化两大瓶颈。在内容方面,我们为顶级专家的热门种草视频添加了较低的搜索词。投放方面,我们根据用户历史关键词优化关键词包,灵活适配内容素材,强化智能选择和拓展流量的能力。最后,投资后,日均搜索量增加了 44%,搜索消耗量增加了 26%,激活成本下降了 20%。



流量支撑+商业基础设施,搜索助力线上零售商确定性增长

从电商的角度来看,通过搜索连接内容店和货架店,构建短链播种和收获环节尤为重要。数据显示,采购用户的购买意愿、转化率、复购率、平均获客成本、直接投资回报率均高于其他渠道。

同时,搜索不仅为商家提供流量支撑,也是电商商家重要的运营基础设施。商家不仅可以通过站内场外种草来拓宽搜索范围,了解流量机会,利用补品来吸引更多意向群体。他们还可以结合用户搜索意图,有针对性地优化标题和产品,以提高可见性和转化机会。



潘婷通过电商搜索开通两个有流量的域名,实现了滚雪球般的业务增长。潘婷利用云图的大量关键词洞察,确认了短期、双倍行距的搜索产品卡和强大的品类关键词的核心布局方向。借力内容场流量,专家种植、短直双开,利用同一个产品链接+不同运价组,灵活投放搜索产品卡,带动自然流量,覆盖高意向人群,实现产品GMV和自然月度增长139%交通。实现了110%的增长。

适应本地业务场景,加速突破业务边界

从当地行业来看,抖音POI对用户兴趣的分布已经成为新的增长引擎。在新产品/新客户/新商店等情况下,营销人员可以利用品牌和星图专家来加快众包速度,并与搜索引擎合作来推动转化。在节点的促销场景中,商户可以搜索有团购的产品,并促进有效转化,团购卡。在销售旺季,商家可以使用团购卡,节省大量投资,扩大当地目的地客流量。



为实现经营效率的整体提升,东方盐湖城采用团购专家+短视频+直播深耕提高用户兴趣,配合团购搜索产品+团购卡加速团购活动。购买转化。最终,日均广告GMV增长120%。 ,日均 1,000 次搜索的 GMV 环比增长 100%。

总结

品牌正在库存时代寻找机会,而搜索现在就是一个机会。这已成为各行业贸易商的共识。蔚来作为新势力汽车品牌,大力涉足搜索产品等核心产品来传达品牌形象。全面涉足搜索的同程出行,与Deeplink等创新公司共同推动搜索的未来价值。越来越多的品牌正在竭尽全力抓住新的战略搜索机会。

聚道引擎持续整合平台资源,更新搜索营销产品和服务,帮助更多商家抓住搜索商机,激发营销新未来!

搜索抖音主题#everything,找到海量搜索引擎搜索更多精彩分享和解读。


仅在头条号发布,其他平台均为搬运


图片来源于网络,侵删。


原创不易,欢迎转发!


对此你有什么看法?欢迎在评论区留言评论!

ava组件生成PDF文件

前言

最近和一位朋友聊自己微信小程序的事情,朋友的建议将小程序的文章给去掉,增加一个新的功能,他说我写的文章很鸡肋。自己听完之后内心及其犹豫,一方面自己也很清楚自己的文字的功底确实不行,写的技术文章没多少人看,但是一直想这个能锻炼出来。另一方面虽然文章没人看,但是文章的功能是自己一点一点写出来的,让我隐藏起来,我确实有点不想接受。

犹豫几天,还是决定去除这个功能,刚好最近对于后台的重构也在进行,所以决定来一个大的改版(估计需要一段时间才能真正上线新的功能)。

今天的文章,也就是在准备的过程中实现的一个功能-导出PDF。

组件选用

在日常的工作中,利用POI导出Excel的功能需求自己做了不少,但是导出PDF确实是第一次做,在百度上进行一番查阅,发现大家基本都是使用Abode的iText组件来生成PDF

所以这里也随大流,选用iText,官网上iText已经到7了,但是百度搜索的案例中,大多用的都是iText5,这里考虑自己对iText不熟悉,所以还是根据案例也选用5,一方面,入手快有现成的代码可以复制,另一方面用的人多,对于一些常见的坑,填的人也会多,自己就不用一点点摸索了

当然了,如果愿意摸索,可以去官网看案例和API,下面附上官网地址:https://itextpdf.com/en

开发记录

引入依赖文件

		<!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
		<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>itextpdf</artifactId>
			<version>5.5.13</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/com.itextpdf/itext-asian -->
		<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>itext-asian</artifactId>
			<version>5.2.0</version>
		</dependency>

创建Document对象,三种方式:

Document document=new Document(); // 默认页面大小是A4

Document document=new Document(PageSize.A4); // 指定页面大小为A4

Document document=new Document(PageSize.A4,50,50,30,20); // 指定页面大小为A4,且自定义页边距(marginLeft、marginRight、marginTop、marginBottom)

创建PdfWriter对象

第一个参数是对文档对象的引用

第二个参数是需要写入的PDF文件的实际路径。我们也可以使用字节数组流实现。

 //实际文件
 File file=new File("/Users/chenlong/Documents/test.pdf");
 PdfWriter writer=PdfWriter.getInstance(document, new FileOutputStream(file));
 //字节数组流
 ByteArrayOutputStream baos=null;
 baos=new ByteArrayOutputStream();//构建字节输出流
 PdfWriter.getInstance(doc,baos);//将PDF文档对象写入到流

Write对象创建完的操作

首先打开documet(这个过程就像我们创建一个空的pdf文件,然后打开来创作一样)

然后开始写入数据

设置文档属性

最后关闭

 document.open();
 document.addTitle("标题");
 document.addAuthor("每天学Java");
 document.addSubject("测试报表");
 document.addKeywords("关键字");
 document.addCreator("陈龙");
 new PDFUtil().generatePDF(document, reportVO);
 document.close();

而generatePDF方法是自定义的方法,对于文档内容的填充。

通常我们会用到的内容内容类有:

段落Paragraph
表格table
单元格内容样式cell 
直线 LineSeparator
点线 DottedLineSeparator
超链接 Anchor
添加图片 Image
定位 Anchor
水印功能
Watermark内部类,需要继承 PdfPageEventHelper类
writer.setPageEvent(new Watermark());

里面的详细属性这里就不在说了,我们只看简单的段落

 //字体大小,粗细,颜色
 Font titlefont=new Font(bfChinese, 16, Font.BOLD,, BaseColor.RED);
 //段落
 Paragraph paragraph=new Paragraph("测试报表", titlefont);
 //段落属性
 paragraph.setAlignment(1); //设置文字居中 0靠左 1,居中 2,靠右
 paragraph.setIndentationLeft(100); //设置左缩进
 paragraph.setIndentationRight(100); //设置右缩进
 paragraph.setFirstLineIndent(24); //设置首行缩进
 paragraph.setLeading(40f); //行间距
 paragraph.setSpacingBefore(5f); //设置段落上空白
 paragraph.setSpacingAfter(10f); //设置段落下空白
 //分割线
 Paragraph p1=new Paragraph();
 p1.add(new Chunk(new LineSeparator()));
 //如果需要换行
 paragraph.add(Chunk.NEWLINE);
 //定义一个块,块之间的换行也可以使用Chunk.NEWLINE
 Chunk chunk=new Chunk("我是一个文本块");
 chunk.setFont(problems);
 chunk.setWordSpacing(50);
 paragraph.add(chunk);
 
 //需要将段落增加到document中
 document.add(paragraph);
 document.add(p1);

实现过程参考文章:

https://blog.csdn.net/weixin_37848710/article/details/89522862

关于小程序:

之前朋友问我,指望这个挣钱吗?我也好好的问了自己,如实回答,自己毕业一年多了,小程序也一年多了,我确实希望它通过广告费啥的挣到钱,但是如果没有广告,我觉得还是会去做,因为到了这个阶段,每一次代码的改动和架构的调整,需要我付出学习和思考的时间,而这能让我拿到现阶段我工作中所得不到知识。