如何使用数据库中的Java在Itext Pdf报表上打印印地语文本?
在我的JavaFX项目中,我正在使用itext Library生成pdf。现在我想从报告中的数据库打印印地语、旁遮普语文本,我该怎么做。然而,IText库不能识别印地语和旁遮普语unicode??? 这是我的密码如何使用数据库中的Java在Itext Pdf报表上打印印地语文本?,java,unicode,printing,javafx-2,itext,Java,Unicode,Printing,Javafx 2,Itext,在我的JavaFX项目中,我正在使用itext Library生成pdf。现在我想从报告中的数据库打印印地语、旁遮普语文本,我该怎么做。然而,IText库不能识别印地语和旁遮普语unicode??? 这是我的密码 out = new ByteArrayOutputStream(); try { // initialize document with page size and margins document = new Docum
out = new ByteArrayOutputStream();
try {
// initialize document with page size and margins
document = new Document(PageSize.A4, 60, 40, 60, 60);
this.setAlignmentOfCompanyInfo(Common.comp
.getReportsHeaderAlignment());
writer = PdfWriter.getInstance(document, out);
writer.setPageEvent(new PageEventForAddressBookReport());
document.open();PdfContentByte cb = writer.getDirectContent();
PdfTemplate tp = cb.createTemplate(w, h);
@SuppressWarnings("deprecation")
Graphics2D g2 = tp.createGraphicsShapes(w, h);
g2.drawString("वर्तमान शेष", 200, 100);
g2.dispose();
g2.setColor(Color.GREEN);
cb.addTemplate(tp, 50, 400);
BufferedImage bi = new BufferedImage(100, 20, BufferedImage.TYPE_INT_ARGB);
Graphics2D ig2 = bi.createGraphics();
ImageIO.write(bi, "PNG", new File("ourImageName.PNG"));
Image image = Image.getInstance(tp);
document.add(new Chunk(image,5,5));
document.close();
在非Unicode的符号中添加文本从来都不是一个好主意,但这不是主要问题。主要问题是您没有提供正确的字体。您需要一种知道如何绘制标记符号的字体。Arial Unicode MS就是这样一种字体:
String text = "\u0936\u093e\u0902\u0924\u093f";
PdfContentByte cb = writer.getDirectContent();
PdfTemplate tp = cb.createTemplate(100, 50);
Graphics2D g2 = tp.createGraphicsShapes(100, 50);
java.awt.Font font = new java.awt.Font(
"Arial Unicode MS", java.awt.Font.PLAIN, 12);
g2.setFont(font);
g2.drawString("Graphics2D: " + text, 0, 40);
g2.dispose();
cb.addTemplate(tp, 36, 750);
请注意,这假设Java可以访问字体
arialuni.ttf
我正在使用印地语文本以PDf格式显示,如下所示
BaseFont unicode = BaseFont.createFont("/home/mani/Documents/Back up (works)/Devanagari/Devanagari.ttf",
BaseFont.COURIER, BaseFont.EMBEDDED);
Font font=new Font(unicode,12,Font.NORMAL,new BaseColor(50,205,50));
table = new PdfPTable(new float[] { 10, 60, 30 });
table.setWidthPercentage(100);
PdfPCell customerLblCell = new PdfPCell(new Phrase("karent balance",
font));
它在我的情况下工作正常。因为
itext
不支持本地语言,将文本转换为位图并设置为图像。使用以下方法进行转换:
public Bitmap textAsBitmap(String text, float textSize, float stroke,
int color) {
TextPaint paint = new TextPaint();
paint.setTextSize(textSize);
paint.setAntiAlias(true);
// paint.setTextAlign(Paint.Align.LEFT);
paint.setAntiAlias(true);
paint.setColor(color);
// paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeWidth(20f);
paint.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.BOLD));
float baseline = (int) (-paint.ascent() + 3f); // ascent() is negative
StaticLayout staticLayout = new StaticLayout(text, 0, text.length(),
paint, 435, android.text.Layout.Alignment.ALIGN_NORMAL, 1.0f,
1.0f, false);
// int linecount = staticLayout.getLineCount();
//
// int height = (int) (baseline + paint.descent() + 3) * linecount + 10;
Bitmap image = Bitmap.createBitmap(staticLayout.getWidth(),
staticLayout.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(image);
// canvas.drawARGB(100, 100, 100, 100);
staticLayout.draw(canvas);
return image;
}
我已经找到了这个例子作为替代,但我正在寻找类似于下面文档的东西;但是paragaraph不接受awt字体。有没有其他方法可以制作自己的自定义字体(.ttf)并在BaseFont方法中使用它?除了我在回答中描述的方式外,iText中不支持印地语。我们目前正在编写更广泛的印地语支持,但鉴于对它的需求,我们可能不会开放该部分的源代码,因为它在商业上很有趣。我使用的是印地语fontBaseFont unicode=BaseFont.createFont(“/home/mani/Documents/backup(works)/Devanagari/Devanagari.ttf”,BaseFont.COURIER,BaseFont.EMBEDDED)的istead);Font unii=新字体(unicode,12,Font.NORMAL,新基色(50205,50));Font font1003=新字体(un,12,Font.NORMAL,新基色(50205,50));table=新的PdfPTable(新的浮点[]{10,60,30});表1.设定宽度百分比(100);PdfPCell customerlbcell=新的PdfPCell(新短语(“卡伦特平衡”,unii));我刚刚尝试运行ParseHtml8,但它在XMLWorkerFontProvider=new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS)上显示错误;register(“resources/fonts/notonasharabic Regular.ttf”);CssAppliers CssAppliers=新的CssAppliersImpl(fontProvider);HtmlPipelineContext htmlContext=新的HtmlPipelineContext(cssAppliers);setTagFactory(Tags.getHtmlTagProcessorFactory())@Bruno LowagieeExceptionConverter:java.io.UnsupportedEncodingException:CourierCan我有更详细的跟踪plz?BaseFont unicode=BaseFont.createFont(“assets/fonts/devanagari.ttf”,BaseFont.IDENTITY,BaseFont.EMBEDDED);Font catFont=新字体(unicode,16,Font.NORMAL,新基色(50205,50));通过使用此工具,无需使用印地语编写pdf文件。