【问题标题】:How to convert an existing A4 PDF document to an A3 booklet?如何将现有的 A4 PDF 文档转换为 A3 小册子?
【发布时间】:2016-03-05 07:27:08
【问题描述】:

您好,我们需要在 java 中将现有的 A4 大小的 PDF 转换为 A3 大小的 PDF。由于我是 itext api 转换 pdf 的新手,任何人都可以指导我如何在 java 中使用 itext 或任何其他 api 来做。如果提供了示例参考,那么可观。

更新:输出 PDF 应为 A3 小册子格式。

【问题讨论】:

  • 你可以使用ghostscript并通过Java中的命令调用来调用它
  • 谢谢。我需要批量生成 pdf,我不能使用命令行。有什么选择吗?
  • 请编辑问题以阐明“将 A4 转换为 A3”的含义。是否要缩放内容以使 A3 页面看起来与 A4 页面相同?您想保留内容大小,在 A3 页面上在其周围添加空白区域吗?你想把 2 个 A4 页面放在 1 个 A3 页面上吗?
  • @rhens,我需要把 A4 页面放在 A3 页面上。
  • 您是否尝试过使用PdfWriterPdfReaderPdfImportedPage?如果不是,为什么不呢?如果答案是:“因为我想让别人做我的工作”,请三思。

标签: java pdf pdf-generation itext


【解决方案1】:

请查看MakeA3Booklet 示例。 在这个例子中,我们将一个现有的包含 299 页 A4 (primes.pdf) 的 PDF 文档转换为 150 页 A3 小册子 (a3_booklet.pdf):

public void manipulatePdf(String src, String dest)
    throws IOException, DocumentException {
    // Creating a reader
    PdfReader reader = new PdfReader(src);
    // step 1
    Document document = new Document(PageSize.A3.rotate());
    // step 2
    PdfWriter writer
        = PdfWriter.getInstance(document, new FileOutputStream(dest));
    // step 3
    document.open();
    // step 4
    PdfContentByte canvas = writer.getDirectContent();
    float a4_width = PageSize.A4.getWidth();
    int n = reader.getNumberOfPages();
    int p = 0;
    PdfImportedPage page;
    while (p++ < n) {
        page = writer.getImportedPage(reader, p);
        if (p % 2 == 1) {
            canvas.addTemplate(page, 0, 0);
        }
        else {
            canvas.addTemplate(page, a4_width, 0);
            document.newPage();
        }
    }
    // step 5
    document.close();
    reader.close();
}

我们用PageSize.A3 作为参数创建了一个Document 对象,但是由于PageSize.A3 是纵向的,我们旋转它以便获得横向的页面大小。我们需要 A4 页面的宽度(横向格式 A3 页面宽度的一半),然后循环遍历现有文档中的所有页面。

如果遇到奇数页面,我们将其添加到位置(x = 0; y = 0)。如果遇到偶数页面,我们将其添加到位置(x = a4_width; y = 0) 并创建一个新页面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    • 2019-08-03
    • 2020-08-16
    • 2016-03-17
    • 1970-01-01
    相关资源
    最近更新 更多