iTextSharp调整每个页面的大小以适合页面大小

时间:2015-09-20 19:48:07

标签: c# pdf split resize itextsharp

我有一个.pdf文件,例如有7页。我将此文档拆分为7 .pdf文档,因此这意味着每个文档只有一个页面。但主要是我需要使页面的内容适合。所以删除空格,边距,调整大小。你有一些简单的建议吗?我添加图像链接以及拆分pdf文档的代码。感谢您的回复。

INPUT:

http://i.imgur.com/tgQK3hI.png

期望的输出:

http://i.imgur.com/v6cZDwg.png

CODE:

        public void PdfSplitDocument(string filename)
    {
        String path = "C:/Doc/" + filename;
        String result = "d:/output/result";
        PdfCopy copy;
        PdfReader reader = new PdfReader(path);

        for (int i = 1; i <= reader.NumberOfPages; i++)
        {

            Document document = new Document(PageSize.A4, 0, 0, 0, 0);
            copy = new PdfCopy(document, new FileStream(result + i + ".pdf", FileMode.Create));
            document.Open();
            copy.AddPage(copy.GetImportedPage(reader, i));
            document.Close();

        }

    }

1 个答案:

答案 0 :(得分:1)

看看ShowTextMargins示例。它使用TextMarginFinder类来查找找到文本的边距。在这个例子中,取自我的书&#34; iText in Action - Second Edition&#34;,我使用这个类绘制一个矩形:

public void addMarginRectangle(String src, String dest)
    throws IOException, DocumentException {
    PdfReader reader = new PdfReader(src);
    PdfReaderContentParser parser = new PdfReaderContentParser(reader);
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(RESULT));
    TextMarginFinder finder;
    for (int i = 1; i <= reader.getNumberOfPages(); i++) {
        finder = parser.processContent(i, new TextMarginFinder());
        PdfContentByte cb = stamper.getOverContent(i);
        cb.rectangle(finder.getLlx(), finder.getLly(),
            finder.getWidth(), finder.getHeight());
        cb.stroke();
    }
    stamper.close();
    reader.close();
}

在您的情况下,您想要根据矩形裁剪页面。你有一个finder对象,它允许你获得左下角(llx和lly)的坐标和右上角(urx和ury)的坐标。您可以使用这些坐标来裁剪页面,如CropPages示例中所示:

public void manipulatePdf(String src, String dest)
    throws IOException, DocumentException {
    PdfReader reader = new PdfReader(src);
    int n = reader.getNumberOfPages();
    PdfDictionary pageDict;
    PdfRectangle rect = new PdfRectangle(llx, lly, urx, ury);
    for (int i = 1; i <= n; i++) {
        pageDict = reader.getPageN(i);
        pageDict.put(PdfName.CROPBOX, rect);
    }
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
    stamper.close();
    reader.close();
}

另一种选择是更改媒体框而不是裁剪框:

pageDict.put(PdfName.MEDIABOX, rect);

这些示例的C#版本可以在这里找到: