【问题标题】:Put check mark in pdf using itext使用 itext 在 pdf 中添加复选标记
【发布时间】:2012-05-15 14:07:02
【问题描述】:

我正在使用 iText(java 库)生成 PDF 文件。 在这里我有一段我必须打勾

PdfPCell cell95 = new PdfPCell(new Paragraph((new Chunk('\u2713', FontFactory.getFont(FontFactory.HELVETICA, 11, Font.BOLD, new BaseColor(0,0,0))))));

我正在使用它,但它不起作用。

【问题讨论】:

  • 结果如何?字符错误?什么都没有?抛出异常?
  • 你使用的字体中是否存在unicode字符?
  • 是的,该字符存在..我正在使用 /u2713,它是复选标记的 unicode

标签: java itext


【解决方案1】:

您不能将 unicode 直接用于 PDFPCell。

相反,创建复选标记的图像并将其插入 PDFPCell。

【讨论】:

  • 为什么不呢?很多 PDF 都充满了 unicode。你能提供支持文件吗?
  • 虽然这个答案被接受,但它是不正确的,你只需要使用为工作准备好的字体。
【解决方案2】:

This stackoverflow postthis item from itext-questions 表示您需要使用 unicode 字符集而不是默认的 Windows CP1252 字符集来创建字体 - 尝试使用带有编码说明符的 getFont 的重载:

FontFactory.getFont(FontFactory.HELVETICA, BaseFont.IDENTITY_H, 11, Font.BOLD, new BaseColor(0,0,0))

【讨论】:

    【解决方案3】:

    使用此代码:

        String FONT = "C:/dev/dejavu-fonts-ttf-2.33/ttf/DejaVuSans.ttf";
        FontSelector selector = new FontSelector();
        BaseFont base = BaseFont.createFont(FONT, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
        selector.addFont(FontFactory.getFont(FontFactory.HELVETICA, 12));
        selector.addFont(new Font(base, 12));
        Phrase ph = selector.process(text);
        document.add(new Paragraph(ph));
    

    这里,重点是 1)set BaseFont.IDENTITY_H; 2)只有某些字体提供“复选标记”

    【讨论】:

      【解决方案4】:

      试试这个解决。 从https://www.fontsquirrel.com/fonts/dejavu-sans 下载 dejavu-sans。并将其保存在本地。

      使用以下代码将刻度符号写入 PDF 文档。

          private static void writeUsingIText() {
      
      
          Document document = new Document();
      
          try {
      
              PdfWriter.getInstance(document, new FileOutputStream(new File(FILE_NAME)));
      
              //open
              document.open();
      
              Paragraph p = new Paragraph();
              p.add("This is my paragraph 1");
              p.setAlignment(Element.ALIGN_CENTER);
      
              document.add(p);
      
              Paragraph p2 = new Paragraph();
              p2.add("This is my paragraph 2"); //no alignment
      
              document.add(p2);
      
              Font f = new Font();
              f.setStyle(Font.BOLD);
              f.setSize(8);
      
              document.add(new Paragraph("This is my paragraph 3", f));
      
              document.add(new Paragraph("This is my tick mark ", f));
      
      
              String FONT = "C:\\Users\\<username>\\Documents\\DejaVuSans.ttf";
              FontSelector selector = new FontSelector();
              BaseFont base = BaseFont.createFont(FONT, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
              selector.addFont(FontFactory.getFont(FontFactory.HELVETICA, 12));
              selector.addFont(new Font(base, 12));
              char tickSymbol=10003;
              String text = String.valueOf(tickSymbol);
              Phrase ph = selector.process(text);
              document.add(new Paragraph(ph));
      
      
      
      
              //close
              document.close();
      
              System.out.println("Done");
      
          } catch (FileNotFoundException | DocumentException e) {
              e.printStackTrace();
          } catch (IOException e) {
              e.printStackTrace();
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-13
        • 2022-09-27
        相关资源
        最近更新 更多