... THIS stackoverflow post。但它部分起作用,它只是删除图像,使绘画和其他艺术品保持完好。
位图图形以外的图形的主要来源是矢量图形。它们通常由路径定义组成,后跟填充或抚摸路径的命令。
为了去除这些图形可以提高从你通过额外替换那些路径打击或由Ñ操作者这是填充运营商称为答案样品一个路径喷漆无操作。
if(token instanceof PDFOperator)
{
PDFOperator op = (PDFOperator)token;
if(op.getOperation().equals("Do"))
{
//remove the one argument to this operator
COSName name = (COSName)newTokens.remove(newTokens.size() -1);
continue;
}
else if (PAINTING_PATH_OPS.contains(op.getOperation()))
{
// replace path painting operator by path no-op
token = PDFOperator.getOperator("n");
}
}
其中
final static List<String> PAINTING_PATH_OPS = Arrays.asList("S", "s", "F", "f", "f*", "B", "b", "B*", "b*");
包含路径撞击或填充符。
PS:在参照的回答有两个缺点使用的图像移除代码:
它消除了太多,因为它不仅能消除图像XObject的同时也形成XObject的;有时(特别是在n-up工具输出中)全部内容驻留在这样的表格xobjects中,包括所有文本。
要解决这个问题,您必须检查引用xobject的类型,并且只有在具有子类型图像时才将其删除。由于表单xobjects也可以包含图像,因此您必须将表单xobject(其具有自己的内容流)递归到表单中。
因为它忽略了内联图像,所以删除太少。
为了解决这个问题,你还必须寻找出BI ... 键 - 值对 ... ID ... 图像数据 ... 在内容EI部分并删除它们。
来源
2014-03-01 12:53:37
mkl
页面内容有多复杂? I.e是否存在表单xobjects,这些表单又可能包含混合的文本和图像数据,因此也必须予以处理? – mkl