【问题标题】:How to discard cropped text from a PDF如何丢弃 PDF 中的裁剪文本
【发布时间】:2019-04-21 21:17:08
【问题描述】:

我需要裁剪 pdf 以提取该 pdf 文档中的一些特定信息。有没有一种方法可以裁剪 pdf 并仅保留裁剪区域内的文本,而丢弃裁剪区域外的所有其他文本?

我尝试使用 pyPdf 使用以下代码对其进行裁剪。

from pyPdf import PdfFileWriter, PdfFileReader

with open("in.pdf", "rb") as in_f:
    input1 = PdfFileReader(in_f)
    output = PdfFileWriter()

    numPages = input1.getNumPages()
    print "document has %s pages." % numPages

    for i in range(numPages):
        page = input1.getPage(i)
        print page.mediaBox.getUpperRight_x(), page.mediaBox.getUpperRight_y()
        page.trimBox.lowerLeft = (25, 25)
        page.trimBox.upperRight = (225, 225)
        page.cropBox.lowerLeft = (50, 50)
        page.cropBox.upperRight = (200, 200)
        output.addPage(page)

    with open("out.pdf", "wb") as out_f:
        output.write(out_f)

pdf 本身被裁剪,但未裁剪的 pdf 的所有文本仍被保留。如果我复制新 PDF 的所有内容,即使是裁剪(不可见)的文本也会被复制。

【问题讨论】:

  • 你能提供测试pdf吗? :D
  • 但是如果我的理解是正确的,你不能通过裁剪pdf直接删除文本数据,数据流中仍然存在不可见的内容。
  • 您好,很抱歉回复晚了。我使用的 PDF 可以在这里找到update.uu.se/~jolkkonen/pdf/CRC_TD.pdf

标签: python pdf


【解决方案1】:

在我玩弄了您的 PDF 并进行裁剪后,我发现无法裁剪并删除 invisible 数据。

基本上,裁剪所做的是将/CropBox [ 50 50 200 200 ] 元素添加到 PDF,但实际数据仍保留在 PDF 中。

提示:尝试在不裁剪的情况下提取数据,也可以使用 pdfminerghostscript 之类的库,或者再次尝试提取文本或获取上下文框的 PyPDF

【讨论】:

  • 没错,不是因为Python;这就是 PDF 裁剪。当您使用裁剪功能时,一些 GUI 工具会发出警告。您需要一种不同的方法,例如将每个页面元素复制到新页面,根据裁剪矩形检查其坐标。您可能不得不丢失一些半进半出的元素,但它应该适用于大多数文本。
  • @alexis 如果您可以提取文本并使用此内容编写新文件,为什么要复制:D
  • 这样做的目的是隔离 PDF 中的数据列。我需要解析 PDF 中的数据并将其转换为易于软件索引的格式。问题是,表格中的空白点没有用任何东西表示。因此,当我从 PDF 中提取数据时,我没有机会知道特定数据块在表中的位置。我的想法是隔离每一页的列,这样我就可以检测到空白的位置,并以这种方式解析数据。
  • @Fabian,这取决于你的目标是什么!通常,如果您想分发 PDF 文件,您可以裁剪 PDF,而无需裁剪掉的内容。如果要提取文本,裁剪是错误的方法。
  • @cnovrup,那你就离题了! :-) 种植不是要走的路。请发布一个 问题并询问您在评论中写的内容。 (请提供有关“隔离数据列”的更多详细信息)。例如,我相信有一些 PDF 库可以为您提供结构化表格。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-23
  • 1970-01-01
  • 2013-08-10
  • 2010-10-02
  • 2018-12-23
相关资源
最近更新 更多