将PDF页面拆分为C#中的多个页面

时间:2014-06-13 06:37:46

标签: c# pdf split

我正在用C#创建Windows 8.1的应用程序。进入Windows.Data.Pdf我发现如何在我的应用程序中使用PDF文件。但我想知道我是否可以将一个A3页面分成多个PDF文件?

1 个答案:

答案 0 :(得分:1)

您不想拆分页面,而是想要平铺它。

Chapter 6 of my book(第6.2.3节)对此进行了解释。请查看TilingHero示例(Java / C#)。在此示例中,一个大页面(hero.pdf)被拆分为具有多个A4页面(superman.pdf)的PDF。

enter image description here

这是一些代码:

PdfReader reader = new PdfReader(resource);
Rectangle pagesize = reader.GetPageSizeWithRotation(1); 
using (Document document = new Document(pagesize)) {
    // step 2
    PdfWriter writer = PdfWriter.GetInstance(document, ms);
    // step 3
    document.Open();
    // step 4
    PdfContentByte content = writer.DirectContent;
    PdfImportedPage page = writer.GetImportedPage(reader, 1);
    // adding the same page 16 times with a different offset
    float x, y;
    for (int i = 0; i < 16; i++) {
        x = -pagesize.Width * (i % 4);
        y = pagesize.Height * (i / 4 - 3);
        content.AddTemplate(page, 4, 0, 0, 4, x, y);
        document.NewPage();
     }
}

数学对A0页面有效。您需要将其调整为A3页面(意思是:您需要的数学运算更容易)。

您需要计算pagesize以便它会导致较小的页面,然后使用以下内容:

using (Document document = new Document(pagesize)) {
    // step 2
    PdfWriter writer = PdfWriter.GetInstance(document, ms);
    // step 3
    document.Open();
    // step 4
    PdfContentByte content = writer.DirectContent;
    PdfImportedPage page = writer.GetImportedPage(reader, 1);
    // adding the same page 16 times with a different offset
    float x, y;
    for (int i = 0; i < 16; i++) {
        x = -pagesize.Width * (i % 4);
        y = pagesize.Height * (i / 4 - 3);
        content.AddTemplate(page, x, y); // we don't scale anymore
        document.NewPage();
     }
}