我有一份pdf保险文件,现在每个条款都在一个单独的页面上。我希望获得具有短子句的页面,并将它们与其他页面组合成一个页面。
这里我传递的文件代表2页。我试图了解如何使用一些测试代码执行此操作的机制。
我想将这两个页面读入一个新的目标页面并返回该页面。
我不想更改原始内容的比例,但如果我不使用ConcatMatrix进行转换,则根本不会显示任何内容。
在这里,我可以在一个页面中看到两个页面的内容,但它们太小了。我只是将参数调用到AddXObject中。参数采用a,b,c,d等,你怎么知道哪些是x,y,高度,宽度..?
public byte[] ManipulatePdf(byte[] file)
{
byte[] result;
using (var ms = new MemoryStream())
{
PdfDocument pdf = new PdfDocument(new PdfWriter(ms));
PdfDocument sourcePdf = new PdfDocument(new PdfReader(new MemoryStream(file)));
var pages = sourcePdf.GetNumberOfPages();
PageSize nUpPageSize = PageSize.A4;
PdfPage targetPage = pdf.AddNewPage(nUpPageSize);
PdfCanvas canvas = new PdfCanvas(targetPage);
//if we remove ConcatMatrix we get nothing
//otherwise it appears too small
for (int i = 1; i <= pages; i++)
{
PdfPage currentPage = sourcePdf.GetPage(i);
Rectangle orig = targetPage.GetPageSize();
var width = nUpPageSize.GetWidth() / orig.GetWidth() / 2f;
var height = nUpPageSize.GetHeight() / orig.GetHeight() / 2f;
AffineTransform transformationMatrix = AffineTransform.GetScaleInstance(
width, height);
canvas.ConcatMatrix(transformationMatrix);
var height1 = orig.GetHeight();
var width2 = orig.GetWidth() / 2;
var height2 = orig.GetHeight() / 2;
PdfFormXObject pageCopy = currentPage.CopyAsFormXObject(pdf);
if (i == 1)
canvas.AddXObject(pageCopy, 0, height1);
else
canvas.AddXObject(pageCopy,0, 1200);
}
// close the documents
pdf.Close();
sourcePdf.Close();
canvas.Release();
result = ms.GetBuffer();
}
return result;
}
答案 0 :(得分:0)
这是我的解决方案,我不想缩小它,所以我使用0.99保持原始大小,如果我使用1然后它根本不显示。
第二页的y位置使用负值..如果我使用+400然后它从页面上消失,0它覆盖了第一页内容,但减去它继续向下移动。 :)
//if we remove ConcatMatrix we get nothing
//otherwise it appears to small
//setting transformation to 1 shows nothing
for (int i = 1; i <= pages; i++)
{
PdfPage currentPage = sourcePdf.GetPage(i);
Rectangle orig = targetPage.GetPageSize();
var width = 0.99f;//= nUpPageSize.GetWidth() / orig.GetWidth() / 2f;
var height = 0.99f;//nUpPageSize.GetHeight() / orig.GetHeight() / 2f;
AffineTransform transformationMatrix = AffineTransform.GetScaleInstance(
width, height);
canvas.ConcatMatrix(transformationMatrix);
var height1 = orig.GetHeight();
var width2 = orig.GetWidth() / 2;
var height2 = orig.GetHeight() / 2;
PdfFormXObject pageCopy = currentPage.CopyAsFormXObject(pdf);
if (i == 1)
canvas.AddXObject(pageCopy, 0, 0);
else
canvas.AddXObject(pageCopy, 0, -400);
}