使用iText 7为PDF中的每个页面添加背景



我有一个只有一个页面的PDF文件,我想把它用作第二个PDF文件中所有页面的背景,其中包含一些信息。我曾尝试过使用CopyPagesTo,但它只是每隔一页复制PDF。

private void ApplyBackground(string sourceFilename, string backgroundPdf, int pageNumber) {

PdfDocument srcDocument = new PdfDocument(new PdfReader(sourceFilename));
PdfDocument bgDocument = new PdfDocument(new PdfReader(backgroundPdf));
PdfDocument destDocument = new PdfDocument(new PdfWriter(@"C:Desktopresult.pdf").SetSmartMode(true));
int pagesCount = srcDocument.GetNumberOfPages();
for (int i = 1; i <= pagesCount; i++) {

srcDocument.CopyPagesTo(i, i, destDocument);
bgDocument.CopyPagesTo(1, 1, destDocument);
}

srcDocument.Close();
bgDocument.Close();
destDocument.Close();
}

是否可以像使用背景一样使用一个PDF文件,并将其放入文本后面的每一页的其他PDF文件中。

这是iText 7的代码。请注意,它假设具有背景的页面和正在处理的文档页面的页面大小相等。

PdfDocument backgroundDocument = new PdfDocument(new PdfReader(@"path/to/background_doc.pdf"));
PdfDocument pdfDocument = new PdfDocument(new PdfReader(@"path/to/source.pdf"),
new PdfWriter(@"path/to/target.pdf"));
PdfFormXObject backgroundXObject = backgroundDocument.GetPage(1).CopyAsFormXObject(pdfDocument);
for (int i = 1; i <= pdfDocument.GetNumberOfPages(); i++) {
PdfPage page = pdfDocument.GetPage(i);
PdfStream stream = page.NewContentStreamBefore();
new PdfCanvas(stream, page.GetResources(), pdfDocument).AddXObject(backgroundXObject, 0, 0);
}
pdfDocument.Close();
backgroundDocument.Close();

根据我的理解,您正在寻找以下解决方案。如果我错过了什么,请告诉我。

  1. 为要创建背景的原始PDF创建阅读器
  2. 为背景PDF创建PDF阅读器
  3. 在您想要生成最终PDF的地方创建PDF压模
  4. 使用Stamper的GetImportedPage方法获取背景
  5. 在原始PDF页面的所有页面上循环并添加背景

下面是代码:

static void CreatePdfwithBackGround(string originalPdf, string backgroundPdf, string destPdf)
{
PdfReader originalPdfReader = new PdfReader(originalPdf);
PdfReader backgroundPdfReader = new PdfReader(backgroundPdf);
// Create the stamper for Destination pdf
PdfStamper stamper = new PdfStamper(originalPdfReader, new FileStream(destPdf, FileMode.Create));
// Add the backgroundPdf to each page of original PDF
PdfImportedPage page = stamper.GetImportedPage(backgroundPdfReader, 1);
int pageCount = originalPdfReader.NumberOfPages;
PdfContentByte background;
for (int i = 1; i <= pageCount; i++)
{
background = stamper.GetUnderContent(i);
background.AddTemplate(page, 0, 0);
}
// Close the Destination stamper
stamper.Close();
}

示例调用是:

CreatePdfwithBackGround(@"C:TESTMainPDF.pdf", @"C:TESTBackGroundTemplate.pdf", @"C:TESTFinalPDFOutput.pdf");

最新更新