我想过滤 RENDER_TEXT 事件,因为它们被写入输出文件。我有一个 PDF,里面有一些我想过滤掉的文本。我发现我可以遍历文档一次并确定我想要过滤的渲染事件的特征。现在我想复制源文档的页面并跳过一些 RENDER_TEXT 事件,以便文本不会出现在目标文档中。我有一个 IEventFilter 可以接受正确的事件。我只需要知道如何将此过滤器放在文档编写器上。
目标是采用议程格式从 Google 日历创建的 PDF 并删除“创建者:”和“日历:”行。这些行通常由 3 个 RENDER_TEXT 事件组成。
我当前的代码如下。我发现所有具有相同基线 y 坐标的 RENDER_TEXT 事件将标识我想要删除的事件。
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.itextpdf.kernel.geom.LineSegment;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.parser.EventType;
import com.itextpdf.kernel.pdf.canvas.parser.PdfCanvasProcessor;
import com.itextpdf.kernel.pdf.canvas.parser.data.IEventData;
import com.itextpdf.kernel.pdf.canvas.parser.data.TextRenderInfo;
import com.itextpdf.kernel.pdf.canvas.parser.filter.IEventFilter;
import com.itextpdf.kernel.pdf.canvas.parser.listener.IEventListener;
public class Main {
private static final Logger LOGGER = LogManager.getLogger();
public static void main(String[] args) throws FileNotFoundException, IOException {
final Path src = Paths.get("calendar_2018-08-04_2018-08-19.pdf");
final Path dest = Paths.get("/home/jpschewe/Downloads/calendar_clean.pdf");
final Main app = new Main(src, dest);
}
喵喔喔
相关分类