我一直在使用PDFBox 1.8來處理pdf。現在我打算轉移到PDFBox 2.0-RC-2。我在遷移時遇到了一些麻煩。從PDFBox 1.x移動到PDFBox 2
隨着PDFBox的1.8,我用來獲取從PDPage令牌使用:
PDStream contents = page.getContents();
PDFStreamParser parser = new PDFStreamParser(contents.getStream());
parser.parse();
List<Object> tokens = parser.getTokens();
然而,page.getContents()
返回PDFBox的2的InputStream如何獲得PDStream?我應該使用page.getContentStreams()
(它返回Iterable)並遍歷它嗎?另外,構造函數new PDFStreamParser(COSStream)
似乎已被棄用。
我的另一個問題是圖像替換。我在PDFBox的2.0與另一使用replaceWithStream
PDResources resources = page.getResources();
Iterable<COSName> xObjectNames = resources.getXObjectNames();
if (null != xObjectNames) {
for(COSName xObjectName : xObjectNames){
PDXObject object = resources.getXObject(xObjectName);
if (object instanceof PDImageXObject) {
PDImageXObject img1 = (PDImageXObject) object;
PDImageXObject img2 = ....
img1.getCOSStream().replaceWithStream(
img2.getCOSStream());
}
}
}
的replaceWithStream
方法在PDFBox的1.8棄用替換一個圖像,因此,它已被完全去除。用img2替代img1的另一種方式是什麼?
有關@drunkenfist遺憾。我會在明天進行調查(現在是午夜)。舊圖像和新圖像是什麼類型的圖像? (jpeg,pixelmap,ccitt?) –
對不起,剛纔注意到IOUtils.copy沒有按預期工作。當我嘗試打開PDF時,出現錯誤,提示圖像數據不足。當我使用replaceWithStream時,它在1.8版本中工作得更早。我可以看到InputStream具有內容。我是否需要以某種方式將OutputStream寫回pdf?我不假設。 – drunkenfist
@drunkenfist顯然你需要保存PDF。你可能用1.8來做什麼。 –