Java 无法识别带有Cp1252的Get DocumentException Arial

Java 无法识别带有Cp1252的Get DocumentException Arial,java,itextpdf,Java,Itextpdf,在过去的几个月里,我用font Courier生成了数千个PDF(在开发时在Windows 7上,在测试和生产时在OpenSuse上) 现在我的目标是使用Arial。因此,我在属性文件中切换了字体名称,得到了以下异常: Stacktrace代码段:com.itextpdf.text.DocumentException:Font'Arial' 无法识别带有“Cp1252”的。在 com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:708)

在过去的几个月里,我用font Courier生成了数千个PDF(在开发时在Windows 7上,在测试和生产时在OpenSuse上)

现在我的目标是使用Arial。因此,我在属性文件中切换了字体名称,得到了以下异常:

Stacktrace代码段:com.itextpdf.text.DocumentException:Font'Arial' 无法识别带有“Cp1252”的。在 com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:708)位于 com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:615)位于 com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:450)

在谷歌搜索了一段时间后,我找到了一个解决方案。我只需要在设置中使用“Arial.ttf”(就像文件名一样)。但在那之后,我得到了另一个例外:

java.io.IOException:Arial.ttf未作为文件或资源找到。
位于com.itextpdf.text.io.RandomAccessSourceFactory.CreateBreadingToMemory(RandomAccessSourceFactory.java:224)
位于com.itextpdf.text.io.RandomAccessSourceFactory.createBestSource(RandomAccessSourceFactory.java:173)
请访问com.itextpdf.text.pdf.RandomAccessFileOrArray。(RandomAccessFileOrArray.java:147)
在com.itextpdf.text.pdf.TrueTypeFont.process上(TrueTypeFont.java:625)
请访问com.itextpdf.text.pdf.TrueTypeFont。(TrueTypeFont.java:369)
请访问com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:699)
请访问com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:615)
请访问com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:450)
这里的提示是,itextpdf正在查找文件。所以我只是在我们的配置中输入了文件名
C:\\Windows\\font\\Arial.ttf
。 现在它工作了

但目标只是使用“Arial”作为字体名。可能吗


太多了

不可能只使用Arial这个名称,因为Arial不是14种标准Type 1字体之一(而Courier是14种字体之一)

如果要使用Arial,则始终需要引用Arial.ttf文件,是的,这意味着您需要提供
c:/windows/fonts/Arial.ttf
作为路径

如果希望使应用程序平台独立,可以将字体与代码一起作为资源提供,并使用该资源的路径


另一个解决方案是使用和注册所有字体。请注意,注册字体的初始调用可能需要一些时间,因为
FontFactory
将在硬盘上搜索可能包含字体文件的目录(取决于操作系统)中所能找到的字体数。查看并试用
register()
registerDirectory()
registerDirectories()
方法。

谢谢!工厂就是它!我记得,我们代码的另一部分已经在使用FontFactory了!所以我可以简单地修改这个代码。
java.io.IOException: Arial.ttf not found as file or resource.
  at com.itextpdf.text.io.RandomAccessSourceFactory.createByReadingToMemory(RandomAccessSourceFactory.java:224)
  at com.itextpdf.text.io.RandomAccessSourceFactory.createBestSource(RandomAccessSourceFactory.java:173)
  at com.itextpdf.text.pdf.RandomAccessFileOrArray.<init>(RandomAccessFileOrArray.java:147)
  at com.itextpdf.text.pdf.TrueTypeFont.process(TrueTypeFont.java:625)
  at com.itextpdf.text.pdf.TrueTypeFont.<init>(TrueTypeFont.java:369)
  at com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:699)
  at com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:615)
  at com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:450)