Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
itext7 Java未显示特定的字符SURGORATEPEAR字符串_Java_Itext7 - Fatal编程技术网

itext7 Java未显示特定的字符SURGORATEPEAR字符串

itext7 Java未显示特定的字符SURGORATEPEAR字符串,java,itext7,Java,Itext7,我正在使用iText7 7.1.1创建带有代理TEPAIR字符串的表。 当第一个代理TEPAIR字符为“U+2000B”时,它不显示。 对于第二个和后续字符,将显示该字符。 环境:java版本“1.7.0_45”。 import com.itextpdf.kernel.pdf.PdfDocument; 导入com.itextpdf.kernel.pdf.PdfWriter; 导入com.itextpdf.layout.Document; 导入com.itextpdf.layout.element

我正在使用iText7 7.1.1创建带有代理TEPAIR字符串的表。
当第一个代理TEPAIR字符为“U+2000B”时,它不显示。
对于第二个和后续字符,将显示该字符。
环境:java版本“1.7.0_45”。

import com.itextpdf.kernel.pdf.PdfDocument;
导入com.itextpdf.kernel.pdf.PdfWriter;
导入com.itextpdf.layout.Document;
导入com.itextpdf.layout.element.Table;
导入com.itextpdf.layout.element.paragration;
导入com.itextpdf.kernel.font.PdfFont;
导入com.itextpdf.kernel.font.PdfFontFactory;
导入com.itextpdf.io.font.PdfEncodings;
导入java.io.File;
公共类可简化{
公共静态最终字符串DEST=“SimpleTable.pdf”;
公共静态void main(字符串[]args)引发异常{
文件文件=新文件(DEST);
新的SimpleTable().manipulatedfdf(DEST);
}
受保护的无效操作EPDF(字符串目标)引发异常{
PdfDocument pdfDoc=新PdfDocument(新PdfWriter(dest));
单据单据=新单据(pdfDoc);
//UTF-8编码表和Unicode字符
// http://www.utf8-chartable.com/unicode-utf8-table.pl?start=131072&unicodeinhtml=hex&htmlent=1
字节[]bUtf16A={(字节)0xd8,(字节)0x40,(字节)0xdc,(字节)0x0b};//第一个字符串U+2000B
byte[]bUtf16B={(byte)0xd8,(byte)0x69,(byte)0xde,(byte)0xb2};//第二个字符串U+2A6B2
字符串strUtf16A=新字符串(但F16A,“UTF-16”);
字符串strUtf16B=新字符串(但f16b,“UTF-16”);
字符串strUtf16AB=strUtf16A+strUtf16B;
字符串strUtf16BA=strUtf16B+strUtf16A;
//PdfFont font=PdfFontFactory.createFont(“C:/Windows/Fonts/msmincho.ttc,0”,PdfEncodings.IDENTITY_H);
PdfFont font=PdfFontFactory.createFont(“C:/Windows/Fonts/meiryo.ttc,0”,PdfEncodings.IDENTITY_H);
表=新表(4);
对于(int i=0;i<16;i++){
if(i<4){
table.addCell(新段落(strUtf16A).setFont(font.setFontSize(12));//不显示字符串
}否则如果(i<8){
table.addCell(新段落(strUtf16B).setFont(font.setFontSize(12));//显示字符串
}否则如果(i<12){
table.addCell(新段落(strUtf16AB).setFont(font.setFontSize(12));//不显示第一个字符串
}否则{
table.addCell(新段落(strUtf16BA).setFont(font.setFontSize(12));//显示字符串
}
}
单据新增(表);
doc.close();
}
}

这显然是iText中的一个bug。它已经登录到内部缺陷跟踪系统,将在下一个版本中处理

此字符被错误地修剪,这就是为什么它在生成的PDF中丢失的原因

同时,作为一种解决方法,您可以在字符串的开头预先添加一个零宽度的连接字符(
U200d
)。这将解决问题,但请记住,这是一种变通方法,在iText的未来版本中可能不起作用

这条线路的工作原理是:

table.addCell(new Paragraph("\u200d" + strUtf16A).setFont(font).setFontSize(12));

UPD该错误在iText 7.1.2版本中已修复。

感谢您的回答,此问题是一个错误。我将在开头插入一个空格作为回应。
table.addCell(new Paragraph("\u200d" + strUtf16A).setFont(font).setFontSize(12));