- 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/
这个问题已经有答案了: iText : Unable to print mathematical characters like ∈, ∩, ∑, ∫, ∆ √, ∠ (1 个回答) 已关闭 6 年前
作为documentation状态: Android O lets you bundle fonts as resources by adding the font file in the res/f
我正在使用 iTextPdf 5.5.3 创建 PDF/A 文档,我希望用户通过上传字体的 .ttf 文件来选择自定义字体,因为 FontFactory.getFont () 方法仅将字体名称作为字符
每次我使用 QFontDialog.getFont() 获取字体时,它都会返回相同的 QFont 对象。 font, ok = QFontDialog.getFont() print(font) if
我在使用 Raphael.js 的 print 方法创建文本时遇到了一些问题。更准确地说,print 方法需要的 getFont 方法返回一个 undefined 值。我组装了一个非常简单的 fidd
在我的程序中,我有一个函数可以创建另一个 sf::Text 字符串的轮廓,如下所示: void textDisplay::createOutline(std::vector &textDisplayV
我必须在 Android studio 中使用 uset getFont 的最低要求,这是我的 gradle 这是我使用getFont时的错误通知 最佳答案 您收到该错误的原因是 minSdkVers
本文整理了Java中org.jfree.chart.annotations.XYTextAnnotation.getFont()方法的一些代码示例,展示了XYTextAnnotation.getFon
我正在使用 Calligraphy Library通过克里斯詹克斯。今天早上突然我的项目开始抛出奇怪的错误。有人对此有任何想法吗?我还尝试查看 TintTypedArray.java:119 . gr
我有一个带有ReportViewer控件的简单WinForms应用程序。大多数情况下,它可以正常工作,但有时在ReportViewer窗口中显示无法恢复的红叉标记,或者当我滚动报表时崩溃。我找不到导致
我正在制作聊天应用程序,到目前为止一切顺利,但突然我在 android studio 3.1 中收到一个错误 No Static Method get Font。每当我打开我的应用程序时,它就会崩溃。
我正在使用 Raphaeljs,我正在尝试让 paper.print() 在 .js 文件中工作。我已经 Cufonized 字体并将 .font.js 文件导入到 html 文件中。在 html 文
如果我说: var georgia = FontFactory.GetFont("Georgia Regular", 10f); 这是行不通的。当我检查变量 georgia 的状态时,它的 Famil
我试图在 github 上上传我的工作项目,但未能上传 XML 文件并以某种方式丢失了它们,因为我以前从未使用过 github,现在当我为我的项目重新编写 XML 文件时,我面临编译器的这个错误: j
我目前正在尝试使用 Ionic 框架设置将 PayPal 集成到应用程序构建中以在 cordova 之上运行。我正在使用 [ionic-native braintree 插件][1] 进行集成。该应用
将我的 Android Studio 更新到 3.0 后,我收到 No static method getFont() 错误。我正在从事的项目在 github 上,https://github.com
我是一名优秀的程序员,十分优秀!