获取 PDF 页面长度
Posted
技术标签:
【中文标题】获取 PDF 页面长度【英文标题】:Getting PDF page length 【发布时间】: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 文件。因为想想如果我一页一页地拆分故事书会对我有用。在逐页拆分页面并删除空白页面后重新组装页面听起来不专业。 【参考方案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);
【讨论】:
以上是关于获取 PDF 页面长度的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Python 获取 PDF 文件元数据“页面大小”?