JAVA生成PDF标点符号不换行_iText生成中文PDF行首标点处理
发布日期:2021-10-30 21:00:37 浏览次数:1 分类:技术文章

本文共 1699 字,大约阅读时间需要 5 分钟。

我用的是iText-5.5.10,版本差别不是很大的话,应该都可以这么修改

最近在使用iText生成PDF时,遇到了行首标点问题,可是找了半天,也没找到一个明确的可行解决方案,后来找到一个看着比较靠谱的,http://bbs.csdn.net/topics/380075439,也说的模模糊糊的,试了也没好使,不过也提供了一个思路。

下面直接上干货

下载iText源码,改源码是最直接有效的

解压后将itext子项目导入开发工具中,待会改完后还要重新打包的

添加一个中文标点数据类 package com.itextpdf.text.pdf;

import java.util.ArrayList;

import java.util.List;

/**

* Created by Administrator on 2017/6/16.

*/

public class ChineseSymbolSplit {

public static List chSymSplits;

static {

chSymSplits = new ArrayList();

chSymSplits.add(',');

chSymSplits.add('、');

chSymSplits.add('。');

chSymSplits.add(':');

chSymSplits.add('!');

chSymSplits.add(';');

chSymSplits.add('?');

/** 添加你所需的标点 ***/

}

}

找到类com.itextpdf.text.pdf.PdfChunk的split(float width)方法中修改 if (character == ' ') {

lastSpace = currentPosition + 1;

lastSpaceWidth = currentWidth;

} 为 if (character == ' ' || ChineseSymbolSplit.chSymSplits.contains(character)) {

lastSpace = currentPosition + 1;

lastSpaceWidth = currentWidth;

}

大概在367行和402行(不同版本,可能会有点差别)

到这,内容中的行首中文标点只调整好了一半,下面图1这种情况已经Ok了,但图2还不行

4b4ed544b011c78708b84ca3f776c4b4.png图1

9ed462b8b0f20b8b263fe6da165f8e3e.png图2

接着来,找到com.itextpdf.text.pdf.BidiLine中trimRightEx(int startIdx, int endIdx)方法,在"return idx;"前添加 //当下一个元素是标点时,前移一位

if(ChineseSymbolSplit.chSymSplits.contains(text[idx + 1]) && idx > 0){

idx--;

}

找到trimLeftEx(int startIdx, int endIdx)方法前,在"return idx;"前添加 //当前元素是标点时,前移一位

if(ChineseSymbolSplit.chSymSplits.contains(text[idx]) && idx > 0){

idx--;

}

(备注:这里的修改我使用的是将上一行的最后一个字挪下来的方式)

到这,修改就完了,将项目重新打包,引入到你的项目中,再试下生成的PDF效果

ef452dfe7b014ee8aba65e41df983700.png

补充:

到了实际应用时,出现了一种空行的问题,如下图

c36ddadda568ca4b039dca1ba833727c.png

所以再添加一点改进,解决这个问题

找到com.itextpdf.text.pdf.PdfLine文件中的add(PdfChunk chunk)方法

在“newlineSplit = chunk.isNewlineSplit() || overflow == null;”前添加如下代码

if(overflow != null && overflow.value.trim().length() == 0){

overflow = null;

}

再试下,看是不是搞定了呢

06ca168fd2069f1610ed478bc681290b.png

转载地址:https://blog.csdn.net/weixin_39861823/article/details/114954551 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:centos php 错误日志,centos上apache错误日志在哪
下一篇:java游戏开发推荐笔记本_你好,我想请问下,我现在想配置一个华硕的笔记本,主要是做java开发使用的,有时会玩大型3D游戏...

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年03月30日 22时49分07秒