如何缩小PDF格式的内容?

我有一个pdf,我需要缩小规模。 pdf处于A4纵向模式,我需要的是将pdf的内容缩小到5%,并将其放入A4 A4和纵向模式的新PDF中。 它不是将pdf转换为图像,缩放它们并将其放回pdf的选项。 我正在寻找一种方法来解决这个问题。 有没有办法用pdfbox或itext解决这个问题?

如果你使用iText 7 ,那么这是一个选项:

public void manipulatePdf(String src, String dest) throws IOException { PdfDocument pdfDoc = new PdfDocument(new PdfReader(src), new PdfWriter(dest)); int n = pdfDoc.getNumberOfPages(); PdfPage page; for (int p = 1; p <= n; p++) { new PdfCanvas(pdfDoc.getPage(p).newContentStreamBefore(), new PdfResources(), pdfDoc).writeLiteral("\nq 0.05 0 0 0.05 0 0 cm\nq\n"); new PdfCanvas(pdfDoc.getPage(p).newContentStreamAfter(), new PdfResources(), pdfDoc).writeLiteral("\nQ\nQ\n"); } pdfDoc.close(); } 

请注意,5%( writeLiteral()方法中的0.05值)非常小。 如果有文字,将很难阅读它所说的内容。 也许你的意思是95%。 在这种情况下,使用: writeLiteral("\nq 0.95 0 0 0.95 0 0 cm\nq\n")

来源: 如何缩小现有PDF中的页面?

注意:iText 5已停产,但iText 5答案已于2014年在Stack Overflow上发布: 在现有PDF中使用矩形缩小PDF页面

回答PDFBox 2.0。*:

 try (PDDocument doc = PDDocument.load(new File("..."))) { for (int p = 0; p < doc.getNumberOfPages(); ++p) { PDPage page = doc.getPage(p); try (PDPageContentStream cs = new PDPageContentStream(doc, page, AppendMode.PREPEND, true)) { cs.saveGraphicsState(); cs.transform(Matrix.getScaleInstance(0.05f, 0.05f)); cs.saveGraphicsState(); } try (PDPageContentStream cs = new PDPageContentStream(doc, page, AppendMode.APPEND, true)) { cs.restoreGraphicsState(); cs.restoreGraphicsState(); } } doc.save(new File("....")); } 

你会在左下角看到一些微小的东西。