问题描述
我使用 itext7 PdfMerger 合并 pdf 文件, 但页面大小是从源文件复制的。 - 所以每个页面都有不同的大小 - 根据原始大小。 我希望合并的输出文件中的页面大小相等。 (即 A4 旋转)
using(var ms = new MemoryStream()) {
var pdfCombined = new PdfDocument(new PdfWriter(ms));
var merger = new PdfMerger(pdfCombined);
using(var pdfStream = file.OpenReadStream()) {
var pdfReader = new PdfDocument(new PdfReader(pdfStream));
merger.Merge(pdfReader,1,pdfReader.GetNumberOfPages());
pdfReader.Close();
}
}
解决方法
private void Resize(Stream original,Stream stream)
{
original.Position = 0;
stream.Position = 0;
var orig = new PdfDocument(new PdfReader(original));
var pdf = new PdfDocument(new PdfWriter(stream));
pdf.GetWriter().SetCloseStream(false);
var doc = new Document(pdf,PageSize);
var pageSize = orig.GetPage(1).GetPageSizeWithRotation();
var pageWidth = pageSize.GetWidth();
var destWidth = PageSize.GetWidth();
if (pageWidth > destWidth)
{
var transformationMatrix = AffineTransform.GetScaleInstance(
pageWidth / destWidth / 2,pageSize.GetHeight() / PageSize.GetHeight() / 2);
for (int i = 1; i <= orig.GetNumberOfPages(); i++)
{
var page = orig.GetPage(i);
var formXObject = page.CopyAsFormXObject(pdf);
var canvas = new PdfCanvas(pdf.AddNewPage(PageSize));
canvas.ConcatMatrix(transformationMatrix);
canvas.AddXObjectAt(formXObject,0);
}
doc.Close();
}
}