我将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();
答案 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);