使用iText 7合并时修改PDF文档大纲

时间:2017-11-15 14:00:40

标签: pdf itext7

我有多个PDF文档,我正在合并到一个文档中。目标是创建一个全新的大纲。这些子文档中的每一个都可以有自己的轮廓,我需要删除它们并在每个文档的大纲中有一个条目。如果我单击合并文档中的大纲,则必须将用户带到插入子文档的特定页面。

我正在合并并删除现有的大纲如下:

InputStream intputSteam = googleDriveService.executeMediaAsInputStream(fileId);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());

PdfDocument pdfDocument1 = new PdfDocument(new PdfReader(bais));
PdfDocument pdfDocument2 = new PdfDocument(new PdfReader(intputSteam));

PdfDocument mergedDocument = new PdfDocument(new PdfWriter(baos));

PdfMerger merger = new PdfMerger(mergedDocument);
merger.setCloseSourceDocuments(true)
        .merge(pdfDocument1, 1, pdfDocument1.getNumberOfPages())
        .merge(pdfDocument2, 1, pdfDocument2.getNumberOfPages());

mergedDocument.getCatalog().remove(PdfName.Outlines);
mergedDocument.close();

合并后的文档会上传到Google云端硬盘。稍后在执行中,合并的文档将从Google云端硬盘加载到内存中,我将添加如下大纲:

InputStream inputStream = driveService.files().get(fileId).executeMediaAsInputStream();

ByteArrayOutputStream baos = new ByteArrayOutputStream();

PdfReader pdfReader = new PdfReader(inputStream);
PdfWriter pdfWriter = new PdfWriter(baos);

PdfDocument doc = new PdfDocument(pdfReader, pdfWriter);

PdfOutline pdfOutine = doc.getOutlines(false);
pdfOutine.addOutline("test #1").addAction(PdfAction.createGoTo(PdfExplicitDestination.createFit(5)));

doc.close();

//将文档上传到Google云端硬盘

ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());

File fileMetadata = new File();
fileMetadata.setName("generated-doc.pdf");

InputStreamContent inputStreamContent = new InputStreamContent("application/pdf", bais);

driveService.files().create(fileMetadata, inputStreamContent)
                                        .execute();

在生成的文档中,子文档中的大纲已被删除,但尚未添加新大纲。我添加大纲的方式有问题吗?

0 个答案:

没有答案