使用 iText 7 为 PDF 中的每一页添加背景
Add background to every page in PDF using iText 7
我有一页 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:\Desktop\result.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 文件中的每一页都放在文本后面。
根据我的了解,您正在寻找以下解决方案。如果我遗漏了什么,请告诉我。
- 为要为其创建背景的原始 PDF 创建 reader。
- 为背景 PDF 创建 PDF reader
- 在要生成最终 PDF 的位置创建 PDF 压模。
- 使用 Stamper 的 GetImportedPage 方法获取背景。
- 在原始 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:\TEST\MainPDF.pdf", @"C:\TEST\BackGroundTemplate.pdf", @"C:\TEST\FinalPDFOutput.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();
我有一页 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:\Desktop\result.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 文件中的每一页都放在文本后面。
根据我的了解,您正在寻找以下解决方案。如果我遗漏了什么,请告诉我。
- 为要为其创建背景的原始 PDF 创建 reader。
- 为背景 PDF 创建 PDF reader
- 在要生成最终 PDF 的位置创建 PDF 压模。
- 使用 Stamper 的 GetImportedPage 方法获取背景。
- 在原始 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:\TEST\MainPDF.pdf", @"C:\TEST\BackGroundTemplate.pdf", @"C:\TEST\FinalPDFOutput.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();