- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 iTextPdf 5.5.3 创建 PDF/A 文档,我希望用户通过上传字体的 .ttf 文件来选择自定义字体,因为 FontFactory.getFont ()
方法仅将字体名称作为字符串我必须将上传的文件写入用户的驱动器(我知道,我向我的客户请求写入驱动器的权限)并且然后将上传文件的路径传递给 getFont() 方法,一切完成后我想从驱动器中删除上传的文件。这是我的代码:
File fontFile = new File("d:/temp/testFont.ttf");
try {
FileOutputStream outStream = new FileOutputStream(fontFile);
outStream.write(the bytes of the uploaded font file);
outStream.flush();
outStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Font font = FontFactory.getFont(fontFile.getAbsolutePath(), BaseFont.CP1250 , BaseFont.EMBEDDED);
fontFile.delete();
此代码不起作用,getFont()
方法以某种方式锁定字体文件,因此该文件不会被删除。我尝试了很多方法来做到这一点,例如: fontFile.deleteOnExit();
或 FileDeleteStrategy.FORCE.delete("file path");
但没有任何效果对我有用。请指教。谢谢
最佳答案
我不会回答您帖子标题中提到的问题(因为它是次要的)。相反,我将回答正文中的问题(这是基本问题)。
您声称 FontFactory.getFont()
需要文件系统上的字体文件。这并没有错。但是,这并不意味着您不能从 byte[]
创建字体。
您试图通过在磁盘上保存 ttf
来解决您的问题(您的客户禁止这样做),但这不是必需的。在某种程度上,您的客户是对的:将 TTF 保存为磁盘上的临时文件不是一个好主意(这就是为什么我忽略您的第二个问题)。
看看the following createFont()
method :
public static BaseFont createFont(String name,
String encoding,
boolean embedded,
boolean cached,
byte[] ttfAfm,
byte[] pfb)
throws DocumentException,
IOException
这是您应该如何解释您的案例中的参数:
name
- 字体的名称(不是位置)encoding
- 应用于此字体的编码embedded
- true
(如果要将字体嵌入到 PDF 中)cached
- 在您的情况下可能是false
,因为您不会在 JVM 中重用该字体ttfAfm
- .ttf 文件的字节pfb
- 在您的情况下,该值将为null
(它仅在 Type1 字体的上下文中有意义)。现在您可以满足客户的要求,并且无需引入次优的解决方法。
注意:您使用的是 AGPL 下提供的 iText 5.5.3。请注意,您的客户一旦开始在网络服务、产品等中使用 iText,就需要购买 iText 软件的商业许可证...
关于java - 调用 FontFactory.getFont() 方法后无法删除文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26864253/
我正在使用 iTextPdf 5.5.3 创建 PDF/A 文档,我希望用户通过上传字体的 .ttf 文件来选择自定义字体,因为 FontFactory.getFont () 方法仅将字体名称作为字符
我需要你的帮助来添加自定义字体“arial.ttf”,它存储在我项目的资源文件夹下,在 iText 的 FontFactory.register 方法中。 在Windows Explorer 的项目中
如果我说: var georgia = FontFactory.GetFont("Georgia Regular", 10f); 这是行不通的。当我检查变量 georgia 的状态时,它的 Famil
我正在使用 com.lowagie.text.FontFactory在生成 PDF 文件时,我正在尝试使用自定义字体 KozMinPro-Regular,它提供对日语字符的支持,因为我们需要支持这一点
这个问题几乎说明了一切。我得到以下异常: ExceptionConverter: java.io.IOException: /fonts/CALIBRI.TTF not found as file o
我是一名优秀的程序员,十分优秀!