【问题标题】:how to create PDF in android with unicode support如何在支持 unicode 的 Android 中创建 PDF
【发布时间】:2019-02-16 15:39:10
【问题描述】:

我想在 android 中创建一个 Pdf 文件。我使用“itextpdf”并创建 pdf 文件,但在输入波斯文本后,没有显示任何内容。在下面你可以找到我使用的来源 https://medium.com/android-school/exploring-itext-to-create-pdf-in-android-5577881998c8 虽然我换了字体,还是有问题。

            Document document = new Document();
            PdfWriter.getInstance(document, new FileOutputStream(fileName));
            document.open();

            document.setPageSize(PageSize.A4);
            document.addCreationDate();
            document.addAuthor("Sample");
            document.addCreator("Sample");
            BaseColor mColorAccent = new BaseColor(0, 153, 204, 255);
            float mHeadingFontSize = 20.0f;
            float mValueFontSize = 26.0f;
            BaseFont urName = BaseFont.createFont("assets/fonts/brandon_bold.otf", "UTF-8", BaseFont.EMBEDDED);
            LineSeparator lineSeparator = new LineSeparator();
            lineSeparator.setLineColor(new BaseColor(0, 0, 0, 68));


            // Title Order Details...
            // Adding Title....
            Font mOrderDetailsTitleFont = new Font(urName, 36.0f, Font.NORMAL, BaseColor.BLACK);
            Chunk mOrderDetailsTitleChunk = new Chunk("تست", mOrderDetailsTitleFont);
            Paragraph mOrderDetailsTitleParagraph = new Paragraph(mOrderDetailsTitleChunk);
            mOrderDetailsTitleParagraph.setAlignment(Element.ALIGN_CENTER);
            document.add(mOrderDetailsTitleParagraph);

            // Fields of Order Details...
            // Adding Chunks for Title and value
            Font mOrderIdFont = new Font(urName, mHeadingFontSize, Font.NORMAL, mColorAccent);
            Chunk mOrderIdChunk = new Chunk("Order No:", mOrderIdFont);
            Paragraph mOrderIdParagraph = new Paragraph(mOrderIdChunk);
            document.add(mOrderIdParagraph);

            Font mOrderIdValueFont = new Font(urName, mValueFontSize, Font.NORMAL, BaseColor.BLACK);
            Chunk mOrderIdValueChunk = new Chunk("#123123", mOrderIdValueFont);
            Paragraph mOrderIdValueParagraph = new Paragraph(mOrderIdValueChunk);
            document.add(mOrderIdValueParagraph);

            // Adding Line Breakable Space....
            document.add(new Paragraph(""));
            // Adding Horizontal Line...
            document.add(new Chunk(lineSeparator));
            // Adding Line Breakable Space....
            document.add(new Paragraph(""));

            // Fields of Order Details...
            Font mOrderDateFont = new Font(urName, mHeadingFontSize, Font.NORMAL, mColorAccent);
            Chunk mOrderDateChunk = new Chunk("Order Date:", mOrderDateFont);
            Paragraph mOrderDateParagraph = new Paragraph(mOrderDateChunk);
            document.add(mOrderDateParagraph);

          Font mOrderDateValueFont = new Font(urName, mValueFontSize, Font.NORMAL, BaseColor.BLACK);
          Chunk mOrderDateValueChunk = new Chunk("06/07/2017", mOrderDateValueFont);
          Paragraph mOrderDateValueParagraph = new Paragraph(mOrderDateValueChunk);
          document.add(mOrderDateValueParagraph);

          document.add(new Paragraph(""));
          document.add(new Chunk(lineSeparator));
          document.add(new Paragraph(""));

            // Fields of Order Details...
            Font mOrderAcNameFont = new Font(urName, mHeadingFontSize, Font.NORMAL, mColorAccent);
            Chunk mOrderAcNameChunk = new Chunk("Account Name:", mOrderAcNameFont);
            Paragraph mOrderAcNameParagraph = new Paragraph(mOrderAcNameChunk);
            document.add(mOrderAcNameParagraph);

            Font mOrderAcNameValueFont = new Font(urName, mValueFontSize, Font.NORMAL, BaseColor.BLACK);
            Chunk mOrderAcNameValueChunk = new Chunk("Pratik Butani", mOrderAcNameValueFont);
            Paragraph mOrderAcNameValueParagraph = new Paragraph(mOrderAcNameValueChunk);
            document.add(mOrderAcNameValueParagraph);

            document.add(new Paragraph(""));
            document.add(new Chunk(lineSeparator));
            document.add(new Paragraph(""));

            document.close();

【问题讨论】:

  • 感谢您提及博客链接和我的名字:P

标签: android itext pdf-generation


【解决方案1】:

你好,你应该使用 itext 的语言

如果您使用以下代码,您的问题最能解决。

public void createPdf(String path , String text) throws IOException, DocumentException {
        // step 1
        Document document = new Document();
        // step 2
        PdfWriter Writer = PdfWriter.getInstance(document, new FileOutputStream(path));
        // step 3: we open the document
        document.open();
        // step 4
        ArabicLigaturizer pe = new ArabicLigaturizer();
        Writer.setRunDirection(PdfWriter.RUN_DIRECTION_RTL);
        BaseFont bf;
        BufferedReader reader = new BufferedReader(new StringReader(text));
        String line;
        StringBuilder trueText = new StringBuilder();
        while ((line = reader.readLine()) != null) {
            trueText.append(pe.process(line));
            trueText.append("\n");
        }
            bf = BaseFont.createFont("assets/your font.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
            document.add(new Paragraph(String.valueOf(trueText), new Font(bf, 12)));
            document.addCreationDate();

        // step 5: we close the document
        document.close();
    }

祝你好运。

【讨论】:

    【解决方案2】:

    以下站点对 Unicode PDF 非常有用 https://developers.itextpdf.com/examples/font-examples/examples-font-tutorial#17-f05_russian_correct_encoding.java

    我们必须使用支持 Unicode 的字体。另外,更改以下代码

    BaseFont urName = BaseFont.createFont("assets/fonts/Freesans.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
    
    Font mOrderDetailsTitleFont = new Font(urName, 36.0f, Font.NORMAL, BaseColor.BLACK);
            Chunk mOrderDetailsTitleChunk = new Chunk(new StringBuilder("some unicode character").reverse().toString(),mOrderDetailsTitleFont);
            Paragraph mOrderDetailsTitleParagraph = new Paragraph(mOrderDetailsTitleChunk);
            mOrderDetailsTitleParagraph.setAlignment(Element.ALIGN_CENTER);
            document.add(mOrderDetailsTitleParagraph);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-18
      • 2011-04-26
      • 2011-07-15
      • 2014-12-25
      • 2017-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多