<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[P_CLiang的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/P_CLiang</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; P_CLiang]]></copyright><item><title><![CDATA[Java 利用pdfbox根据PDF画布大小动态转为图片]]></title><link>https://blog.csdn.net/P_CLiang/article/details/136815091</link><guid>https://blog.csdn.net/P_CLiang/article/details/136815091</guid><author>P_CLiang</author><pubDate>Mon, 18 Mar 2024 17:19:57 +0800</pubDate><description><![CDATA[根据PDF每页的宽高动态创建画布来生成一张长图。]]></description><category></category></item><item><title><![CDATA[Java做打印服务打印A4]]></title><link>https://blog.csdn.net/P_CLiang/article/details/122453619</link><guid>https://blog.csdn.net/P_CLiang/article/details/122453619</guid><author>P_CLiang</author><pubDate>Wed, 12 Jan 2022 15:14:46 +0800</pubDate><description><![CDATA[利用JAVA 的几种方法来打印A4纸

每篇一句励志：没有伞的孩子必须努力奔跑！

第一种：Socket直连
/**
* ip 打印机IP
* port 端口，一般默认是9100
* filePath 要打印的文件路径
*/
public static boolean print(String ip,Integer port,String filePath){
        log.info("IP:{},PORT:{}",ip,port);
        try {
            File ]]></description><category></category></item><item><title><![CDATA[Excel填充数据并下载]]></title><link>https://blog.csdn.net/P_CLiang/article/details/121516691</link><guid>https://blog.csdn.net/P_CLiang/article/details/121516691</guid><author>P_CLiang</author><pubDate>Wed, 24 Nov 2021 15:29:49 +0800</pubDate><description><![CDATA[public void exportMsgList(String companyCode, String companyName, String planTime, Integer type, HttpServletResponse response) {
        try {
            //这是使用SQLSERVER数据库；拼接sql
            StringBuffer sb = new StringBuffer();
            sb.append("se.]]></description><category></category></item><item><title><![CDATA[Compare对比器自定义排序]]></title><link>https://blog.csdn.net/P_CLiang/article/details/119113639</link><guid>https://blog.csdn.net/P_CLiang/article/details/119113639</guid><author>P_CLiang</author><pubDate>Mon, 26 Jul 2021 17:21:50 +0800</pubDate><description><![CDATA[Compare对比器排序

每篇一句励志：在你有一肚子火要发之前，先给自己10分钟沉思一会儿。

项目里要按华北、华东、华南、华中四个区域排序。
用SQL排序可以写在 order by后边直接排，也可以放在SELECT里当返回字段排。
order by 排序：
order by case AREA_NAME when '华北' then 1 when '华东' then 2 when '华南' then 3 when '华中' then 4 end

SELECT 中当字段排序：
SELECT case A]]></description><category></category></item><item><title><![CDATA[Java-对比俩个对象相同属性不同值的字段]]></title><link>https://blog.csdn.net/P_CLiang/article/details/118609606</link><guid>https://blog.csdn.net/P_CLiang/article/details/118609606</guid><author>P_CLiang</author><pubDate>Fri, 09 Jul 2021 16:47:52 +0800</pubDate><description><![CDATA[对比俩个对象相同字段修改前后值的变化

最近做一个系统，系统要求是记录某个人修改的某个字段及这个字段修改前与修改后的数据等一些信息。

