- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 pdf 文件,我希望从中删除所有图像和其他绘图内容。并将结果另存为新的 pdf。
我知道如何使用 TJ 、 Tj 运算符删除文本,我目前执行的操作如下
op.getOperation().equals( "TJ")
是否可以将这些文本运算符复制到格式完整的其他 pdf 文件上,以便新的 pdf 变成纯文本 pdf,而不是删除 TJ,Tj 运算符?如果使用 Tj , TJ 运算符以外的其他运算符绘制的文本丢失,也没关系。
删除 TJ,Tj 的代码取自 THIS堆栈溢出帖子。但它部分有效,它只是仅删除图像,使绘画和其他艺术完好无损。
编辑:我能想到的其他选项是将 BT ET block 之外的所有其他运算符的 cmyk 颜色设置为白色。这样 pdf 就会感觉只有文本。这可能吗 ?如果是,请支持 pdfBox 中的代码示例。
最佳答案
... THIS stackoverflow post. But it partially works , it just removes images only, leaving drawing and other art intact.
位图图形以外的图形的主要来源是 vector 图形。它们通常由路径定义组成,后跟填充或描边路径的命令。
要删除这些图形,您可以通过将路径绘制或填充运算符替换为 n 运算符(路径绘制无操作)来改进您提到的答案中的示例。
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,还删除了form xobject;有时(尤其是在 n-up 工具输出中)所有内容都驻留在此类形式的 xobject 中,包括所有文本。
要解决此问题,您必须检查引用的 xobject 的类型,并且只有在它具有子类型图像时才将其删除。由于表单 xobject 反过来也可以包含图像,因此您必须递归到表单 xobject(它有自己的内容流)。
它删除的内容太少,因为它忽略了内嵌图像。
要解决此问题,您还必须留意内容中的 BI ... 键值对 ... ID ... 图像数据 ... EI 部分并将其删除。
关于java - 删除其他运算符并仅保留文本运算符(TJ,Tj) pdfBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22067557/
我有一个 pdf 文件,我希望从中删除所有图像和其他绘图内容。并将结果另存为新的 pdf。 我知道如何使用 TJ 、 Tj 运算符删除文本,我目前执行的操作如下 op.getOperation().e
如果我们假设一个 PDF 文档“doc.pdf”包含“hello world”作为一个简单的字符串。 让我们考虑一下这段代码: //read the document DDocument do
是否可以确定TJ运算符中的数字是否代表单词之间的空格? 示例:[(Sta)28(ry)-333(Plzenec,)]TJ 数字28空格不够,否则333应该根据实际字号空格。字体大小为 9.96 最佳答
我试图找出在未压缩的 PDF v1.4 文档中使用 Times 字体的位置。 /Font描述 PDF 中 Times 字体的对象是对象 65如下: 65 0 obj > endobj 它指的是 /Fo
我使用 iText 库来创建并操作 PDF 文档。让我们有一个包含简单字符串的文档,例如“Hello world”。所以在pdf文件结构中,我们必须有(Hello world)Tj。问题是我如何通过使
我尝试使用 PDFBox 2.0.0 解析 PDF 的内容流。 这是处理它的代码的一部分: InputStream is; try { is = this.input.getDocumentC
最近我被分配到一个项目,我们必须将旧的 VB3 进程迁移到 C#,这个进程从 Access 97 文件中获取数据并将其插入 SQL Server,问题是一些“天才”调用字段“Ta/Tj”和“/”破坏了
我正在尝试使用 PoDoFo 库从 PDF 文件中提取文本,它适用于 Tj 运算符,但无法为 (数组)TJ 运算符。我找到了这段代码(经过我的小修改)here : const char*
我是否正确理解我不需要在 TypeScript 中使用像 tj/co 这样的库来控制流程,因为我可以使用 async/await?将 promises 与生成器一起使用只是 async/await 的
背景故事,阅读:https://medium.com/code-adventures/4ba9e7f3e52b TJ 说 Node 失败是因为: 您可能会收到重复的回调 您可能根本没有收到回电(迷失方
最近看了TJ的博文:"Farewell Node.js" . 我不太了解 Node 失败部分。在这里: Error-handling in Go is superior in my opinion.
好的,所以我正在解析 PDF 内容流,发现 TJ 回调生成一个字符串数组,所以我捕获它并开始遍历它以获取字符串值,如下所示: static void Op_TJ(CGPDFScannerRef s,
我是一名优秀的程序员,十分优秀!