我有以下代码将整页网格应用于现有的 A4 pdf 文档。 它在我或其他人使用 iText 生成的 pdf 上运行良好,但是当我尝试在我或其他人使用 Win10“Microsoft Print to PDF”打印机驱动程序创建的 PDF 上使用时,生成的网格不会填充页面,它在页面右侧和底部都短了几厘米。
无论我输入哪个 PDF,fltWidth 和 fltHeight 都大致相同,这只是我遇到问题的使用 MS Print to PDF 生成的 PDF,也是 A4。
pdfDoc.SetDefaultPageSize(PageSize.A4);
Document doc = new Document(pdfDoc, PageSize.A4);
doc.SetMargins(0f, 0f, 0f, 0f);
PdfDocument pdfDocData = new PdfDocument(new PdfReader(sourcePDF));
pdfDocData.CopyPagesTo(1, 1, pdfDoc);
iText.Kernel.Colors.Color colorGrey = new DeviceRgb(112, 112, 112);
float flt_02 = 0.2f;
PdfPage page = pdfDoc.GetFirstPage();
iText.Kernel.Geom.Rectangle pageSize = doc.GetPdfDocument().GetFirstPage().GetPageSize();
float fltWidth = pageSize.GetWidth();
float fltHeight = pageSize.GetHeight();
PdfCanvas canvas = new PdfCanvas(page);
for (int intIndex = 296; intIndex > 0; intIndex--)
{
float fltLineY = intIndex * 2.83464566929134f;
canvas.SetStrokeColor(colorGrey);
canvas.MoveTo(1, fltLineY);
canvas.LineTo(fltWidth, fltLineY);
canvas.SetLineWidth(flt_02);
canvas.ClosePathStroke();
}
for (int intIndex = 1; intIndex < 210; intIndex++)
{
float fltLineX = intIndex * 2.83464566929134f;
canvas.SetStrokeColor(colorGrey);
canvas.MoveTo(fltLineX, 1);
canvas.LineTo(fltLineX, fltHeight);
canvas.SetLineWidth(flt_02);
canvas.ClosePathStroke();
}
doc.Close();
pdfDoc.Close();```
向现有 PDF 页面添加内容时,可能需要将现有内容包装到信封中,该信封在开始时存储原始图形状态并在结束时恢复它。否则,现有内容应用的任何更改都可能会影响您的添加,例如根据您的情况缩放它,剪切它,应用透明度,...
对于 iText,这可以通过使用来强制执行
new PdfCanvas(page, true)
而不是
new PdfCanvas(page)
(实际上后一种变体确实可以确定是否有必要添加这样的信封,并且有时会应用它。但在您的情况下,它是错误的。)