工具类不用改，拿走直接用即可。只需改变你的业务代码。
对比工具类：
/**
* 对比俩个对象相同字段修改前后值的变化 --工具类
* @param obj1 修改前的对象
* @param obj2 修改后的对象
* @param ignoreArr
* @return
*/
public static Map&lt;String, List&lt;Object&gt;&g]]></description><category></category></item><item><title><![CDATA[poi自定义单元格背景色]]></title><link>https://blog.csdn.net/P_CLiang/article/details/117443031</link><guid>https://blog.csdn.net/P_CLiang/article/details/117443031</guid><author>P_CLiang</author><pubDate>Tue, 01 Jun 2021 14:55:53 +0800</pubDate><description><![CDATA[XSSFCellStyle 自定义单元格背景颜色
此代码可用于2007（xlsx）之后的版本使用。
XSSFWorkbook wb = new XSSFWorkbook();//此行代码可以忽略
	XSSFCellStyle style = wb.createCellStyle();//创建一个单元格style
	XSSFColor color = new XSSFColor(new java.awt.Color(198,217,240),new DefaultIndexedColorMap()); //n]]></description><category></category></item><item><title><![CDATA[stream() 进行分组 排序以及Optional转换]]></title><link>https://blog.csdn.net/P_CLiang/article/details/116989419</link><guid>https://blog.csdn.net/P_CLiang/article/details/116989419</guid><author>P_CLiang</author><pubDate>Tue, 18 May 2021 14:59:49 +0800</pubDate><description><![CDATA[stream() 进行分组 排序以及Optional转换

stream()分组、排序

Set&lt;Map.Entry&lt;String, Optional&lt;Company&gt;&gt;&gt; entries = resultList.stream().
filter(t -&gt; StringUtils.isNotBlank(t.getExamineId())).
collect(Collectors.groupingBy(Company::getAppId, Collectors.ma]]></description><category></category></item><item><title><![CDATA[poi操作excel之删除模版的合并行]]></title><link>https://blog.csdn.net/P_CLiang/article/details/116603180</link><guid>https://blog.csdn.net/P_CLiang/article/details/116603180</guid><author>P_CLiang</author><pubDate>Mon, 10 May 2021 17:47:59 +0800</pubDate><description><![CDATA[poi操作excel之删除模版的合并行
如果在模版中有合并行，使用 sheet.shiftRows(开始行,结束行,移动行数); 删除行的话会报错。所以有了以下代码。得先删除原有的行合并才能做删除移动。
// 参数1:sheet、参数2:开始行、参数3:开始列
public static void removeMergedRegion(Sheet sheet, int row , int column)
    {
        int sheetMergeCount = sheet.getNumMerg]]></description><category></category></item><item><title><![CDATA[poi操作excel之列合并]]></title><link>https://blog.csdn.net/P_CLiang/article/details/116603084</link><guid>https://blog.csdn.net/P_CLiang/article/details/116603084</guid><author>P_CLiang</author><pubDate>Mon, 10 May 2021 17:42:13 +0800</pubDate><description><![CDATA[poi操作excel之列合并
// 此代码只支持多列合并
// 参数1:sheet、参数2：要合并的列
public static XSSFSheet cellMergedRegion(XSSFSheet sheet, Integer... cellIndex) {
    boolean isRange=false;
    for (int cidx = 0; cidx &lt; cellIndex.length; cidx++) {
        String ls = null;
        ]]></description><category></category></item><item><title><![CDATA[Java 根据俩个时间拆分成以月为单位的时间段]]></title><link>https://blog.csdn.net/P_CLiang/article/details/116457497</link><guid>https://blog.csdn.net/P_CLiang/article/details/116457497</guid><author>P_CLiang</author><pubDate>Thu, 06 May 2021 16:57:32 +0800</pubDate><description><![CDATA[根据俩个时间拆分成以月为单位的时间段
使用CV大法把代码拿过去直接就可以使用。
/**
* 传入俩个时间计算期间包含几个开始日期到结束日期
 * @param begin
 * @param end
 * @return
 */
public static String getDateInterval(Date begin, Date end) {
// 开始日期不能大于结束日期
    if (!begin.before(end)) {
        return null;
    }
    Cal]]></description><category></category></item><item><title><![CDATA[poi操作excel之填充数据、删除行]]></title><link>https://blog.csdn.net/P_CLiang/article/details/116457138</link><guid>https://blog.csdn.net/P_CLiang/article/details/116457138</guid><author>P_CLiang</author><pubDate>Thu, 06 May 2021 16:38:41 +0800</pubDate><description><![CDATA[poi操作excel之填充数据、删除行
废话不多说，直接上代码！
// 获取到你要填充数据的sheet
XSSFSheet sheet = wb.getSheet("sheet名称");

// 定义填充数据的开始行
int rowNum = 6;

