itextsharp modifier un fichier pdf existant (pas de nouvelle source pdf) et ajouter un filigrane
Je voudrais modifier un document pdf et ajouter une image en filigrane. Comment puis-je le faire sans créer un nouveau fichier?
Je pense que c'est une stupide solution pour créer un temp pdf. Supprimer le fichier source et renommer le temp pdf, comme le fichier source!?
Ici mon exemple de code, mais là, je suis en création d'un nouveau fichier de destination.
Ce qui concerne
private static void PdfApplication(String filePath) {
PdfReader pdfReader = new PdfReader(filePath);
Stream outputStream = new FileStream(newFilePath, FileMode.Open, FileAccess.Write, FileShare.None);
PdfStamper pdfStamper = new PdfStamper(pdfReader, outputStream,'1', true);
for (int pageIndex = 1; pageIndex <= pdfReader.NumberOfPages; pageIndex++) {
pdfStamper.FormFlattening = false;
iTextSharp.text.Rectangle pageRectangle = pdfReader.GetPageSizeWithRotation(pageIndex);
PdfContentByte pdfData = pdfStamper.GetOverContent(pageIndex);
pdfData.SetFontAndSize(BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1252, BaseFont.NOT_EMBEDDED), 10);
PdfGState graphicsState = new PdfGState();
graphicsState.FillOpacity = 0.4F;
pdfData.SetGState(graphicsState);
pdfData.BeginText();
FileStream fileStreamImage = new FileStream(watermark.jpg", FileMode.Open);
iTextSharp.text.Image jpeg = iTextSharp.text.Image.GetInstance(System.Drawing.Image.FromStream(fileStreamImage), ImageFormat.Jpeg);
float width = pageRectangle.Width;
float height = pageRectangle.Height;
jpeg.ScaleToFit(width, height);
jpeg.SetAbsolutePosition(width / 2 - jpeg.Width / 2, height / 2 - jpeg.Height / 2);
jpeg.SetAbsolutePosition(50, 50);
jpeg.Rotation = 250;
pdfData.AddImage(jpeg);
pdfData.EndText();
}
pdfStamper.Close();
outputStream.Close();
outputStream.Dispose();
}
Vous devez vous connecter pour publier un commentaire.
iTextSharp n'est pas destiné à être utilisé pour modifier les fichiers en place. Si bien qu'il a été écrit vos modifications, il y a une exception? Vous perdez votre ancien et votre nouveau fichier dans le processus. Même si iTextSharp a été de 100% sans bug, l'utilisateur pourrait encore casser. Et puis il y a le bord de tels cas où vous pousser un fichier de 1 mo à 10 go en ajoutant un tas d'images et de manquer d'espace sur un disque. La seule façon pour iTextSharp fiable pour tester ces cas est d'écrire un fichier.
Il y a également des essais. Chaque fois que je suis en train de modifier un fichier que j'ai toujours envie de comparer mon fichier d'entrée pour mon fichier de sortie. Si iTextSharp gardé effacer mon fichier d'entrée que j'avais constamment avoir à les copier à partir d'un autre endroit où je pourrais avoir à faire des dizaines de fois par heure.
Voici donc certaines des raisons. Mais il y a un moyen de faire ce que vous voulez faire. L'un des constructeurs pour
PdfReader
est un tableau d'octets, il suffit de passerSystem.IO.File.ReadAllBytes(filePath)
à elle. Depuis ces octets ne sont pas liés au disque plus que vous pouvez maintenant écrire.Une deuxième option est d'écrire pour un
MemoryStream
au lieu de cela, appelez.ToArray()
sur elle et puis après la fermeture de laPdfReader
appelSystem.IO.File.WriteAllBytes(filePath, bytes)
.lien pour pdfsharp dll
'importer ce