iText に問題があります。
大量の画像を含む PDF を作成しているため、Java ヒープ領域が非常に簡単に不足します。
Eclipse Memory Analyzer で dmp を分析しようとしたところ、すべてのイメージが約 10MB のヒープ スペースを使用していることがわかりました。しかし、HDには約350KBしかありません
ヒープを HD にフラッシュして作成を続行する機会はありますか?
他によくある漏れはありますか?
残念ながら、まだ有用なものは何も見つかりませんでした。
これは、1 つの画像のヒープがどのように見えるかです。
一般に、追加された要素はキャッシュに残っていると思います...どうすればそれらを取り出すことができますか?
このようなことは可能ですか?
それは私が当時使っていたコードです:
Document document = new Document();
PdfWriter writer = null;
try {
writer = PdfWriter.getInstance(document, new FileOutputStream(this.savePath));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
document.open();
Paragraph pdfTitle = new Paragraph();
pdfTitle.add(new Phrase("Title"));
try {
document.add(pdfTitle);
document.add(Chunk.NEWLINE);
} catch (DocumentException e) {
e.printStackTrace();
}
for(int x = 0; x < 10; x++){
//chapter
Paragraph chapterName = new Paragraph("Chapter "+x, FONT[1]);
ChapterAutoNumber chapter = new ChapterAutoNumber(chapterName);
try {
document.add(chapterhapter);
} catch (DocumentException e) {
e.printStackTrace();
}
for(int y = 0; y < 10; y++){
//sec
Paragraph sectionName = new Paragraph("Section "+y, FONT[2]);
Section section = chapter.addSection(sectionName);
for(int z = 0; z < 10; z++){
//subSec
Section subSection = null;
Image image = null;
try {
image = Image.getInstance(path);
} catch (BadElementException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
image.scalePercent(50);
image.setCompressionLevel(9);
Paragraph subDesc = new Paragraph("Desc "+z, FONT[3]);
subSection = section.addSection(subDesc);
picSection.add(image);
try {
document.add(subSection);
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
}
document.close();