当前位置: 首页 > 面试题库 >

如何测试我的字体在pdf中是否正确显示?

徐卓
2023-03-14
问题内容

在jasper report中使用不同的字体时,您需要使用font-extensions。

但是,如果字体显示 不正确 ,有没有一种方法可以测试pdf是否支持该字体,以便我可以理解问题是否与我的字体扩展名或我的.ttf字体有关?

从jasper报告导出为pdf时,字体呈现不正确是一个常见的问题示例jasperReports
PDF不会导出西里尔字母值,如清单1所示,使用字体扩展名并不总是足够的,还需要字体支持pdf生成库,并能够呈现实际字符。这就是为什么我决定通过此QA样式问题的原因,以便将来的用户在点击清单1时可以参考如何快速测试字体。


问题答案:

由于jasper report使用itext库,因此最简单的测试字体是否将在pdf中正确显示的方法是直接使用itext测试它。

示例
程序*,改编自iText:第11章:选择正确的字体

import java.io.FileOutputStream;
import java.io.IOException;

import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Font;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.ColumnText;
import com.lowagie.text.pdf.PdfWriter;

public class FontTest {

    /** The resulting PDF file. */
    public static final String RESULT = "fontTest.pdf";
    /** the text to render. */
    public static final String TEST = "Test to render this text with the turkish lira character \u20BA";

    public void createPdf(String filename) throws IOException, DocumentException {
        Document document = new Document();
        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename));
        document.open();
        BaseFont bf = BaseFont.createFont(
            "pathToMyFont/myFont.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
        Font font = new Font(bf, 20);
        ColumnText column = new ColumnText(writer.getDirectContent());
        column.setSimpleColumn(36, 730, 569, 36);
        column.addElement(new Paragraph(TEST, font));
        column.go();
        document.close();
    }

    public static void main(String[] args) throws IOException, DocumentException {
        new FontTest().createPdf(RESULT);
    }
}

一些注意事项(如示例所示):

  • 要渲染特殊字符,请使用其编码值示例 \u20BA来避免文件编码类型出现问题。
  • 考虑始终使用 Unicode 编码,这是更新的PDF标准(PDF / A,PDF / UA)中推荐的方法,它使您可以混合使用不同的编码类型,但唯一的缺点是文件大小稍大。

结论:

如果在“ fontTest.pdf”中 正确 显示了字体,则在jasper报告中字体扩展名有问题。

如果您在“ fontTest.pdf”中 无法正确显示 字体,则在jasper报告中您无能为力,您需要查找其他字体。

*最新的jasper-reports发行版使用特殊版本itext-2.1.7,此版本中的导入为com.lowagie.text,如果您使用的是更高版本,则导入com.itextpdf.text如改编示例中所示。



 类似资料:
  • 在jasper报表中使用不同字体时,需要使用font-extensions。 但是,如果字体呈现不正确,是否有一种方法可以测试pdf是否支持该字体,以便了解问题是与我的字体扩展有关,还是与我的字体有关? 从jasper reports导出到pdf时字体的不正确呈现是一个常见的问题。例如,jasper reports pdf不能导出西里尔值,如清单第1点所示,使用字体扩展并不总是足够的,字体还需要得

  • 我正在尝试从.jasper文件生成pdf报告到使用struts框架的基于web的java应用程序中。但是pdf报表中的字体显示不正确(这里是打印屏幕),而在预览时,它可以正常工作,或者我们可以将相同的报表导出为其他格式,如docx,html格式,它可以正常工作(这里是打印屏幕)

  • 当我从文件导入字体时,它显示得很奇怪。它应该说“测试”,但它只是说“_”。 这是我的代码:

  • 问题内容: 我有一堆字符,想删除所有不是’#’‘的字符。“ E”和“ G”。 我试图用这个: 但是遇到了不兼容类型的问题。 问题答案:

  • 问题内容: 我已经安装了django-redis-cache和redis- py。我关注了Django的缓存文档。据我所知,下面的设置是我所需要的。但是我怎么知道它是否正常工作呢? … 问题答案: 尚未与Django一起使用,但是我的默认方法是在开发过程中检查某个组件是否确实写入了Redis: 首先,我刷新存储在redis中的所有键,以删除旧的缓存条目(在生产中绝对不要这样做,因为这会从redis

  • 以下是我所做的基本步骤: 要求用户输入表达式(存储为字符串) 遍历每个字符并确定该字符是操作数、运算符、空格还是无效字符 如果(char==操作数)推入堆栈 如果(char==operator)弹出两次并执行算术,然后将结果推送到堆栈 循环外,如果(!stack.empty())结果==stack.top,stack.pop 否则无效表达式 因此,如果堆栈已经是空的,上面的方法可以很好地工作,但是