我正在尝试使用 Java 阅读 PDF 文档。我对此很陌生,而且对使用 IntelliJ 配置依赖项也很陌生。完整的错误是:
Exception in thread "main" java.lang.NoSuchMethodError: 'void org.apache.fontbox.cmap.CMapParser.<init>(boolean)'
at org.apache.pdfbox.pdmodel.font.CMapManager.parseCMap(CMapManager.java:74)
at org.apache.pdfbox.pdmodel.font.PDFont.readCMap(PDFont.java:213)
at org.apache.pdfbox.pdmodel.font.PDFont.loadUnicodeCmap(PDFont.java:147)
at org.apache.pdfbox.pdmodel.font.PDFont.<init>(PDFont.java:115)
at org.apache.pdfbox.pdmodel.font.PDSimpleFont.<init>(PDSimpleFont.java:74)
at org.apache.pdfbox.pdmodel.font.PDTrueTypeFont.<init>(PDTrueTypeFont.java:185)
at org.apache.pdfbox.pdmodel.font.PDFontFactory.createFont(PDFontFactory.java:89)
at org.apache.pdfbox.pdmodel.PDResources.getFont(PDResources.java:146)
at org.apache.pdfbox.contentstream.operator.text.SetFontAndSize.process(SetFontAndSize.java:66)
at org.apache.pdfbox.contentstream.PDFStreamEngine.processOperator(PDFStreamEngine.java:933)
at org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:515)
at org.apache.pdfbox.contentstream.PDFStreamEngine.processStream(PDFStreamEngine.java:489)
at org.apache.pdfbox.contentstream.PDFStreamEngine.processPage(PDFStreamEngine.java:156)
at org.apache.pdfbox.text.LegacyPDFStreamEngine.processPage(LegacyPDFStreamEngine.java:144)
at org.apache.pdfbox.text.PDFTextStripper.processPage(PDFTextStripper.java:394)
at org.apache.pdfbox.text.PDFTextStripper.processPages(PDFTextStripper.java:322)
at org.apache.pdfbox.text.PDFTextStripper.writeText(PDFTextStripper.java:269)
at org.apache.pdfbox.text.PDFTextStripper.getText(PDFTextStripper.java:233)
at com.company.Main.main(Main.java:18)
Run Code Online (Sandbox Code Playgroud)
我现在的代码:
public static void main(String[] args) throws IOException {
PDDocument document = PDDocument.load(new File("src/dummy.pdf"));
if(!document.isEncrypted()){
PDFTextStripper stripper = new PDFTextStripper();
String text = stripper.getText(document);
System.out.println("Text:"+text);
}
document.close();
} …Run Code Online (Sandbox Code Playgroud) 我一直试图通过阅读一些文本和查找内容来理解 C++ 中的内存分配。我经常看到人们应该总是在“new”之后调用“delete”。但是,我也看到这样的代码:
void LinkedList::add(int data){
Node* node = new Node();
node->data = data;
node->next = this->head;
this->head = node;
this->length++;
}
Run Code Online (Sandbox Code Playgroud)
在链表或堆栈等结构中。
我在 SO 上看到了一些很好的解释,例如:
为什么 C++ 程序员应该尽量减少“new”的使用? 在 C++ 中,何时使用“new”,何时不使用?
但是,我仍然很困惑为什么不在这里为新节点调用“删除”。
编辑:让我澄清我的问题。我明白为什么不立即以相同的方法调用 delete 。但是,在相同的代码中,我没有看到与添加匹配的删除语句。我假设一旦程序结束,一切都会被删除,但我很困惑,没有明显匹配的删除语句(即:计算代码中的所有新闻,计算代码中的所有删除,它们不匹配)。
编辑:这是我正在查看的来源:https : //www.geeksforgeeks.org/linked-list-set-2-inserting-a-node/
他们的链表的代码:
// A complete working C++ program to demonstrate
// all insertion methods on Linked List
#include <bits/stdc++.h>
using namespace std;
// A linked list node
class Node
{
public:
int data;
Node *next;
};
/* Given a reference (pointer …Run Code Online (Sandbox Code Playgroud)