PDFBox 不保留页面子类

PDFBox not keeping page subclass

提问人:Neil 提问时间:10/31/2023 更新时间:10/31/2023 访问量:33

问:

这似乎很奇怪。我正在使用 PDFBox 3。我正在尝试使用页面的子类,以便可以向其添加布局功能。

当我将子类的一页添加到文档并尝试取回它时,我得到的是一个 PDPage 实例,而不是我的子类实例。

下面是一个简单的子类:

package pdfBox;

import org.apache.pdfbox.pdmodel.PDPage;

public class MyPage extends PDPage {
}

下面是一段测试代码:

package pdfBox;

import org.apache.pdfbox.pdmodel.PDDocument;

public class PageTest {
  public static void main(String[] args) {
    PDDocument doc = new PDDocument();
    doc.addPage(new MyPage());
    MyPage myPage = (MyPage)doc.getPage(0);
  }
}

当我尝试投射页面时,我收到此异常:

java.lang.ClassCastException: class org.apache.pdfbox.pdmodel.PDPage cannot be cast to class pdfBox.MyPage

有什么想法为什么 PDFBox 不保留子类吗?

Java PDF框

评论

1赞 tgdavies 10/31/2023
看一看PDPageTree.add的来源
1赞 Tilman Hausherr 10/31/2023
不缓存 PDPage 对象。每次从 COSDictionary 结构中创建一个新的。这是你的目标,所以你自己保留它。
0赞 Neil 10/31/2023
@TilmanHausherr请将此添加为答案,以便我接受。谢谢。
0赞 Neil 10/31/2023
@tgdavies 谢谢你的信息。看起来有一个成员 COSObject 被保存,然后丢弃页面对象。

答:

2赞 Tilman Hausherr 10/31/2023 #1

不缓存 PDPage 对象。每次从 COSDictionary 结构中创建一个新的。这是你的目标,所以你自己保留它。