使用PDFBox添加页码 [英] Adding page numbers using PDFBox

查看:573
本文介绍了使用PDFBox添加页码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何将页码添加到使用PDFBox生成的文档中的页面?

How can I add page number to a page in a document generated using PDFBox?

任何人都可以告诉我如何在合并后将页码添加到文档中PDF文件?我在Java中使用PDFBox库。

Can anybody tell me how to add page numbers to a document after I merge different PDFs? I am using the PDFBox library in Java.

这是我的代码,它运行良好,但我需要添加页码。

This is my code and it works well but I need to add page number.

 PDFMergerUtility ut = new PDFMergerUtility();
        ut.addSource("c:\\pdf1.pdf");
        ut.addSource("c:\\pdf2.pdf");
        ut.addSource("c:\\pdf3.pdf");
        ut.mergeDocuments();


推荐答案

您可能需要查看PDFBox示例 AddMessageToEachPage.java 。中央代码是:

You may want to look at the PDFBox sample AddMessageToEachPage.java. The central code is:

try (PDDocument doc = PDDocument.load(new File(file)))
{
    PDFont font = PDType1Font.HELVETICA_BOLD;
    float fontSize = 36.0f;

    for( PDPage page : doc.getPages() )
    {
        PDRectangle pageSize = page.getMediaBox();
        float stringWidth = font.getStringWidth( message )*fontSize/1000f;
        // calculate to center of the page
        int rotation = page.getRotation();
        boolean rotate = rotation == 90 || rotation == 270;
        float pageWidth = rotate ? pageSize.getHeight() : pageSize.getWidth();
        float pageHeight = rotate ? pageSize.getWidth() : pageSize.getHeight();
        float centerX = rotate ? pageHeight/2f : (pageWidth - stringWidth)/2f;
        float centerY = rotate ? (pageWidth - stringWidth)/2f : pageHeight/2f;

        // append the content to the existing stream
        try (PDPageContentStream contentStream = new PDPageContentStream(doc, page, AppendMode.APPEND, true, true))
        {
            contentStream.beginText();
            // set font and font size
            contentStream.setFont( font, fontSize );
            // set text color to red
            contentStream.setNonStrokingColor(255, 0, 0);
            if (rotate)
            {
                // rotate the text according to the page rotation
                contentStream.setTextMatrix(Matrix.getRotateInstance(Math.PI / 2, centerX, centerY));
            }
            else
            {
                contentStream.setTextMatrix(Matrix.getTranslateInstance(centerX, centerY));
            }
            contentStream.showText(message);
            contentStream.endText();
        }
    }

    doc.save( outfile );
}

1.8.x吊坠是:

PDDocument doc = null;
try
{
    doc = PDDocument.load( file );

    List allPages = doc.getDocumentCatalog().getAllPages();
    PDFont font = PDType1Font.HELVETICA_BOLD;
    float fontSize = 36.0f;

    for( int i=0; i<allPages.size(); i++ )
    {
        PDPage page = (PDPage)allPages.get( i );
        PDRectangle pageSize = page.findMediaBox();
        float stringWidth = font.getStringWidth( message )*fontSize/1000f;
        // calculate to center of the page
        int rotation = page.findRotation(); 
        boolean rotate = rotation == 90 || rotation == 270;
        float pageWidth = rotate ? pageSize.getHeight() : pageSize.getWidth();
        float pageHeight = rotate ? pageSize.getWidth() : pageSize.getHeight();
        double centeredXPosition = rotate ? pageHeight/2f : (pageWidth - stringWidth)/2f;
        double centeredYPosition = rotate ? (pageWidth - stringWidth)/2f : pageHeight/2f;
        // append the content to the existing stream
        PDPageContentStream contentStream = new PDPageContentStream(doc, page, true, true,true);
        contentStream.beginText();
        // set font and font size
        contentStream.setFont( font, fontSize );
        // set text color to red
        contentStream.setNonStrokingColor(255, 0, 0);
        if (rotate)
        {
            // rotate the text according to the page rotation
            contentStream.setTextRotation(Math.PI/2, centeredXPosition, centeredYPosition);
        }
        else
        {
            contentStream.setTextTranslation(centeredXPosition, centeredYPosition);
        }
        contentStream.drawString( message );
        contentStream.endText();
        contentStream.close();
    }

    doc.save( outfile );
}
finally
{
    if( doc != null )
    {
        doc.close();
    }
}

您可以添加页码,而不是消息。而不是中心,你可以使用任何位置。

Instead of the message, you can add page numbers. And instead of the center, you can use any position.

(虽然可以改进示例: MediaBox 是错误的选择,应该使用 CropBox ,页面旋转处理只能正确处理0°和90°; 180°和270°会产生颠倒的书写。)

(The example can be improved, though: the MediaBox is the wrong choice, the CropBox should be used, and the page rotation handling only appears to properly handle 0° and 90°; 180° and 270° create upside-down writing.)

这篇关于使用PDFBox添加页码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