//开始循环填充数据
for (TCompanyOverhaul tCompanyOverhaul : collect) {
//复制模板行
// 第一个参数：模版行开始行
// 第二个参数：模版行结束行
// 第三个参数：复制至某行
// 第四个参数：暂没用]]></description><category></category></item><item><title><![CDATA[JAVA之发送短信验证码]]></title><link>https://blog.csdn.net/P_CLiang/article/details/108615127</link><guid>https://blog.csdn.net/P_CLiang/article/details/108615127</guid><author>P_CLiang</author><pubDate>Wed, 16 Sep 2020 09:57:10 +0800</pubDate><description><![CDATA[Java 发送短信验证码一、发送短信的基础配置二、代码实现
一、发送短信的基础配置
sms.domain = ‘写你购买短信的API’
sms.version = ‘版本信息或者直接写个时间’
sms.action = SendSms
sms.regionid = ‘地区’
sms.signname = ‘短信签名’
sms.templatecode = ‘短信模板code’

二、代码实现
	@Value("${sms.domain}")
    private String domain;

    @]]></description><category></category></item><item><title><![CDATA[java —— 实体类中按时间排序]]></title><link>https://blog.csdn.net/P_CLiang/article/details/108284216</link><guid>https://blog.csdn.net/P_CLiang/article/details/108284216</guid><author>P_CLiang</author><pubDate>Fri, 28 Aug 2020 17:55:37 +0800</pubDate><description><![CDATA[java-实体类中按时间排序

首先实体类实现以下Comparable接口；
重写以下compareTo方法；
生成一个有参构造，以便于业务代码传入参数（看自己实际情况写）；
此时只要在需要排序的代码中加入Collections.sort(list) 即可；

public class PublicWelfareDTO implements Comparable&lt;PublicWelfareDTO&gt;{

    @JsonFormat(pattern="yyyy-MM-dd")
    priva]]></description><category></category></item><item><title><![CDATA[git 从拉取到合并——简版]]></title><link>https://blog.csdn.net/P_CLiang/article/details/107110624</link><guid>https://blog.csdn.net/P_CLiang/article/details/107110624</guid><author>P_CLiang</author><pubDate>Fri, 03 Jul 2020 18:32:45 +0800</pubDate><description><![CDATA[git 从拉取到合并——简版
一、git clone


直接拉取

git clone https://gitlab.xxxx.git



拉取dev分支

git clone https://gitlab.xxxx.git  -b dev



二、 git commit


修改README.md 提交

git add README.md



提交到本地仓库

git commit -m ‘提交备注’



推到远程

git push origin dev



三、git merge


修]]></description><category></category></item><item><title><![CDATA[spring boots中使用swagger-bootstrap-ui]]></title><link>https://blog.csdn.net/P_CLiang/article/details/100580472</link><guid>https://blog.csdn.net/P_CLiang/article/details/100580472</guid><author>P_CLiang</author><pubDate>Fri, 06 Sep 2019 16:20:30 +0800</pubDate><description><![CDATA[本人因公司项目需求所以查阅前辈资料得出此心得，如有不对请大佬指出，我加以改正。
简介
swagger-bootstrap-ui是springfox-swagger的增强UI实现，为Java开发者在使用Swagger的时候，能拥有一份简洁、强大的接口文档体验。
核心功能
文档说明：根据Swagger的规范说明，详细列出接口文档的说明，包括接口地址、类型、请求示例、请求参数、响应示例、响应参数、响应...]]></description><category></category></item><item><title><![CDATA[java开发重置密码发送邮件]]></title><link>https://blog.csdn.net/P_CLiang/article/details/96282475</link><guid>https://blog.csdn.net/P_CLiang/article/details/96282475</guid><author>P_CLiang</author><pubDate>Wed, 17 Jul 2019 10:41:37 +0800</pubDate><description><![CDATA[java开发重置密码发送邮件
直接上代码

pom.xml

&lt;!--mail--&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;javax.mail&lt;/groupId&gt;
            &lt;artifactId&gt;mail&lt;/artifactId&gt;
            &lt;...]]></description><category></category></item></channel></rss>