- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用iText 7和Java生成PDF无法换行长英文单词。
当单元格中有长单词时,该单词不会在单元格内换行,而是会增长,并且 PDF 中会丢失表格内容。不知道如何将长单词包装在单元格中。
我使用 iText 7 生成 PDF。
这是我的 Java 文件:
package com.sid.pdf;
import java.io.File;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.property.Property;
import com.itextpdf.layout.splitting.DefaultSplitCharacters;
public class TestTable {
public static void main(String[] args) throws Exception
{
public static final String DEST = "C:\\test.pdf";
File file = new File(DEST);
file.getParentFile().mkdirs();
new TestTable().manipulatePdf(DEST);
System.out.println("PDF generated....");
}
protected void manipulatePdf(String dest) throws Exception {
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));
Document doc = new Document(pdfDoc);
Table table = new Table(3);
float tableWidth = doc.getPdfDocument().getDefaultPageSize().getWidth()
- (doc.getLeftMargin() + doc.getRightMargin());
table.setWidth(tableWidth);
Cell cell1 = new Cell();
Paragraph p = new Paragraph("1");
p.setProperty(Property.SPLIT_CHARACTERS, new DefaultSplitCharacters());
cell1.add(p);
table.addCell(cell1);
Cell cell2 = new Cell();
Paragraph p2 = new Paragraph("CamLane_Disp_Warn_Rq_Pr2_e0h2tjvjx5d9y5cbvxqsnhwa7");
p2.setProperty(Property.SPLIT_CHARACTERS, new DefaultSplitCharacters());
cell2.add(p2);
table.addCell(cell2);
Cell cell3 = new Cell();
Paragraph p3 = new Paragraph("CamLane_Disp_Warn_Rq_AR2");
p3.setProperty(Property.SPLIT_CHARACTERS, new DefaultSplitCharacters());
cell3.add(p3);
table.addCell(cell3);
Cell cell4 = new Cell();
Paragraph p4 = new Paragraph("SQC/CRC");
p4.setProperty(Property.SPLIT_CHARACTERS, new DefaultSplitCharacters());
cell4.add(p4);
table.addCell(cell4);
Cell cell5 = new Cell();
Paragraph p5 = new Paragraph("SPV_EngRq1_VAN_Pr2_vx0c4n6d46wgrav5gmco6bvc");
p5.setProperty(Property.SPLIT_CHARACTERS, new DefaultSplitCharacters());
cell5.add(p5);
table.addCell(cell5);
Cell cell6 = new Cell();
Paragraph p6 = new Paragraph("Bckl_Sw_Ft_Stat_Pr2_b14xqvpzjykdbhltdyma53upe");
p6.setProperty(Property.SPLIT_CHARACTERS, new DefaultSplitCharacters());
cell6.add(p6);
table.addCell(cell6);
doc.add(table);
doc.close();
}
}
最佳答案
默认分割策略是查找空格字符和文本通常分割的其他字符(例如连字符 -
)。在你的情况下,单词没有这样的字符。通过定义 SPLIT_CHARACTERS
属性,您已经在自定义文本分割字符方面迈出了半步,但缺少的部分是自定义 ISplitCharacters
实现。还允许下划线 (_
) 作为分割字符的示例实现:
private static class CustomSplitCharacters extends DefaultSplitCharacters {
@Override
public boolean isSplitCharacter(GlyphLine text, int glyphPos) {
if (!text.get(glyphPos).hasValidUnicode()) {
return false;
}
boolean baseResult = super.isSplitCharacter(text, glyphPos);
boolean myResult = false;
Glyph glyph = text.get(glyphPos);
if (glyph.getUnicode() == '_') {
myResult = true;
}
return myResult || baseResult;
}
}
要启用它,只需将新实例而不是默认实例设置为 SPLIT_CHARACTERS
属性即可:
p6.setProperty(Property.SPLIT_CHARACTERS, new CustomSplitCharacters());
视觉效果:
关于java - 使用iText 7和Java生成pdf无法换行长英文单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61431370/
我写了一个脚本,它在二进制文件和脚本文件中存储数字签名。这个问题仅与脚本有关:目前,所有这些签名都存储在一行(注释)中,例如: #!/usr/bin/perl print "Hello" print
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
这个问题在这里已经有了答案: Applying an ellipsis to multiline text [duplicate] (23 个回答) 关闭 7 年前。
我使用 Visual Studio Code 已有一段时间了。从昨天开始,代码格式没有像我预期的那样工作,但我没有更改任何配置。 这是没有格式化的文件 格式化后: 这些是我修改的设置 我可以做些什么来
我是一名优秀的程序员,十分优秀!