简体   繁体   English

PDFBOX:使用pdfbox编制索引

[英]PDFBOX: Indexing using pdfbox

I am in requirement of creating an index for PDF document & based on the index i want to display the page. 我需要为PDF文档创建索引,并基于要显示页面的索引。

problem is page number are created dynamically so static page number cannot be used, can anyone suggest me links or examples 问题是页码是动态创建的,因此无法使用静态页码,任何人都可以建议我提供链接或示例

here is my code and it works for me to redirect into different pages while clicking in the page number on index page 这是我的代码,当我在索引页上单击页码时,它可以重定向到其他页面

public class LinkPdf {

static final float INCH = 72;
public static List<PDAnnotation> annotations;

@SuppressWarnings("null")
public static void main(String[] args) throws Exception {
    PDRectangle position = null;
    PDDocument document = new PDDocument();
    try {
        for (int i = 0; i < 10; i++) {
            PDPage page = new PDPage();
            document.addPage(page);
        }
        PDPage page1 = document.getPage(0);

        HashMap<Integer, String> pgs = new HashMap<Integer, String>();

        for (int i = 0; i < document.getNumberOfPages(); i++) {
            pgs.put(i, "Jump to Page" + i);

        }

        PDFont font = PDType1Font.HELVETICA_BOLD;
        PDPageContentStream contents = new PDPageContentStream(document,
                page1);
        contents.beginText();
        contents.setFont(font, 18);
        contents.newLineAtOffset(50, 600);
        contents.setLeading(20f);
        contents.showText("PDFBox");

        position = new PDRectangle();
        for (int i = 0; i < document.getNumberOfPages(); i++) {

            contents.newLine();
            contents.showText(pgs.get(i));
            contents.newLine();
        }
        contents.endText();
        contents.close();

        PDRectangle[] pos1 = new PDRectangle[document.getNumberOfPages()];
        for(int i=0;i<document.getNumberOfPages();i++){
            pos1[i]=new PDRectangle();
            pos1[i].setLowerLeftX(50);
            pos1[i].setLowerLeftY(575-(i*40)); 
            pos1[i].setUpperRightX(INCH + 100);
            pos1[i].setUpperRightY(585-(i*40));
            getPage(document, page1, pgs.get(i), i, pos1[i]);
        }

        document.save("D:/link.pdf");
        System.out.println("Completed");
    } finally {
        document.close();
    }
}

public static void getPage(PDDocument document, PDPage page1, String txt,
        int pageno, PDRectangle position) throws IOException {
    annotations = page1.getAnnotations();
    PDBorderStyleDictionary borderThick = new PDBorderStyleDictionary();
    borderThick.setWidth(INCH / 12); // 12th inch

    PDBorderStyleDictionary borderThin = new PDBorderStyleDictionary();
    borderThin.setWidth(INCH / 72); // 1 point

    PDBorderStyleDictionary borderULine = new PDBorderStyleDictionary();
    borderULine.setStyle(PDBorderStyleDictionary.STYLE_UNDERLINE);
    borderULine.setWidth(INCH / 72); // 1 point

    float pw = page1.getMediaBox().getUpperRightX();
    float ph = page1.getMediaBox().getUpperRightY();
    float textWidth = PDType1Font.TIMES_BOLD.getStringWidth("PDFBox") / 1000 * 18;

    PDAnnotationLink pageLink = new PDAnnotationLink();
    pageLink.setBorderStyle(borderULine);
    textWidth = PDType1Font.TIMES_BOLD.getStringWidth(txt) / 1000 * 18;

    pageLink.setRectangle(position);
    PDActionGoTo actionGoto = new PDActionGoTo();
    PDPageDestination dest = new PDPageFitWidthDestination();
    dest.setPage(document.getPage(pageno));
    actionGoto.setDestination(dest);
    pageLink.setAction(actionGoto);
    annotations.add(pageLink);
}
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM