gpt4 book ai didi

java - 从 PDPage#getMediaBox() 获取空值

转载 作者:行者123 更新时间:2023-11-30 06:55:50 25 4
gpt4 key购买 nike

我需要使用 Mediabox 从 pdf 获取页面中的坐标,但对于某些 pdf,我得到 null,而对于其他 pdf,我得到常规 Mediabox。为什么会这样?该方法是如何工作的?

private void addPDF(File pdf) throws IOException, InterruptedException {
waiting_label.setText("");
pdf_name.setText(pdf.getName());
all_my_p = new ArrayList<>();
System.out.println("prova.JPanelImageAndButton.addPDF()");
/*pddoc = null;
cosdoc = null;*/
PDFParser parser = new PDFParser(new FileInputStream(pdf));
parser.parse();
cosdoc = parser.getDocument();
pddoc = new PDDocument(cosdoc);
List<PDPage> list = pddoc.getDocumentCatalog().getAllPages();

pdf_name.setText(pdf.getName());

if (my_p != null) {
remove(my_p);
}
JFrame top = (JFrame) SwingUtilities.getWindowAncestor(this);
Dimension d = new Dimension(top.getWidth(), top.getHeight() - p.getHeight());
for (int i = 0; i < n_page; i++) {
PDPage pdp=list.get(i);
System.out.println("prova.JPanelImageAndButton.addPDF()"+pdp.getMediaBox());

final MyPanelFrame t = new MyPanelFrame(pdf.getName() + "_temp" + (i + 1) + ".png", pdp);
t.setPreferredSize(d);
t.setBounds(new Rectangle(10, 30, top.getWidth(), top.getHeight()));
t.addHierarchyBoundsListener(new HierarchyBoundsListener() {
@Override
public void ancestorMoved(HierarchyEvent e) {
}

@Override
public void ancestorResized(HierarchyEvent e) {
t.setPreferredSize(new Dimension(top.getWidth(), top.getHeight() - p.getHeight()));
t.setBounds(new Rectangle(10, 30, top.getWidth(), top.getWidth()));
top.revalidate();
}
});
all_my_p.add(t);
}
my_p = all_my_p.get(0);

add(my_p);

top.setSize(top.getWidth() + 1, top.getHeight() + 1);
top.revalidate();
top.setSize(top.getWidth() - 1, top.getHeight() - 1);
top.revalidate();
top.setExtendedState(JFrame.MAXIMIZED_BOTH);
label_load.setText("");
label_save.setText("");
activityDone = true;

//pddoc.close();
//cosdoc.close();
}

这是一个示例,但对于同一个 pdf,我在使用 getMediaBox() 的任何地方都得到 null。

最佳答案

您似乎使用 1.x.x 版本的 PDFBox。对于这些版本,观察到的行为是可以预料的,参见。方法的 JavaDocs:

/**
* A rectangle, expressed
* in default user space units, defining the boundaries of the physical
* medium on which the page is intended to be displayed or printed
*
* This will get the MediaBox at this page and not look up the hierarchy.
* This attribute is inheritable, and findMediaBox() should probably used.
* This will return null if no MediaBox are available at this level.
*
* @return The MediaBox at this level in the hierarchy.
*/
public PDRectangle getMediaBox()

此评论也提供了解决方案,请改用 findMediaBox():

/**
* This will find the MediaBox for this page by looking up the hierarchy until
* it finds them.
*
* @return The MediaBox at this level in the hierarchy.
*/
public PDRectangle findMediaBox()

如果您打算切换到 PDFBox 2.0.0,您会发现 getMediaBox 的行为发生了变化,如果需要它已经遍历层次结构并且没有 findMediaBox 了。

关于java - 从 PDPage#getMediaBox() 获取空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34871443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com