/// <summary> /// Removes layers from a PDF document </summary> /// <param name="reader"> a PdfReader containing a PDF document </param> /// <param name="layers"> a sequence of names of OCG layers </param> /// <exception cref="IOException"> </exception> public virtual void RemoveLayers(PdfReader reader, params string[] layers) { int n = reader.NumberOfPages; for (int i = 1; i <= n; i++) reader.SetPageContent(i, reader.GetPageContent(i)); ICollection<string> ocgs = new HashSet2<string>(); for (int i = 0; i < layers.Length; i++) { ocgs.Add(layers[i]); } OCGParser parser = new OCGParser(ocgs); for (int i = 1; i <= n; i++) { PdfDictionary page = reader.GetPageN(i); Parse(parser, page); page.Remove(new PdfName("PieceInfo")); RemoveAnnots(page, ocgs); RemoveProperties(page, ocgs); } PdfDictionary root = reader.Catalog; PdfDictionary ocproperties = root.GetAsDict(PdfName.OCPROPERTIES); if (ocproperties != null) { RemoveOCGsFromArray(ocproperties, PdfName.OCGS, ocgs); PdfDictionary d = ocproperties.GetAsDict(PdfName.D); if (d != null) { RemoveOCGsFromArray(d, PdfName.ON, ocgs); RemoveOCGsFromArray(d, PdfName.OFF, ocgs); RemoveOCGsFromArray(d, PdfName.LOCKED, ocgs); RemoveOCGsFromArray(d, PdfName.RBGROUPS, ocgs); RemoveOCGsFromArray(d, PdfName.ORDER, ocgs); RemoveOCGsFromArray(d, PdfName.AS, ocgs); } } reader.RemoveUnusedObjects(); }
/// <summary> /// Compress a pdf /// </summary> /// <param name="base64Pdf">A small model to hold a base64 encoded pdf object { "content" : "somebase64" }</param> /// <returns>{ "content" : "smallerBase64" }</returns> public IHttpActionResult Post(Base64Pdf base64Pdf) { try { if (base64Pdf.data == null) return BadRequest("Check supplied pdf model"); byte[] data = Convert.FromBase64String(base64Pdf.data); //Compress byte[] compressedData; using (var memStream = new MemoryStream()) { var reader = new PdfReader(data); var stamper = new PdfStamper(reader, memStream, PdfWriter.VERSION_1_4); var pageNum = reader.NumberOfPages; for (var i = 1; i <= pageNum; i++) reader.SetPageContent(i, reader.GetPageContent(i)); stamper.SetFullCompression(); stamper.Close(); reader.Close(); compressedData = memStream.ToArray(); } var compressedBase64 = Convert.ToBase64String(compressedData); return Json(new Base64Pdf { data = compressedBase64 }); } catch (Exception ex) { return InternalServerError(ex); } }
public void SetPageContentTest01() { String outPdf = DestFolder + "out1.pdf"; PdfReader reader = new PdfReader(TestResourceUtils.GetResourceAsStream(TestResourcesPath, "in.pdf")); PdfStamper stamper = new PdfStamper(reader, new FileStream(outPdf, FileMode.Create)); reader.EliminateSharedStreams(); int total = reader.NumberOfPages + 1; for (int i = 1; i < total; i++) { byte[] bb = reader.GetPageContent(i); reader.SetPageContent(i, bb); } stamper.Close(); Assert.Null(new CompareTool().CompareByContent(outPdf, TestResourceUtils.GetResourceAsTempFile(TestResourcesPath, "cmp_out1.pdf"), DestFolder, "diff_")); }
// --------------------------------------------------------------------------- /** * Manipulates a PDF file src with the file dest as result * @param src the original PDF */ public byte[] DecompressPdf(byte[] src) { PdfReader reader = new PdfReader(src); using (MemoryStream ms = new MemoryStream()) { using (PdfStamper stamper = new PdfStamper(reader, ms)) { Document.Compress = false; int total = reader.NumberOfPages + 1; for (int i = 1; i < total; i++) { reader.SetPageContent(i, reader.GetPageContent(i)); } } Document.Compress = true; return ms.ToArray(); } }
// --------------------------------------------------------------------------- /** * Manipulates a PDF file src with the file dest as result * @param src the original PDF */ public byte[] CompressPdf(byte[] src) { PdfReader reader = new PdfReader(src); using (MemoryStream ms = new MemoryStream()) { using (PdfStamper stamper = new PdfStamper(reader, ms, PdfWriter.VERSION_1_5)) { stamper.Writer.CompressionLevel = 9; int total = reader.NumberOfPages + 1; for (int i = 1; i < total; i++) { reader.SetPageContent(i, reader.GetPageContent(i)); } stamper.SetFullCompression(); } return ms.ToArray(); } }