我有一台不支持我需要的功能的打印机。
打印机打印A2
纸张尺寸。我想打印两个A3
尺寸的页面, 适合单张A2
纸张,但我的打印机不支持此功能。
我已经打电话给公司支持了,但是他们告诉我需要买一个新的,因为我的打印机不支持这个功能。 (非常有趣,因为该打印机的旧版本确实支持此功能)。
所以我尝试使用Apache PDFBox,我可以在这里加载我的pdf文件:
File pdfFile = new File(path);
PDDocument pdfDocument = load(pdfFile);
我加载的文件大小为A3
。我想如果我能得到一张纸张大小为A2
的新PDDocument就足够了。然后将我加载的pdfFile
两次放入A2
论文。
总而言之,我需要在一页上加载两次的文件。我只是不知道该怎么做。
最好的问候。
答案 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();