当前位置: 首页 > 知识库问答 >
问题:

如何解决pdfbox中“Helvetica-Bold字体U+000A无字形”(Android端口)

姚煜
2023-03-14

我想写一些文本到一个PDF。我在“ICRResultTXT”中有数据。在尝试写入PDF之前,我还将数据写入text.txt文件。当我试图写到pdf时,我得到“没有字形的U+000A在Helvetica-Bold字体”。如何解决?我不喜欢“Helvetica-Bold”。我愿意改成任何字体。

  @Override
                protected Boolean doInBackground(Void... params) {
                    Boolean ret = false;
                    PDDocument document = new PDDocument();
                    try {
                        float scale = 0.8f; // alter this value to set the image size
                        formPreference = getSharedPreferences(SHARD_PREFERENCES,
                                MODE_PRIVATE);

                        PDPage page = new PDPage();

                        document.addPage(page);


                        PDPageContentStream contentStream = new PDPageContentStream(
                                document, page, false, true);

                        PDFont pdfFont = PDType1Font.HELVETICA_BOLD;
                        float fontSize = 25;
                        float leading = 1.5f * fontSize;

                        PDRectangle mediabox = page.getMediaBox();
                        float margin = 72;
                        float width = mediabox.getWidth() - 2 * margin;
                        float startX = mediabox.getLowerLeftX() + margin;
                        float startY = mediabox.getUpperRightY() - margin;
                        // icrResultTxt;//
                        writeToFile(icrResultTxt);  
                        String text = icrResultTxt; // "I am trying to create a PDF file with a lot of text contents in the document. I am using PDFBox";
                        List<String> lines = new ArrayList<String>();
                        int lastSpace = -1;
                        while (text.length() > 0) {
                            int spaceIndex = text.indexOf(' ', lastSpace + 1);
                            if (spaceIndex < 0) {
                                lines.add(text);
                                text = "";
                            } else {
                                String subString = text.substring(0, spaceIndex);
                                float size = fontSize
                                        * pdfFont.getStringWidth(subString) / 1000;
                                if (size > width) {
                                    if (lastSpace < 0) // So we have a word longer than
                                                        // the line... draw it anyways
                                        lastSpace = spaceIndex;
                                    subString = text.substring(0, lastSpace);
                                    lines.add(subString);
                                    text = text.substring(lastSpace).trim();
                                    lastSpace = -1;
                                } else {
                                    lastSpace = spaceIndex;
                                }
                            }
                        }

                        contentStream.beginText();
                        contentStream.setFont(pdfFont, fontSize);
                        contentStream.moveTextPositionByAmount(startX, startY);
                        for (String line : lines) {
                            contentStream.drawString(line);
                            contentStream.moveTextPositionByAmount(0, -leading);
                        }
                        contentStream.endText();
                        contentStream.close();
                        File fz = new File(
                                Environment
                                        .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
                                        + File.separator + "hello.pdf");
                        if (!fz.exists()) {
                            fz.createNewFile();
                        } else {
                            fz.delete();
                            fz.createNewFile();
                        }
                        document.save(fz);

                } catch (Exception e) {

                    Log.v("mango", e.getMessage());
                }
private void writeToFile(String data) {
        try {

            File d = GetImageFile("test.txt");
            if (d.exists()) {
                d.delete();
                d.createNewFile();
            } else {
                d.createNewFile();
            }

            FileOutputStream stream = new FileOutputStream(d);
            try {
                stream.write(data.getBytes());
            } finally {
                stream.close();
            }

        } catch (IOException e) {
            Log.e("Exception", "File write failed: " + e.toString());
        }
    }

共有1个答案

洪经义
2023-03-14

使用以下代码代替“\r\n”

   contentStream.moveTextPositionByAmount(100, 700);  
    contentStream.drawString("hello"); 
    contentStream.endText();  
    contentStream.beginText();  
    contentStream.moveTextPositionByAmount(100, 690);//the second parameter mast between 800.0 and 0.0
 类似资料:
  • 我试图在文档中创建新的页面并写入一些文本,同时使用文件中包含的字体。 字体是从资源中提取的: 后来用来写一些文字: 包括PDF在内的完整项目可在github存储库中获得,该存储库显示了该问题

  • 当试图使用Java和库打印PDF页面时,我得到了以下错误: PDFBOX:U+000A(“控件LF”)在此字体中不可用Helvetica编码:WinAnsiEncoding

  • 我是否正确,当使用XSL-FO(Apache FOP)生成pdf时,无法使用Windows 7 c:\windows\fonts*中的字体? 我刚刚安装了OTF格式的“helvetica neue”字体。 根据https://xmlgraphics.apache.org/fop/trunk/fonts.html “对系统字体的支持依赖于JavaAWT子系统的字体度量信息。通过操作系统注册,AWT子

  • 如果你需要更多的背景,我在下面补充了整个故事: 我试图替换PDF中的一些字符串。这将成功(只要所有文本都存储在一个令牌中)。为了保持格式,我喜欢重新居中的文本。据我所知,我可以通过得到新旧字符串的宽度,做一些琐碎的计算,并设置新的位置来做到这一点。 我在stackoverflow上找到了一些灵感,用来替换https://stackoverflow.com/a/36404377(是的,它有一些问题,

  • 问题内容: 我正在尝试使用pdfbox从pdf中提取包含所有信息的文本。我获得了我想要的所有信息,除了颜色。我尝试了多种获取fontcolor的方法(包括使用PDFBox获取文本颜色)。但是没有用。现在,我从pdfBox的PageDrawer类复制了代码。但是,RGB值也不正确。 我正在使用上面的代码。得到的值是r = 0,g = 0,b = 0,内部cosp对象值为[0.0],内部pd对象数组=

  • PDFBox的字体类PDFont中有一个名为getFontHeight的方法,听起来很简单。然而,我不太理解文档和参数代表什么。 这将获得字符的字体宽度。 参数: c-要获取宽度的字符代码。 偏移量-数组中的偏移量。长度 数据的长度。 返回:宽度为1000个文本空间单位,即333或777 在PDFBox中,这个方法是用来获取角色高度的正确方法吗?如果是的话,如何获取?字体高度和字体大小之间是否存在