Java - apache PDFBox两张A3论文到一张A2?

时间:2013-05-17 22:06:16

标签: java apache pdf pdfbox printers

我有一台不支持我需要的功能的打印机。

打印机打印A2纸张尺寸。我想打印两个A3尺寸的页面, 适合单张A2纸张,但我的打印机不支持此功能。

我已经打电话给公司支持了,但是他们告诉我需要买一个新的,因为我的打印机不支持这个功能。 (非常有趣,因为该打印机的旧版本确实支持此功能)。

所以我尝试使用Apache PDFBox,我可以在这里加载我的pdf文件:

File pdfFile = new File(path);
PDDocument pdfDocument = load(pdfFile);

我加载的文件大小为A3。我想如果我能得到一张纸张大小为A2的新PDDocument就足够了。然后将我加载的pdfFile两次放入A2论文。

总而言之,我需要在一页上加载两次的文件。我只是不知道该怎么做。

最好的问候。

1 个答案:

答案 0 :(得分:0)

您可能希望查看根据其JavaDoc几乎所需的PageCombinationSample.java

  

此示例演示如何将多个页面组合成单个较大的页面(例如      使用XObjects [PDF:1.6:4.9]形式将两个A4模块合并为一个A3模块。      

表单XObjects是一种在多个页面上多次表示内容的便捷方式      模板。

中央代码:

// 1. Opening the source PDF file...
File sourceFile = new File(filePath);

// 2. Instantiate the target PDF file!
File file = new File();

// 3. Source page combination into target file.
Document document = file.getDocument();
Pages pages = document.getPages();
int pageIndex = -1;
PrimitiveComposer composer = null;
Dimension2D targetPageSize = PageFormat.getSize(SizeEnum.A4);
for(Page sourcePage : sourceFile.getDocument().getPages())
{
    pageIndex++;
    int pageMod = pageIndex % 2;
    if(pageMod == 0)
    {
        if(composer != null)
        {composer.flush();}

        // Add a page to the target document!
        Page page = new Page(
            document,
            PageFormat.getSize(SizeEnum.A3, OrientationEnum.Landscape)
        ); // Instantiates the page inside the document context.
        pages.add(page); // Puts the page in the pages collection.
        // Create a composer for the target content stream!
        composer = new PrimitiveComposer(page);
    }

    // Add the form to the target page!
    composer.showXObject(
        sourcePage.toXObject(document), // Converts the source page into a form inside the target document.
        new Point2D.Double(targetPageSize.getWidth() * pageMod, 0),
        targetPageSize,
        XAlignmentEnum.Left,
        YAlignmentEnum.Top,
        0
    );
}
composer.flush();

// 4. Serialize the PDF file!
serialize(file, "Page combination", "combining multiple pages into single bigger ones", "page combination");

// 5. Closing the PDF file...
sourceFile.close();