2 回答
TA贡献1921条经验 获得超9个赞
第四种可能性(在Aaron Digulla答案中给出的三种可能性旁边)是在扩展类时覆盖:showGlyph()PDFTextStripper
protected void showGlyph(Matrix textRenderingMatrix, PDFont font, int code, String unicode, Vector displacement) throws IOException
{
super.showGlyph(textRenderingMatrix, font, code, unicode, displacement);
if (unicode == null || unicode.isEmpty())
{
// do stuff
}
}
TA贡献1827条经验 获得超4个赞
我看到这些解决方案,两者都有点混乱。
解决方案#1:将您自己的过滤器安装到记录器。过滤器可以检查日志消息并设置线程本地标志。调用 后检查标志。不要忘记删除标志,否则您的线程本地映射将填满。getText()
您可以将共享资源日志记录替换为支持 MDC 的其他内容,例如 logback。然后,您可以将该标志放在 MDC 中。
解决方案#2:修补PDFbox的源代码。在类中添加一个 getter:PDSimpleFontPDType0Font
public boolean hadEncodingProblems() {
return !noUnicode.isEmpty();
}
应该有一种方法可以在调用后获取所有字体。getText()
解决方案#3:使用反射读取字段值(kudos to mkl)。请注意,这可能会随着新的 Java 版本或 SecurityManager 是安装程序或默认版本被激活而中断。
添加回答
举报
