protected HashMap<String, PdfFileSpecification> cache = new HashMap<>();
private final byte[] BUFFER = new byte[1024];
public PdfFileSpecification getPdfFileSpecification(final PdfWriter pdfWriter, final String name, final byte[] data) throws IOException {
String hash = createMD5Hash(data);
PdfFileSpecification pdfFileSpecification = cache.get(hash);
if (pdfFileSpecification == null) {
pdfFileSpecification = PdfFileSpecification.fileEmbedded(pdfWriter, null, name, data);
cache.put(hash, pdfFileSpecification);
return pdfFileSpecification;
}
System.out.println(String.format("Name: %s Hash: %s", name, hash));
return pdfFileSpecification;
}
private String createMD5Hash(final byte[] data) {
MessageDigest messageDigest;
try {
messageDigest = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
return null;
}
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(data);
try {
int i;
while ((i = byteArrayInputStream.read(BUFFER)) != -1) {
messageDigest.update(BUFFER, 0, i);
}
byteArrayInputStream.close();
} catch (IOException e) {
return null;
}
byte[] mdbytes = messageDigest.digest();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < mdbytes.length; i++) {
sb.append(Integer.toString((mdbytes[i] & 0xff) + 0x100, 16).substring(1));
}
return sb.toString();
}
所以每次我要处理一个新的附件时,我都是这样做的:
PdfFileSpecification fs = getPdfFileSpecification(pdfWriter, name, data)
PdfAnnotation an = PdfAnnotation.createFileAttachment(pdfWriter, rectangle, name, fs);
请允许我拿着您的代码,介绍一些伪代码,向您展示我会如何做到这一点:
protected Map<String, PdfFileSpecification> cache =
new HashMap<String, PdfFileSpecification>();
public void cellLayout(final PdfPCell pdfPCell, final Rectangle rectangle, final PdfContentByte[] pdfContentBytes) {
String hasheddata = createHash(attachment);
PdfFileSpecification fs = cache.get(hasheddata);
if (fs == null) {
fs = PdfFileSpecification.fileEmbedded(writer, null, displayname, attachment);
cache.put(hasheddata, fs);
}
PdfAnnotation an = PdfAnnotation.createFileAttachment(writer, rectangle, displayname, fs);
writer.addAnnotation(an);
}
这段代码无法编译,因为我遗漏了一些与问题无关的部分。我只保留了解释为文件规范创建缓存的概念的内容。
我创建附件
字节的哈希值以节省内存。您必须使用您选择的哈希算法实现createhash()
方法。在创建将向PDFWriter
写入字节的新FileSpecification
之前,我要检查是否不能重用已有的文件规范。如果存在,我将在注释中重用它。如果它不存在,我创建一个新的文件规范。
问题内容: 这是我的问题:是否可以通过某种方式检查是否存在动态附加的事件侦听器?或者如何检查DOM中“onclick”(?)属性的状态?但是没有运气。这是我的html: 然后在Javascript中,将动态创建的事件侦听器附加到第二个链接: 该代码运行良好,但是我所有检测该附加侦听器的尝试均失败: 如果单击“为2添加onclick”,然后单击“[链接2]”,则事件触发良好,但“测试链接2”始终报告
问题内容: 尝试检查我要读取的文件是否存在。 问题答案: 这是另一种方法: 包装的用途和功能: p_DirName in varchar2, – schema object name p_FileName in varchar2 ) return number is l_file_loc bfile; begin l_file_loc := bfilename(upper(p_DirName),
问题内容: 在python中,是否存在检查给定文件/目录是否为符号链接的函数?例如,对于以下文件,我的包装函数应返回。 问题答案: 要确定目录条目是否为符号链接,请使用以下命令: os.path.islink(路径) 如果path引用的目录条目是符号链接,则返回True。如果不支持符号链接,则始终为False。 例如,给定:
问题内容: 如何检查 文件 的存在? 在模块的文档中,有方法的说明。但是,据我了解,它只检查目录的存在。而且我需要检查 文件 ! 如何才能做到这一点? 问题答案: 为什么不尝试打开文件? 无论如何,经过一分钟的搜索,请尝试以下操作: 对于Node.js v0.12.x及更高版本 双方并已弃用 *编辑: 已更改: 至: 林特抱怨双重等于不是三次等于。 使用fs.stat:
问题内容: 我如何检查Java安装中是否存在像javax.servlet。*这样的包? 问题答案: Java只能告诉您是否可以加载类。它不能告诉您是否存在软件包,因为没有加载软件包,只有类。 唯一的方法是尝试从该包中加载类。例如,对于javax.servlet。*,您可以执行以下操作:
我可以使用JavaMail API从电子邮件帐户下载附件。但是,有没有办法使用Java获得电子邮件附件的下载链接? 出于我的目的,我需要获得附件的下载链接,并将其提供给用户。这样用户就可以直接从电子邮件服务器下载这些附件。我将非常感谢任何其他建议。