Java PDFBox, как получить объект File из PDDocument

Я пытаюсь получить экземпляр File или InputStream из PDDocument без сохранения PDDocument в файловой системе.

 PDDocument doc= new PDDocument(); 
 ...     
 doc.save("D:\\document.pdf"); 
 File f= new File("D:\\document.pdf"); 

Есть ли в PDFBox метод, который возвращает File или InputStream из существующего PDDocument?


person Milos Gavrilov    schedule 03.06.2013    source источник


Ответы (4)


Я решил это:

PDDocument doc=new PDDocument();        
PDStream ps=new PDStream(doc);
InputStream is=ps.createInputStream();
person Milos Gavrilov    schedule 04.06.2013
comment
Это решение не имеет никакого смысла. Я сомневаюсь, что кто-либо из проголосовавших на самом деле протестировал его, и, похоже, они не знают PDFBox. Например. JavaDocs конструктора public PDStream(PDDocument document) описывает параметр document как документ, частью которого будет поток. Таким образом, ps=new PDStream(doc) просто создает новый (пустой) поток PDF внутри документа, не поток, содержащий документ. - person mkl; 09.04.2018
comment
Может быть, это поможет: « title = «используя pdfbox, как мне получить содержимое pddocument в виде массива байтов»> stackoverflow.com/questions/11593116/ - person mkczyk; 10.02.2020

Я решаю это таким образом (он создает файл, но в каталоге временных файлов):

final PDDocument document = new PDDocument();
final File file = File.createTempFile(filename, ".pdf");
document.save(file);

и если вам нужно

document.close();
person Tomasz Przybylski    schedule 22.09.2015

Что, если вы сначала создадите выходной поток

PDDocument doc= new PDDocument(); 
File f= new File("D:\\document.pdf");
FileOutputStream fOut = new FileOutputStream(f);  
doc.save(fOut); 

Взгляните на этот http://pdfbox.apache.org/apidocs/org/apache/pdfbox/pdmodel/PDDocument.html#save(java.io.OutputStream)

person fGo    schedule 03.06.2013
comment
Проблема в том, что я не хочу создавать файл в своей файловой системе, я хочу поместить этот pdf-файл прямо в репозиторий Alfresco... вы знаете, как мне это сделать? - person Milos Gavrilov; 03.06.2013
comment
@MilosGavrilov, а какой протокол поддерживает alfresco для этой передачи? Потому что, как только вы получите выходной поток для записи, вы готовы к работе. - person fGo; 03.06.2013
comment
это не отвечает на вопрос, поскольку он получает поток из файла на компьютере. - person william.eyidi; 07.07.2015

Я пытаюсь получить экземпляр File или InputStream из PDDocument без сохранения PDDocument в файловой системе.

[...]

Есть ли в PDFBox метод, который возвращает File или InputStream из существующего PDDocument?

Очевидно, что PDFBox не может вернуть осмысленный объект File без сохранения PDDocument в файловой системе.

Он также не предлагает метод, предоставляющий InputStream напрямую, но легко написать вокруг него код, который это делает. например.:

InputStream docInputStream = null;

try (   ByteArrayOutputStream baos = new ByteArrayOutputStream();
        PDDocument doc = new PDDocument()   )
{
    [...]
    doc.save(baos);
    docInputStream = new ByteArrayInputStream(baos.toByteArray());
}
person mkl    schedule 09.04.2018