Fra*_*sco 7 java pdf pdf-generation pdfbox
我必须用表制作PDF.到目前为止它工作正常,但现在我想添加一个包装功能.所以我需要插入换行符.
contentStream.beginText();
contentStream.moveTextPositionByAmount(x, y);
contentStream.drawString("Some text to insert into a table.");
contentStream.endText();
Run Code Online (Sandbox Code Playgroud)
我想\n在"插入"之前添加一个" ".我尝试了" \u000A"这是换行的十六进制值,但Eclipse向我显示错误.
是否可以使用drawString添加换行符?
Luk*_*kas 13
PDF格式允许换行,但PDFBox没有用于换行的内置功能.
要在PDF中使用换行符,您必须定义要与TL-operator 一起使用的前导.本T*-运算符使一个换行符.本'-运算符写入给定文本到下一行.(有关详细信息,请参阅PDF规范,"文本"一章.不是那么多.)
这是两个代码片段.两者都是相同的,但第一个片段使用',第二个片段使用T*.
private void printMultipleLines(
PDPageContentStream contentStream,
List<String> lines,
float x,
float y) throws IOException {
if (lines.size() == 0) {
return;
}
final int numberOfLines = lines.size();
final float fontHeight = getFontHeight();
contentStream.beginText();
contentStream.appendRawCommands(fontHeight + " TL\n");
contentStream.moveTextPositionByAmount(x, y);
contentStream.drawString(lines.get(0));
for (int i = 1; i < numberOfLines; i++) {
contentStream.appendRawCommands(escapeString(lines.get(i)));
contentStream.appendRawCommands(" \'\n");
}
contentStream.endText();
}
private String escapeString(String text) throws IOException {
try {
COSString string = new COSString(text);
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
string.writePDF(buffer);
return new String(buffer.toByteArray(), "ISO-8859-1");
} catch (UnsupportedEncodingException e) {
// every JVM must know ISO-8859-1
throw new RuntimeException(e);
}
}
Run Code Online (Sandbox Code Playgroud)
用于T*换行:
private void printMultipleLines(
PDPageContentStream contentStream,
List<String> lines,
float x,
float y) throws IOException {
if (lines.size() == 0) {
return;
}
final int numberOfLines = lines.size();
final float fontHeight = getFontHeight();
contentStream.beginText();
contentStream.appendRawCommands(fontHeight + " TL\n");
contentStream.moveTextPositionByAmount( x, y);
for (int i = 0; i < numberOfLines; i++) {
contentStream.drawString(lines.get(i));
if (i < numberOfLines - 1) {
contentStream.appendRawCommands("T*\n");
}
}
contentStream.endText();
}
Run Code Online (Sandbox Code Playgroud)
要获得字体的高度,可以使用以下命令:
fontHeight = font.getFontDescriptor().getFontBoundingBox().getHeight() / 1000 * fontSize;
Run Code Online (Sandbox Code Playgroud)
您可能希望将其乘以某些线间距因子.
pdf格式不知道换行符.您必须使用moveTextPositionByAmount拆分字符串并将文本位置移动到下一行.
这不是一个特殊的"pdfbox-feature",它是由pdf格式定义引起的; 所以没有办法使用drawString,也没有其他方法可以调用支持换行.
| 归档时间: |
|
| 查看次数: |
18670 次 |
| 最近记录: |