Je voudrais ajouter une page à un document PDF PDF contenant du texte simple.
J'ai essayé le code suivant que j'ai trouvé sur Internet, mais pour l'instant je ne l'ai pas fait fonctionner:
PdfReader reader = new PdfReader("1.pdf");
Document document = new Document(reader.GetPageSize(1));
PdfCopy copier = new PdfCopy(doc, new FileStream("2.pdf", FileMode.Create));
for (int pageCounter = 1; pageCounter < reader.NumberOfPages + 1; pageCounter++)
{
//byte[] page = reader.GetPageContent(pageCounter);
copier.AddPage(copier.GetImportedPage(reader, pageCounter));
}
copier.NewPage();
copier.Add(new Paragraph("This is added text"));
document.Close();
reader.Close();
S'il vous plaît, faites-moi savoir comment procéder correctement?
private static string AddCommentsToFile(string fileName, string userComments)
{
string outputFileName = Path.GetTempFileName();
//Step 1: Create a Docuement-Object
Document document = new Document();
try
{
//Step 2: we create a writer that listens to the document
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outputFileName, FileMode.Create));
//Step 3: Open the document
document.Open();
PdfContentByte cb = writer.DirectContent;
//The current file path
string filename = fileName;
// we create a reader for the document
PdfReader reader = new PdfReader(filename);
for (int pageNumber = 1; pageNumber < reader.NumberOfPages + 1; pageNumber++)
{
document.SetPageSize(reader.GetPageSizeWithRotation(1));
document.NewPage();
//Insert to Destination on the first page
if (pageNumber == 1)
{
Chunk fileRef = new Chunk(" ");
fileRef.SetLocalDestination(filename);
document.Add(fileRef);
}
PdfImportedPage page = writer.GetImportedPage(reader, pageNumber);
int rotation = reader.GetPageRotation(pageNumber);
if (rotation == 90 || rotation == 270)
{
cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(pageNumber).Height);
}
else
{
cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
}
}
// Add a new page to the pdf file
document.NewPage();
Paragraph paragraph = new Paragraph();
Font titleFont = new Font(iTextSharp.text.Font.FontFamily.HELVETICA
, 15
, iTextSharp.text.Font.BOLD
, BaseColor.BLACK
);
Chunk titleChunk = new Chunk("Comments", titleFont);
paragraph.Add(titleChunk);
document.Add(paragraph);
paragraph = new Paragraph();
Font textFont = new Font(iTextSharp.text.Font.FontFamily.HELVETICA
, 12
, iTextSharp.text.Font.NORMAL
, BaseColor.BLACK
);
Chunk textChunk = new Chunk(userComments, textFont);
paragraph.Add(textChunk);
document.Add(paragraph);
}
catch (Exception e)
{
throw e;
}
finally
{
document.Close();
}
return outputFileName;
}
Essayez ce code: il ajoute une nouvelle page avec le pdf existant et ajoute du texte en filigrane à cette dernière page.
private string AddWaterMarkPageToFile(string fileName, string userComments)
{
string outputFileName = Path.GetTempFileName() + ".pdf";
//Step 1: Create a Docuement-Object
Document document = new Document();
try
{
//Step 2: we create a writer that listens to the document
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outputFileName, FileMode.Create));
//Step 3: Open the document
document.Open();
PdfContentByte cb = writer.DirectContent;
//The current file path
string filename = fileName;
// we create a reader for the document
PdfReader reader = new PdfReader(filename);
for (int pageNumber = 1; pageNumber < reader.NumberOfPages + 1; pageNumber++)
{
document.SetPageSize(reader.GetPageSizeWithRotation(1));
document.NewPage();
//Insert to Destination on the first page
if (pageNumber == 1)
{
Chunk fileRef = new Chunk(" ");
fileRef.SetLocalDestination(filename);
document.Add(fileRef);
}
PdfImportedPage page = writer.GetImportedPage(reader, pageNumber);
int rotation = reader.GetPageRotation(pageNumber);
if (rotation == 90 || rotation == 270)
{
cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(pageNumber).Height);
}
else
{
cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
}
}
// Add a new page to the pdf file
document.NewPage();
float fontSize = 80;
float xPosition = iTextSharp.text.PageSize.A4.Width / 2;
float yPosition = (iTextSharp.text.PageSize.A4.Height - 140f) / 2;
float angle = 45;
PdfContentByte under = writer.DirectContentUnder;
BaseFont baseFont = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED);
under.BeginText();
under.SetColorFill(BaseColor.LIGHT_GRAY);
under.SetFontAndSize(baseFont, fontSize);
under.ShowTextAligned(PdfContentByte.ALIGN_CENTER, userComments, xPosition, yPosition, angle);
under.EndText();
}
catch (Exception e)
{
throw e;
}
finally
{
document.Close();
}
return outputFileName;
}
Vous ne pouvez pas utiliser PdfCopy pour ajouter des pages. Vous devrez créer un nouveau pdf et l'ajouter si vous devez le faire (PdfCopy est le meilleur pour fusionner le pdf).
J'ai également ajouté un exemple pour ajouter un pied de page:
PdfReader reader = new PdfReader("1.pdf");
Document document = new Document(reader.GetPageSize(1));
PdfCopy copier = new PdfCopy(doc, new FileStream("2.pdf", FileMode.Create));
for (int pageCounter = 1; pageCounter < reader.NumberOfPages + 1; pageCounter++)
{
// get page
PdfImportedPage page = copier.GetImportedPage(reader, pageCounter)
// add content to imported page
PageStamp ps = pdfCopy.CreatePageStamp(page);
PdfContentByte cb = ps.GetOverContent();
// set color
cb.SetColorFill(BaseColor.BLACK);
// get font
BaseFont baseFont = BaseFont.CreateFont(string.Format("{0}\\Fonts\\arialuni.ttf", Environment.GetEnvironmentVariable("windir"), BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
cb.SetFontAndSize(baseFont, 12);
cb.BeginText();
cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, printLangString, 100f, 40f, 0f);
cb.EndText();
// Accept changes
ps.AlterContents();
// add page
copier.AddPage(page);
}
using (var ms = new MemoryStream())
{
Document doc = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.GetInstance(doc, ms);
writer.CloseStream = false;
doc.Open();
doc.NewPage();
doc.Add(new Paragraph(error, fontRed));
doc.Close();
writer.Close();
ms.Seek(0, SeekOrigin.Begin);
PdfReader rd = new PdfReader(ms);
for (int pageCounter = 1; pageCounter < reader.NumberOfPages + 1; pageCounter++)
{
copier.AddPage(copier.GetImportedPage(rd, pageCounter));
}
rd.Close();
}
document.Close();
reader.Close();