2

我有导出为合法格式的 pdf 文件,并希望将它们转换为字母格式(基本上是缩小它们),每个文件可能有 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();
4

1 回答 1

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);
于 2013-05-08T16:35:21.790 回答