如何使用pdfbox连接两个pdf并保留书签和pdf / a合规性?

时间:2014-11-02 01:45:23

标签: java pdf pdfbox pdfa dspace

代码:

    /**
 * Creates a
 * cited document from the given bitstream of the given item. This
 * requires that bitstream is contained in item.
 * <p>
 * The Process for adding a cover page is as follows:
 * <ol>
 *  <li> Load source file into PdfReader and create a
 *     Document to put our cover page into.</li>
 *  <li> Create cover page and add content to it.</li>
 *  <li> Concatenate the coverpage and the source
 *     document.</li>
 * </p>
 *
 * @param bitstream The source bitstream being cited. This must be a PDF.
 * @return The temporary File that is the finished, cited document.
 * @throws java.io.FileNotFoundException
 * @throws SQLException
 * @throws org.dspace.authorize.AuthorizeException
 */
public File makeCitedDocument(Bitstream bitstream)
        throws IOException, SQLException, AuthorizeException, COSVisitorException {
    PDDocument document = new PDDocument();
    PDDocument sourceDocument = new PDDocument();
    try {
        Item item = (Item) bitstream.getParentObject();
        sourceDocument = sourceDocument.load(bitstream.retrieve());
        PDPage coverPage = new PDPage(PDPage.PAGE_SIZE_LETTER);
        generateCoverPage(document, coverPage, item);
        addCoverPageToDocument(document, sourceDocument, coverPage);

        document.save(tempDir.getAbsolutePath() + "/bitstream.cover.pdf");
        return new File(tempDir.getAbsolutePath() + "/bitstream.cover.pdf");
    } finally {
        sourceDocument.close();
        document.close();
    }
}

我在pdf合并后试图实现的目标:

  • 如果sourceDocument符合PDF / A标准,则保留PDF / A合规性
  • 如果sourceDocument包含书签
  • ,则保留书签
  • 保留sourceDocument的元数据(例如标题,作者,主题,关键字)

请不要建议iText,我已经使用iText实现了这一点,但由于许可,我们需要使用pdfbox。还请注意我没有写这些代码,这是来自dspace。您可以在此处找到完整的代码:CitationDocument.java

0 个答案:

没有答案