Der Titel fasst alles zusammen.
Ich möchte mit iTextSharp einen Text zu einer vorhandenen PDF-Datei hinzufügen , kann jedoch nirgendwo im Web feststellen, wie dies zu tun ist ...
PS: Ich kann keine PDF-Formulare verwenden.
Der Titel fasst alles zusammen.
Ich möchte mit iTextSharp einen Text zu einer vorhandenen PDF-Datei hinzufügen , kann jedoch nirgendwo im Web feststellen, wie dies zu tun ist ...
PS: Ich kann keine PDF-Formulare verwenden.
Antworten:
Ich habe einen Weg gefunden, es zu tun (weiß nicht, ob es das Beste ist, aber es funktioniert)
string oldFile = "oldFile.pdf"; string newFile = "newFile.pdf"; // open the reader PdfReader reader = new PdfReader(oldFile); Rectangle size = reader.GetPageSizeWithRotation(1); Document document = new Document(size); // open the writer FileStream fs = new FileStream(newFile, FileMode.Create, FileAccess.Write); PdfWriter writer = PdfWriter.GetInstance(document, fs); document.Open(); // the pdf content PdfContentByte cb = writer.DirectContent; // select the font properties BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252,BaseFont.NOT_EMBEDDED); cb.SetColorFill(BaseColor.DARK_GRAY); cb.SetFontAndSize(bf, 8); // write the text in the pdf content cb.BeginText(); string text = "Some random blablablabla..."; // put the alignment and coordinates here cb.ShowTextAligned(1, text, 520, 640, 0); cb.EndText(); cb.BeginText(); text = "Other random blabla..."; // put the alignment and coordinates here cb.ShowTextAligned(2, text, 100, 200, 0); cb.EndText(); // create the new page and add it to the pdf PdfImportedPage page = writer.GetImportedPage(reader, 1); cb.AddTemplate(page, 0, 0); // close the streams and voilá the file should be changed :) document.Close(); fs.Close(); writer.Close(); reader.Close();
Ich hoffe das kann für jemanden nützlich sein =) (und hier alle Fehler posten)
quelle
Zusätzlich zu den hervorragenden Antworten oben wird im Folgenden gezeigt, wie Sie jeder Seite eines mehrseitigen Dokuments Text hinzufügen:
using (var reader = new PdfReader(@"C:\Input.pdf")) { using (var fileStream = new FileStream(@"C:\Output.pdf", FileMode.Create, FileAccess.Write)) { var document = new Document(reader.GetPageSizeWithRotation(1)); var writer = PdfWriter.GetInstance(document, fileStream); document.Open(); for (var i = 1; i <= reader.NumberOfPages; i++) { document.NewPage(); var baseFont = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); var importedPage = writer.GetImportedPage(reader, i); var contentByte = writer.DirectContent; contentByte.BeginText(); contentByte.SetFontAndSize(baseFont, 12); var multiLineString = "Hello,\r\nWorld!".Split('\n'); foreach (var line in multiLineString) { contentByte.ShowTextAligned(PdfContentByte.ALIGN_LEFT, line, 200, 200, 0); } contentByte.EndText(); contentByte.AddTemplate(importedPage, 0, 0); } document.Close(); writer.Close(); } }
quelle
Dies hat bei mir funktioniert und beinhaltet die Verwendung von OutputStream:
PdfReader reader = new PdfReader(new RandomAccessFileOrArray(Request.MapPath("Template.pdf")), null); Rectangle size = reader.GetPageSizeWithRotation(1); using (Stream outStream = Response.OutputStream) { Document document = new Document(size); PdfWriter writer = PdfWriter.GetInstance(document, outStream); document.Open(); try { PdfContentByte cb = writer.DirectContent; cb.BeginText(); try { cb.SetFontAndSize(BaseFont.CreateFont(), 12); cb.SetTextMatrix(110, 110); cb.ShowText("aaa"); } finally { cb.EndText(); } PdfImportedPage page = writer.GetImportedPage(reader, 1); cb.AddTemplate(page, 0, 0); } finally { document.Close(); writer.Close(); reader.Close(); } }
quelle
Hier ist eine Methode, die Stempel und absolute Koordinaten verwendet, die in den verschiedenen PDF-Clients ( Adobe , FoxIt usw.) angezeigt werden .
public static void AddTextToPdf(string inputPdfPath, string outputPdfPath, string textToAdd, System.Drawing.Point point) { //variables string pathin = inputPdfPath; string pathout = outputPdfPath; //create PdfReader object to read from the existing document using (PdfReader reader = new PdfReader(pathin)) //create PdfStamper object to write to get the pages from reader using (PdfStamper stamper = new PdfStamper(reader, new FileStream(pathout, FileMode.Create))) { //select two pages from the original document reader.SelectPages("1-2"); //gettins the page size in order to substract from the iTextSharp coordinates var pageSize = reader.GetPageSize(1); // PdfContentByte from stamper to add content to the pages over the original content PdfContentByte pbover = stamper.GetOverContent(1); //add content to the page using ColumnText Font font = new Font(); font.Size = 45; //setting up the X and Y coordinates of the document int x = point.X; int y = point.Y; y = (int) (pageSize.Height - y); ColumnText.ShowTextAligned(pbover, Element.ALIGN_CENTER, new Phrase(textToAdd, font), x, y, 0); } }
quelle
Hier ist eine Methode zum Drucken von Bildern: von hier aus aufgenommen . Verwenden Sie eine andere Ebene für Ihren Text, den Sie über die Bilder legen, und stellen Sie außerdem sicher, dass Sie die GetOverContent () -Methode verwenden.
string oldFile = "FileWithImages.pdf"; string watermarkedFile = "Layers.pdf"; // Creating watermark on a separate layer // Creating iTextSharp.text.pdf.PdfReader object to read the Existing PDF Document PdfReader reader1 = new PdfReader(oldFile); using (FileStream fs = new FileStream(watermarkedFile, FileMode.Create, FileAccess.Write, FileShare.None)) // Creating iTextSharp.text.pdf.PdfStamper object to write Data from iTextSharp.text.pdf.PdfReader object to FileStream object using (PdfStamper stamper = new PdfStamper(reader1, fs)) { // Getting total number of pages of the Existing Document int pageCount = reader1.NumberOfPages; // Create New Layer for Watermark PdfLayer layer = new PdfLayer("Layer", stamper.Writer); // Loop through each Page for (int i = 1; i <= pageCount; i++) { // Getting the Page Size Rectangle rect = reader1.GetPageSize(i); // Get the ContentByte object PdfContentByte cb = stamper.GetOverContent(i); // Tell the cb that the next commands should be "bound" to this new layer cb.BeginLayer(layer); BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); cb.SetColorFill(BaseColor.RED); cb.SetFontAndSize(bf, 100); cb.BeginText(); cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "Some random blablablabla...", rect.Width / 2, rect.Height / 2, - 90); cb.EndText(); // Close the layer cb.EndLayer(); } }
quelle