如何使用c#`将pdf文件从合法格式调整为字母格式

时间:2013-05-08 15:30:52

标签: c# pdf file-io itextsharp

我将pdf文件导出为合法格式,并希望将它们转换为letter格式(基本上缩小它们),每个文件可能有1到3页,下面是我尝试过的代码,但我遇到了这些问题:

  • 页面大小减少,这是好的,但我不能使用边距属性将页面放在容器的正确边框(页面我有点缩小,但在底部的某处绘制结果pdf文件)

  • 我无法增加页数,因此代码会同时绘制两个页面。

这是代码

PdfImportedPage page;

PdfReader reader = new PdfReader(@"C:\pdf\legalFormat.pdf");
Document doc = new Document(PageSize.A4, 0, 0, 0, 0);
PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(@"C:\pdf\letterFormat.PDF", FileMode.Create));
doc.Open();

PdfContentByte cb = writer.DirectContent;
for (int i = 1 ; i < reader.NumberOfPages + 1; i++){
    page = writer.GetImportedPage(reader, i); // i is the number of page
    float Scale = 0.67f;
    cb.AddTemplate(page, Scale, 0, 0, Scale, 0, 0);
}
doc.Close();

1 个答案:

答案 0 :(得分:1)

问题解决了:

主进程中的

运行此测试。

            string original = args[0];

            string inPDF = original;
            string outPDF = Directory.GetDirectoryRoot(original) + "temp.pdf";
            PdfReader pdfr = new PdfReader(inPDF);

            Document doc = new Document(PageSize.LETTER);
            Document.Compress = true;

            PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(outPDF, FileMode.Create));
            doc.Open();

            PdfContentByte cb = writer.DirectContent;

            PdfImportedPage page;

            for (int i = 1; i < pdfr.NumberOfPages + 1; i++)
            {
                page = writer.GetImportedPage(pdfr, i);
                cb.AddTemplate(page, PageSize.LETTER.Width / pdfr.GetPageSize(i).Width, 0, 0, PageSize.LETTER.Height / pdfr.GetPageSize(i).Height, 0, 0);
                doc.NewPage();
            }

            doc.Close();

            //just renaming, conversion / resize process ends at doc.close() above
            File.Delete(original);
            File.Copy(outPDF, original);