【发布时间】:2019-08-01 21:03:04
【问题描述】:
我正在测试一种从名为 55PREMIUMPAYMENTWARRANTY.pdf 的现有 pdf 中读取的方法,该 pdf 顶部有几个小段落,每行 3 行。然后我尝试使用画布将其复制到不同 Y 位置的新文档。
我已经在不同位置的循环中调用了这个方法,并对结果感到惊讶。
Y位置通常从左下角的0开始,但如果Y值为负数,它只会在新页面上显示..这是为什么?
通常,如果我只是写纯文本,则 Y 值 400 大致位于 A4 页面的中间,即 595 x 842。
但是如果我想在中间显示它,我需要将 Y 设置为 -300 左右,这对我来说没有意义。
设置位置的线是 canvas.AddXObject(pageCopy, 0, position);
这是方法..
public static byte[] WritePPWToPosition(float position)
{
try
{
//write PPW to different positions on the pdf
var link = "D:\\Repo\\website3.0\\LeisureInsure\\Content\\CertificateDocuments\\55PREMIUMPAYMENTWARRANTY.pdf";
byte[] buffer;
using (Stream stream = new FileStream(@link, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
buffer = new byte[stream.Length - 1];
stream.Read(buffer, 0, buffer.Length);
}
using (var ms = new MemoryStream())
{
//read source page
var readerSource = new PdfReader(new MemoryStream(buffer));
PdfDocument sourcePdf = new PdfDocument(readerSource);
PdfPage sourcePage = sourcePdf.GetPage(1);
//create destination page
PdfDocument newpdf = new PdfDocument(new PdfWriter(ms));
PageSize a4Page = PageSize.A4;
PdfPage newpage = newpdf.AddNewPage(a4Page);
PdfCanvas canvas = new PdfCanvas(newpage);
//copy source page to destination page
PdfFormXObject pageCopy = sourcePage.CopyAsFormXObject(newpdf);
//add destination page to canvas at position
canvas.AddXObject(pageCopy, 0, position);
sourcePdf.Close();
newpdf.Close();
var result = ms.ToArray();
return result;
}
}
catch (Exception ex)
{
throw;
}
}
【问题讨论】: