Java 使用PrintedPdfDocument呈现带有表情的PDF

Java 使用PrintedPdfDocument呈现带有表情的PDF,java,android,pdf,emoji,Java,Android,Pdf,Emoji,我正在使用Android的内置功能绘制带有画布的PDF,如文档示例代码中所述: private void drawPage(PdfDocument.Page page) { Canvas canvas = page.getCanvas(); // units are in points (1/72 of an inch) int titleBaseLine = 72; int leftMargin = 54; Paint paint = new Paint(); pa

我正在使用Android的内置功能绘制带有画布的PDF,如文档示例代码中所述:

private void drawPage(PdfDocument.Page page) {
  Canvas canvas = page.getCanvas();

  // units are in points (1/72 of an inch)
  int titleBaseLine = 72;
  int leftMargin = 54;

  Paint paint = new Paint();
  paint.setColor(Color.BLACK);
  paint.setTextSize(36);
  canvas.drawText("Test Title", leftMargin, titleBaseLine, paint);

  paint.setTextSize(11);
  canvas.drawText("Test paragraph", leftMargin, titleBaseLine + 25, paint);

  paint.setColor(Color.BLUE);
  canvas.drawRect(100, 100, 172, 172, paint);
}
Typeface typeface = Typeface.createFromAsset(context.getAssets(), "fonts/OpenSansEmoji.ttf");
paint.setTypeface(typeface);
是否可以将表情文字添加到此文档中?我不知道如何设置字符集/编码

每当我尝试添加表情符号输出时,它就会在pdf中显示为乱码

这是保存pdf的代码:

mPdfDocument = new PrintedPdfDocument(context, printAttributes);
mCurrentPage = mPdfDocument.startPage(1);
Canvas canvas = mCurrentPage.getCanvas();
... // add stuff to canvas
mPdfDocument.finishPage(mCurrentPage);
FileOutputStream fos = new FileOutputStream(new File(path));
mPdfDocument.writeTo(fos);
fos.close();

谢谢

使用表情符号的unicode值创建字符串。然后将字符串传递给drawText方法:


字符串smileyFace=新字符串(Character.toChars(0x1F603))//0x1F603=微笑表情符号
画布.绘图文本(笑脸、左边距、标题栏、绘画);

我得到了答案。以下是一些示例代码:

private void drawPage(PdfDocument.Page page) {
  Canvas canvas = page.getCanvas();

  // units are in points (1/72 of an inch)
  int titleBaseLine = 72;
  int leftMargin = 54;

  Paint paint = new Paint();
  paint.setColor(Color.BLACK);
  paint.setTextSize(36);
  canvas.drawText("Test Title", leftMargin, titleBaseLine, paint);

  paint.setTextSize(11);
  canvas.drawText("Test paragraph", leftMargin, titleBaseLine + 25, paint);

  paint.setColor(Color.BLUE);
  canvas.drawRect(100, 100, 172, 172, paint);
}
Typeface typeface = Typeface.createFromAsset(context.getAssets(), "fonts/OpenSansEmoji.ttf");
paint.setTypeface(typeface);
您可以找到OpenSansEmoji.ttf字体或其他表情符号字体


将此文件放在Android项目的资产/字体文件夹中。

不,这不起作用。它仍然在最终的PDF文件中显示为乱码。编辑了我的原始问题,以显示在画布上添加内容后生成PDF的示例代码。