【问题标题】:Getting PDF page length获取 PDF 页面长度
【发布时间】:2019-04-25 10:32:04
【问题描述】:

在我的 PDF 格式文章中,一页或多页可能是空白的,我想检测它们并从 PDF 文件中删除。如果我可以识别小于 60 KB 的页面,我想我可以检测到空页面。因为它们可能是空的。

我试过这样:

var reader = new PdfReader("D:\\_test\\file.pdf");
/*
 * With reader.FileLength, I can get whole pdf file size.
 * But I dont know, how can I get pages'sizes...
 */
for (var i = 1; i <= reader.NumberOfPages; i++)
{
    /*
     * MessageBox.Show(???);
     */
}

【问题讨论】:

  • splitting the PDF into multiple PDFs, one for each page然后测量它们各自的尺寸怎么样?
  • @uweKeim,我不想逐页拆分 PDF 文件。因为想想如果我一页一页地拆分故事书会对我有用。在逐页拆分页面并删除空白页面后重新组装页面听起来不专业。

标签: c# itext page-size


【解决方案1】:

我会分两步完成:

  • 首先使用 IEventListener 遍历文档以检测哪些页面是空的
  • 确定哪些页面为空后,只需将源文档中的非空页面复制到新文档中即可创建一个新文档

第 1 步:

List<Integer> emptyPages = new ArrayList<>();
PdfDocument pdfDocument = new PdfDocument(new PdfReader(new File(SRC)));
for(int i=1;i<pdfDocument.getNumberOfPages();i++){
    IsEmptyEventListener l = new IsEmptyEventListener();
    new PdfCanvasProcessor(l).processPageContent(pdfDocument.getPage(i));
    if(l.isEmptyPage()){
        emptyPages.add(i);
    } 
}

那么您需要正确实现 IsEmptyEventListener。这可能很棘手,取决于您的特定文件。这是一个演示。

class IsEmptyEventListener implements IEventListener {
    private int eventCount = 0;
    public void eventOccurred(IEventData data, EventType type){
        // perhaps count only text rendering events?
        eventCount++;
    }
    public boolean isEmptyPage(){ return eventCount < 32; }
}

第 2 步:

基于此示例:https://developers.itextpdf.com/examples/stamping-content-existing-pdfs/clone-reordering-pages

void copyNonBlankPages(List<Integer> blankPages, PdfDocument src, PdfDocument dst){
    int N = src.getNumberOfPages();
    List<Integer> toCopy = new ArrayList<>();
    for(int i=1;i<N;i++){
        if(!blankPages.contains(i)){
            toCopy.add(i);
        }
    }
    src.copyPagesTo(toCopy, dst);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    • 2010-10-14
    • 2018-07-26
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    相关资源
    最近更新 更多