internal PdfReaderInstance(PdfReader reader, PdfWriter writer) { this.reader = reader; this.writer = writer; file = reader.SafeFile; myXref = new int[reader.XrefSize]; }
/** * The verification constructor. This class should only be created with * PdfStamper.getLtvVerification() otherwise the information will not be * added to the Pdf. * @param stp the PdfStamper to apply the validation to */ public LtvVerification(PdfStamper stp) { this.stp = stp; writer = stp.Writer; reader = stp.Reader; acroFields = stp.AcroFields; }
// membervariables // constructors /** * Constructs a <CODE>PdfIndirectReference</CODE>. * * @param reader a <CODE>PdfReader</CODE> * @param number the object number. * @param generation the generation number. */ internal PRIndirectReference(PdfReader reader, int number, int generation) { type = INDIRECT; this.number = number; this.generation = generation; this.reader = reader; }
/** * Constructor * @param reader reader of the input file */ public PRAcroForm(PdfReader reader) { this.reader = reader; fields = new ArrayList(); fieldByName = new Hashtable(); stack = new ArrayList(); }
/** * Creates a VerificationData object for a PdfReader * @param reader a reader for the document we want to verify. * @throws GeneralSecurityException */ public LtvVerifier(PdfReader reader) : base(null) { this.reader = reader; fields = reader.AcroFields; List<String> names = fields.GetSignatureNames(); signatureName = names[names.Count - 1]; signDate = DateTime.Now; pkcs7 = CoversWholeDocument(); LOGGER.Info(String.Format("Checking {0}signature {1}", pkcs7.IsTsp ? "document-level timestamp " : "", signatureName)); }
/** * Parses a string with structured content. * * @param reader * the PdfReader that has access to the PDF file * @param os * the Stream to which the resulting xml will be written * @param charset * the charset to encode the data * @since 5.0.5 */ public virtual void ConvertToXml(PdfReader reader, Stream os, Encoding encoding) { this.reader = reader; outp = new StreamWriter(os, encoding); // get the StructTreeRoot from the root obj PdfDictionary catalog = reader.Catalog; PdfDictionary struc = catalog.GetAsDict(PdfName.STRUCTTREEROOT); if (struc == null) throw new IOException(MessageLocalization.GetComposedMessage("no.structtreeroot.found")); // Inspect the child or children of the StructTreeRoot InspectChild(struc.GetDirectObject(PdfName.K)); outp.Flush(); outp.Close(); }
public PRStream(PRStream stream, PdfDictionary newDic) { reader = stream.reader; offset = stream.offset; length = stream.Length; compressed = stream.compressed; compressionLevel = stream.compressionLevel; streamBytes = stream.streamBytes; bytes = stream.bytes; objNum = stream.objNum; objGen = stream.objGen; if (newDic != null) Merge(newDic); else Merge(stream); }
/** * This method feeds in the source document * @param reader The PDF reader containing the source document * @throws DocumentException */ public void CopyDocumentFields(PdfReader reader) { if (!reader.IsOpenedWithFullPermissions) throw new BadPasswordException("PdfReader not opened with owner password"); if (readers2intrefs.ContainsKey(reader)) { reader = new PdfReader(reader); } else { if (reader.Tampered) throw new DocumentException("The document was reused."); reader.ConsolidateNamedDestinations(); reader.Tampered = true; } reader.ShuffleSubsetNames(); readers2intrefs[reader] = new IntHashtable(); fields.Add(reader.AcroFields); UpdateCalculationOrder(reader); }
/// <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(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); } PdfArray ocgsArray = ocproperties.GetAsArray(PdfName.OCGS); if (ocgsArray != null && ocgsArray.IsEmpty()) { root.Remove(PdfName.OCPROPERTIES); if (PdfName.USEOC.Equals(root.GetAsName(PdfName.PAGEMODE))) { root.Remove(PdfName.PAGEMODE); } } } reader.RemoveUnusedObjects(); }
/** * Processes a properly tagged PDF form. * @param reader the PdfReader instance holding the PDF * @throws IOException * @throws DocumentException */ virtual public void Process(PdfReader reader, Stream os) { int n = reader.NumberOfPages; // getting the root dictionary PdfDictionary catalog = reader.Catalog; // flattening means: remove AcroForm catalog.Remove(PdfName.ACROFORM); // read the structure and create a parser StructureItems items = new StructureItems(reader); MCParser parser = new MCParser(items); // loop over all pages for(int i = 1; i <= n; i++) { // make one stream of a content stream array reader.SetPageContent(i, reader.GetPageContent(i)); // parse page parser.Parse(reader.GetPageN(i), reader.GetPageOrigRef(i)); } reader.RemoveUnusedObjects(); // create flattened file PdfStamper stamper = new PdfStamper(reader, os); items.WriteParentTree(stamper.Writer); stamper.Close(); }
public void putData() { try { if (MainForm.lib == 1) { word = new List <string>(); word.Add(line[4]); // title word.Add(getdataline("Construction Name")); // name word.Add(getdataline("Construction No")); // no word.Add(getdataline("Construction Site")); // site word.Add(getdatablock("Construction outline", "Reason for construction")); // outline word.Add(getdataline("Estimate Amount")); // amount word.Add(getdataline("Phone")); // phone word.Add(getdataline("Reason for construction")); // reson word.Add(getdatablock("Remarks", string.Empty)); // remarks } else if (MainForm.lib == 2) { word = new List <string>(); word.Add(line[0]); // title word.Add(getdataup("Construction Name")); // name word.Add(getdataup("Construction No").Substring(0, Method.getdataup("Construction No").IndexOf(" "))); // no word.Add(getdataup("Construction Site")); // site word.Add(getdatadownblock("Outline of Construction")); // outline word.Add(getdataup("Estimate Amount")); // amount word.Add(getdataup("Phone")); // phone word.Add(getdataup("Reason for construction")); // reson word.Add(getdataup("Remarks")); // remarks } else if (MainForm.lib == 3) { word = new List <string>(); word.Add(line[0].Substring(line[0].IndexOf("度") + 1).Trim()); word.Add(getdataline("Construction No")); word.Add(getdataline("Construction Name")); word.Add(getdataline("Phone")); word.Add(getdataline("River Name")); word.Add(getdatablock("Position", "Contract enforcement")); word.Add(getdatadown("Contract enforcement")); word.Add(getdatakeyinMiddle("Construction outline", 2, 1)); word.Add(line[line.Count - 1]); } else if (MainForm.lib == 4) { word = new List <string>(); word.Add(line[1]); word.Add(getdataline("Construction name")); word.Add(getdataline("Business name")); word.Add(getdataline("Constructor name")); word.Add(getdataline("Phone")); word.Add(getdataline("Designer name")); word.Add(getdataline("Factory Place")); word.Add(getdataline("construction number")); word.Add(getdataline("Unit price Appropriate land")); word.Add(getdataline("Construction year")); word.Add(line[line.Count - 1]); } else if (MainForm.lib == 5) { PdfReader reader = new PdfReader(mpath); string key = reader.Info["Keywords"]; word = new List <string>(); switch (key) { case "12": word.Add(line[0]); // title word.Add(getdataline("Construction Name")); // name word.Add(getdataline("Construction No")); // no word.Add(getdataline("Construction Site")); // site word.Add(getdatablock("Outline of Construction", "Construction period")); // outline word.Add(getdataline("Estimate Amount")); // amount word.Add(getdataline("Phone")); // phone word.Add(getdataline("Reason for construction")); // reson word.Add(getdatablock("Remarks", string.Empty)); // remarks word.Add(periodSpliter("Construction period")[0]); word.Add(periodSpliter("Construction period")[1]); word.Add(periodSpliter("Construction period")[2]); break; case "3": word.Add(line[0]); word.Add(getdataline("Construction No")); word.Add(getdataline("Construction Name")); word.Add(getdataline("Phone")); word.Add(getdataline("River Name")); word.Add(getdataline("Position")); word.Add(getdataline("Contract enforcement")); word.Add(getdatablock("Construction outline", line[line.Count - 1])); word.Add(line[line.Count - 1]); word.Add(periodSpliter("Date")[0]); word.Add(periodSpliter("Date")[1]); word.Add(periodSpliter("Date")[2]); break; case "4": word.Add(line[0]); word.Add(getdatablock("Construction Name", "Business Name")); word.Add(getdataline("Business Name")); word.Add(getdataline("Constructor Name")); word.Add(getdataline("Phone")); word.Add(getdataline("Designer Name")); word.Add(getdataline("Factory Place")); word.Add(getdataline("Construction Number")); word.Add(getdataline("Unit Price Appropriate land")); word.Add(getdataline("Construction year")); word.Add(line[line.Count - 1]); word.Add(periodSpliter("Date")[0]); word.Add(periodSpliter("Date")[1]); word.Add(periodSpliter("Date")[2]); break; default: break; } } } catch (Exception) { //MessageBox.Show("PDF is Worng!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private void btnProcess_Click(object sender, EventArgs e) { if (String.IsNullOrWhiteSpace(tbPath.Text)) { return; } dataGridView1.Rows.Clear(); Cursor = Cursors.WaitCursor; IEnumerable <string> srcFiles; if (System.IO.File.GetAttributes(tbPath.Text).HasFlag(FileAttributes.Directory)) { srcFiles = Directory.EnumerateFiles(tbPath.Text, "*.pdf", SearchOption.AllDirectories); } else { srcFiles = new string[] { tbPath.Text }; } foreach (var srcFile in srcFiles) { var dataGridRowNum = dataGridView1.Rows.Add(new object[] { srcFile, 0 }); PdfReader reader = null; PdfStamper pdfStamper = null; try { reader = new PdfReader(srcFile); var dstFile = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(srcFile), System.IO.Path.GetFileNameWithoutExtension(srcFile) + "_clean.pdf"); var output = File.Open(dstFile, FileMode.Create); pdfStamper = new PdfStamper(reader, output, reader.PdfVersion, false); pdfStamper.RotateContents = false; var replaceTextProcessor = new TextReplaceStreamEditor(tbReplaceMatch.Text, tbReplaceReplace.Text); if (cbReplaceText.Checked) { for (int i = 1; i <= reader.NumberOfPages; i++) { replaceTextProcessor.EditPage(pdfStamper, i); } } var redactTextProcessor = new TextRedactStreamEditor(tbRedactMatch.Text); if (cbRedactText.Checked) { for (int i = 1; i <= reader.NumberOfPages; i++) { redactTextProcessor.EditPage(pdfStamper, i); } pdfStamper.Writer.SetEncryption(null, Encoding.UTF8.GetBytes("ownerPassword"), PdfWriter.AllowDegradedPrinting | PdfWriter.AllowPrinting, PdfWriter.ENCRYPTION_AES_256); } if (cbRemoveJavascript.Checked && reader.JavaScript != null) { pdfStamper.JavaScript = ""; } pdfStamper.Writer.CompressionLevel = PdfStream.BEST_COMPRESSION; pdfStamper.SetFullCompression(); pdfStamper.Writer.Info?.Clear(); pdfStamper.XmpMetadata = new byte[0]; pdfStamper.MoreInfo?.Clear(); dataGridView1.Rows[dataGridRowNum].ErrorText = "";; } catch (Exception ex) { dataGridView1.Rows[dataGridRowNum].ErrorText = ex.Message; } finally { pdfStamper?.Close(); reader?.Close(); } } Cursor = Cursors.Arrow; }
/// <summary> /// 加图片水印 /// </summary> /// <param name="inputfilepath"></param> /// <param name="outputfilepath"></param> /// <param name="ModelPicName"></param> /// <param name="top"></param> /// <param name="left"></param> /// <returns></returns> public string PDFWatermark(string inputfilepath, string outputfilepath, string ModelPicName, float top, float left) { PdfReader pdfReader = null; PdfStamper pdfStamper = null; try { pdfReader = new PdfReader(inputfilepath); int numberOfPages = pdfReader.NumberOfPages; iTextSharp.text.Rectangle psize = pdfReader.GetPageSize(1); float width = psize.Width; float height = psize.Height; pdfStamper = new PdfStamper(pdfReader, new FileStream(outputfilepath, FileMode.OpenOrCreate)); PdfContentByte waterMarkContent; iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(ModelPicName); image.GrayFill = 80; //透明度,灰色填充 //image.Rotation = 40;//旋转 //image.RotationDegrees = 40;//旋转角度 //水印的位置 if (left < 0) { left = width / 2 - image.Width + left; } //image.SetAbsolutePosition(left, (height - image.Height) - top); image.SetAbsolutePosition(left, (height / 2 - image.Height) - top); //每一页加水印,也可以设置某一页加水印 for (int i = 1; i <= numberOfPages; i++) { waterMarkContent = pdfStamper.GetUnderContent(i); //内容下层加水印 //waterMarkContent = pdfStamper.GetOverContent(i);//内容上层加水印 waterMarkContent.AddImage(image); } return(outputfilepath); } catch (Exception ex) { throw ex; } finally { if (pdfStamper != null) { pdfStamper.Close(); } if (pdfReader != null) { pdfReader.Close(); } } }
/// <summary> /// Executes the action. /// </summary> /// <param name="rockContext">The rock context.</param> /// <param name="action">The action.</param> /// <param name="entity">The entity.</param> /// <param name="errorMessages">The error messages.</param> /// <returns></returns> public override bool Execute(RockContext rockContext, WorkflowAction action, object entity, out List <string> errorMessages) { errorMessages = new List <string>(); PDFWorkflowObject pdfWorkflowObject = new PDFWorkflowObject(); // A PDF merge can enter in two ways, kicked off with trigger or called from a block // If it is called from a block we will get our information from a PDFWorkflowObject // Otherwise we will need to get our information from the workflow attributes if (entity is PDFWorkflowObject) { pdfWorkflowObject = Utility.GetPDFFormMergeFromEntity(entity, out errorMessages); } else { pdfWorkflowObject = new PDFWorkflowObject(action, rockContext); } BinaryFile renderedPDF = new BinaryFile(); // Merge PDF using (MemoryStream ms = new MemoryStream()) { var pdfGuid = GetAttributeValue(action, "PDFTemplate"); var pdf = new BinaryFileService(rockContext).Get(pdfGuid.AsGuid()); var pdfBytes = pdf.ContentStream.ReadBytesToEnd(); var pdfReader = new PdfReader(pdfBytes); var stamper = new PdfStamper(pdfReader, ms); var form = stamper.AcroFields; form.GenerateAppearances = true; var fieldKeys = form.Fields.Keys; // Field keys are the names of form fields in a pdf form foreach (string fieldKey in fieldKeys) { // If this is a key value pairing if (pdfWorkflowObject.MergeObjects.ContainsKey(fieldKey)) { if (pdfWorkflowObject.MergeObjects[fieldKey] is string) { form.SetField(fieldKey, pdfWorkflowObject.MergeObjects[fieldKey] as string); } } // otherwise test for lava and use the form value as the lava input else { string fieldValue = form.GetField(fieldKey); if (!string.IsNullOrWhiteSpace(fieldValue) && fieldValue.HasMergeFields()) { form.SetField(fieldKey, fieldValue.ResolveMergeFields(pdfWorkflowObject.MergeObjects)); } } } // Should we flatten the form stamper.FormFlattening = GetActionAttributeValue(action, "Flatten").AsBoolean(); stamper.Close(); pdfReader.Close(); // Generate New Object renderedPDF.CopyPropertiesFrom(pdf); renderedPDF.Guid = Guid.NewGuid(); renderedPDF.BinaryFileTypeId = new BinaryFileTypeService(rockContext).Get(new Guid(Rock.SystemGuid.BinaryFiletype.DEFAULT)).Id; BinaryFileData pdfData = new BinaryFileData(); pdfData.Content = ms.ToArray(); renderedPDF.DatabaseData = pdfData; pdfReader.Close(); } if (entity is PDFWorkflowObject) { entity = pdfWorkflowObject; } else { BinaryFileService binaryFileService = new BinaryFileService(rockContext); binaryFileService.Add(renderedPDF); rockContext.SaveChanges(); Guid guid = GetAttributeValue(action, "PDFOutput").AsGuid(); if (!guid.IsEmpty()) { var attribute = AttributeCache.Get(guid, rockContext); if (attribute != null) { SetWorkflowAttributeValue(action, guid, renderedPDF.Guid.ToString()); } } } return(true); }
public pdfparser(string path) { reader = new PdfReader(path); }
/** Entry point to encrypt a PDF document. The encryption parameters are the same as in * <code>PdfWriter</code>. The userPassword and the * ownerPassword can be null or have zero length. In this case the ownerPassword * is replaced by a random string. The open permissions for the document can be * AllowPrinting, AllowModifyContents, AllowCopy, AllowModifyAnnotations, * AllowFillIn, AllowScreenReaders, AllowAssembly and AllowDegradedPrinting. * The permissions can be combined by ORing them. * @param reader the read PDF * @param os the output destination * @param type the type of encryption. It can be one of STANDARD_ENCRYPTION_40, STANDARD_ENCRYPTION_128 or ENCRYPTION_AES128. * Optionally DO_NOT_ENCRYPT_METADATA can be ored to output the metadata in cleartext * @param userPassword the user password. Can be null or empty * @param ownerPassword the owner password. Can be null or empty * @param permissions the user permissions * values delete the key in the original info dictionary * @throws DocumentException on error * @throws IOException on error */ public static void Encrypt(PdfReader reader, Stream os, int type, String userPassword, String ownerPassword, int permissions) { PdfStamper stamper = new PdfStamper(reader, os); stamper.SetEncryption(type, userPassword, ownerPassword, permissions); stamper.Close(); }
internal AcroFields(PdfReader reader, PdfWriter writer) { this.reader = reader; this.writer = writer; xfa = new XfaForm(reader); if (writer is PdfStamperImp) { append = ((PdfStamperImp)writer).append; } Fill(); }
/** * Copies the output intent dictionary from other document to this one. * @param reader the other document * @param checkExistence <CODE>true</CODE> to just check for the existence of a valid output intent * dictionary, <CODE>false</CODE> to insert the dictionary if it exists * @throws IOException on error * @return <CODE>true</CODE> if the output intent dictionary exists, <CODE>false</CODE> * otherwise */ public bool SetOutputIntents(PdfReader reader, bool checkExistence) { PdfDictionary catalog = reader.Catalog; PdfArray outs = catalog.GetAsArray(PdfName.OUTPUTINTENTS); if (outs == null) return false; ArrayList arr = outs.ArrayList; if (outs.Size == 0) return false; PdfDictionary outa = outs.GetAsDict(0); PdfObject obj = PdfReader.GetPdfObject(outa.Get(PdfName.S)); if (obj == null || !PdfName.GTS_PDFX.Equals(obj)) return false; if (checkExistence) return true; PRStream stream = (PRStream)PdfReader.GetPdfObject(outa.Get(PdfName.DESTOUTPUTPROFILE)); byte[] destProfile = null; if (stream != null) { destProfile = PdfReader.GetStreamBytes(stream); } SetOutputIntents(GetNameString(outa, PdfName.OUTPUTCONDITIONIDENTIFIER), GetNameString(outa, PdfName.OUTPUTCONDITION), GetNameString(outa, PdfName.REGISTRYNAME), GetNameString(outa, PdfName.INFO), destProfile); return true; }
protected internal virtual int GetNewObjectNumber(PdfReader reader, int number, int generation) { return currentPdfReaderInstance.GetNewObjectNumber(number, generation); }
/** Writes the reader to the document and frees the memory used by it. * The main use is when concatenating multiple documents to keep the * memory usage restricted to the current appending document. * @param reader the <CODE>PdfReader</CODE> to free * @throws IOException on error */ public virtual void FreeReader(PdfReader reader) { currentPdfReaderInstance = (PdfReaderInstance)importedPages[reader]; if (currentPdfReaderInstance == null) return; currentPdfReaderInstance.WriteAllPages(); currentPdfReaderInstance = null; importedPages.Remove(reader); }
/** Gets a page from other PDF document. The page can be used as * any other PdfTemplate. Note that calling this method more than * once with the same parameters will retrieve the same object. * @param reader the PDF document where the page is * @param pageNumber the page number. The first page is 1 * @return the template representing the imported page */ public virtual PdfImportedPage GetImportedPage(PdfReader reader, int pageNumber) { PdfReaderInstance inst = (PdfReaderInstance)importedPages[reader]; if (inst == null) { inst = reader.GetPdfReaderInstance(this); importedPages[reader] = inst; } return inst.GetImportedPage(pageNumber); }
public static Hashtable GetNamedDestination(PdfReader reader, bool fromNames) { IntHashtable pages = new IntHashtable(); int numPages = reader.NumberOfPages; for (int k = 1; k <= numPages; ++k) pages[reader.GetPageOrigRef(k).Number] = k; Hashtable names = fromNames ? reader.GetNamedDestinationFromNames() : reader.GetNamedDestinationFromStrings(); String[] keys = new String[names.Count]; names.Keys.CopyTo(keys, 0); foreach (String name in keys) { PdfArray arr = (PdfArray)names[name]; StringBuilder s = new StringBuilder(); try { s.Append(pages[(arr.GetAsIndirectObject(0)).Number]); s.Append(' ').Append(arr[1].ToString().Substring(1)); for (int k = 2; k < arr.Size; ++k) s.Append(' ').Append(arr[k].ToString()); names[name] = s.ToString(); } catch { names.Remove(name); } } return names; }
public void WriteAbout(int n) { string pasta; pasta = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath; if (!Directory.Exists(Path.Combine(pasta, "ErgoMobile", "Exported", "temp", "new"))) { Directory.CreateDirectory(Path.Combine(pasta, "ErgoMobile", "Exported", "temp", "new")); } char c = (char)(41 + n); string oldFile; string newFile; if (n >= 0) { oldFile = Path.Combine(pasta, "ErgoMobile", "Exported", "temp", (n + 1) + c + ".pdf"); newFile = Path.Combine(pasta, "ErgoMobile", "Exported", "temp", "new", (n + 1) + c + ".pdf"); } else { oldFile = Path.Combine(pasta, "ErgoMobile", "Exported", "temp", "99total.pdf"); newFile = Path.Combine(pasta, "ErgoMobile", "Exported", "temp", "new", "99total.pdf"); } // open the reader PdfReader reader = new PdfReader(oldFile); Rectangle size = reader.GetPageSizeWithRotation(1); Document document = new Document(size); // open the writer if (File.Exists(newFile)) { File.Delete(newFile); } 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_BOLD, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); cb.SetColorFill(BaseColor.DARK_GRAY); cb.SetFontAndSize(bf, 17); // write the text in the pdf content string Text = "Total respondido: " + (mr + r + reg + b + mb) + " Não respondido: " + nr; if (lang == "en") { Text = "Total answered: " + (mr + r + reg + b + mb) + " Not answered: " + nr; } cb.BeginText(); // put the alignment and coordinates here cb.ShowTextAligned(1, Text, 296, 760, 0); cb.EndText(); cb.BeginText(); Text = "Muito ruim: " + mr + " Ruim: " + r + " Regular: " + reg + " Bom: " + b + " Muito bom: " + mb; if (lang == "en") { Text = "Too bad: " + mr + " Bad: " + r + " Regular: " + reg + " Good: " + b + " Very good: " + mb; } // put the alignment and coordinates here cb.ShowTextAligned(1, Text, 296, 740, 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(); }
private void readPng() { for (var i = 0; i < Pngid.Length; i++) { if (Pngid[i] != _isp.ReadByte()) { throw new IOException("File is not a valid PNG."); } } var buffer = new byte[Transfersize]; while (true) { var len = GetInt(_isp); var marker = GetString(_isp); if (len < 0 || !checkMarker(marker)) { throw new IOException("Corrupted PNG file."); } if (IDAT.Equals(marker)) { int size; while (len != 0) { size = _isp.Read(buffer, 0, Math.Min(len, Transfersize)); if (size <= 0) { return; } _idat.Write(buffer, 0, size); len -= size; } } else if (tRNS.Equals(marker)) { switch (_colorType) { case 0: if (len >= 2) { len -= 2; var gray = GetWord(_isp); if (_bitDepth == 16) { _transRedGray = gray; } else { _additional.Put(PdfName.Mask, new PdfLiteral("[" + gray + " " + gray + "]")); } } break; case 2: if (len >= 6) { len -= 6; var red = GetWord(_isp); var green = GetWord(_isp); var blue = GetWord(_isp); if (_bitDepth == 16) { _transRedGray = red; _transGreen = green; _transBlue = blue; } else { _additional.Put(PdfName.Mask, new PdfLiteral("[" + red + " " + red + " " + green + " " + green + " " + blue + " " + blue + "]")); } } break; case 3: if (len > 0) { _trans = new byte[len]; for (var k = 0; k < len; ++k) { _trans[k] = (byte)_isp.ReadByte(); } len = 0; } break; } Utilities.Skip(_isp, len); } else if (IHDR.Equals(marker)) { _width = GetInt(_isp); _height = GetInt(_isp); _bitDepth = _isp.ReadByte(); _colorType = _isp.ReadByte(); _compressionMethod = _isp.ReadByte(); _filterMethod = _isp.ReadByte(); _interlaceMethod = _isp.ReadByte(); } else if (PLTE.Equals(marker)) { if (_colorType == 3) { var colorspace = new PdfArray(); colorspace.Add(PdfName.Indexed); colorspace.Add(getColorspace()); colorspace.Add(new PdfNumber(len / 3 - 1)); var colortable = new ByteBuffer(); while ((len--) > 0) { colortable.Append_i(_isp.ReadByte()); } colorspace.Add(new PdfString(_colorTable = colortable.ToByteArray())); _additional.Put(PdfName.Colorspace, colorspace); } else { Utilities.Skip(_isp, len); } } else if (pHYs.Equals(marker)) { var dx = GetInt(_isp); var dy = GetInt(_isp); var unit = _isp.ReadByte(); if (unit == 1) { _dpiX = (int)(dx * 0.0254f + 0.5f); _dpiY = (int)(dy * 0.0254f + 0.5f); } else { if (dy != 0) { _xyRatio = dx / (float)dy; } } } else if (cHRM.Equals(marker)) { _xW = GetInt(_isp) / 100000f; _yW = GetInt(_isp) / 100000f; _xR = GetInt(_isp) / 100000f; _yR = GetInt(_isp) / 100000f; _xG = GetInt(_isp) / 100000f; _yG = GetInt(_isp) / 100000f; _xB = GetInt(_isp) / 100000f; _yB = GetInt(_isp) / 100000f; _hasChrm = !(Math.Abs(_xW) < 0.0001f || Math.Abs(_yW) < 0.0001f || Math.Abs(_xR) < 0.0001f || Math.Abs(_yR) < 0.0001f || Math.Abs(_xG) < 0.0001f || Math.Abs(_yG) < 0.0001f || Math.Abs(_xB) < 0.0001f || Math.Abs(_yB) < 0.0001f); } else if (sRGB.Equals(marker)) { var ri = _isp.ReadByte(); _intent = _intents[ri]; _gamma = 2.2f; _xW = 0.3127f; _yW = 0.329f; _xR = 0.64f; _yR = 0.33f; _xG = 0.3f; _yG = 0.6f; _xB = 0.15f; _yB = 0.06f; _hasChrm = true; } else if (gAMA.Equals(marker)) { var gm = GetInt(_isp); if (gm != 0) { _gamma = 100000f / gm; if (!_hasChrm) { _xW = 0.3127f; _yW = 0.329f; _xR = 0.64f; _yR = 0.33f; _xG = 0.3f; _yG = 0.6f; _xB = 0.15f; _yB = 0.06f; _hasChrm = true; } } } else if (iCCP.Equals(marker)) { do { --len; } while (_isp.ReadByte() != 0); _isp.ReadByte(); --len; var icccom = new byte[len]; var p = 0; while (len > 0) { var r = _isp.Read(icccom, p, len); if (r < 0) { throw new IOException("Premature end of file."); } p += r; len -= r; } var iccp = PdfReader.FlateDecode(icccom, true); icccom = null; try { _iccProfile = IccProfile.GetInstance(iccp); } catch { _iccProfile = null; } } else if (IEND.Equals(marker)) { break; } else { Utilities.Skip(_isp, len); } Utilities.Skip(_isp, 4); } }
// --------------------------------------------------------------------------- public void Write(Stream stream) { string datasheet = Path.Combine(Utility.ResourcePdf, "datasheet.pdf"); using (ZipFile zip = new ZipFile()) { // Create a reader to extract info PdfReader reader = new PdfReader(datasheet); // Get the fields from the reader (read-only!!!) AcroFields form = reader.AcroFields; reader.Close(); // Loop over the fields and get info about them StringBuilder sb = new StringBuilder(); foreach (string key in form.Fields.Keys) { sb.Append(key); sb.Append(": "); switch (form.GetFieldType(key)) { case AcroFields.FIELD_TYPE_CHECKBOX: sb.Append("Checkbox"); break; case AcroFields.FIELD_TYPE_COMBO: sb.Append("Combobox"); break; case AcroFields.FIELD_TYPE_LIST: sb.Append("List"); break; case AcroFields.FIELD_TYPE_NONE: sb.Append("None"); break; case AcroFields.FIELD_TYPE_PUSHBUTTON: sb.Append("Pushbutton"); break; case AcroFields.FIELD_TYPE_RADIOBUTTON: sb.Append("Radiobutton"); break; case AcroFields.FIELD_TYPE_SIGNATURE: sb.Append("Signature"); break; case AcroFields.FIELD_TYPE_TEXT: sb.Append("Text"); break; default: sb.Append("?"); break; } sb.Append(Environment.NewLine); } // Get possible values for field "CP_1" sb.Append("Possible values for CP_1:"); sb.Append(Environment.NewLine); string[] states = form.GetAppearanceStates("CP_1"); for (int i = 0; i < states.Length; i++) { sb.Append(" - "); sb.Append(states[i]); sb.Append(Environment.NewLine); } // Get possible values for field "category" sb.Append("Possible values for category:"); sb.Append(Environment.NewLine); states = form.GetAppearanceStates("category"); for (int i = 0; i < states.Length - 1; i++) { sb.Append(states[i]); sb.Append(", "); } sb.Append(states[states.Length - 1]); zip.AddEntry(RESULT, sb.ToString()); zip.AddFile(datasheet, ""); zip.Save(stream); } }
internal virtual RandomAccessFileOrArray GetReaderFile(PdfReader reader) { return currentPdfReaderInstance.ReaderFile; }
public PdfReaderContentParser(PdfReader reader) { this.reader = reader; }
/** * Writes information about the specified page in a PDF file to the specified output stream. * @since 2.1.5 * @param pdfFile a File instance referring to a PDF file * @param pageNum the page number to read * @param out the output stream to send the content to * @throws IOException */ public static void ListContentStream(string pdfFile, int pageNum, TextWriter outp) { PdfReader reader = new PdfReader(pdfFile); ListContentStreamForPage(reader, pageNum, outp); }
public SmartPdfSplitter(PdfReader reader) { this.reader = reader; reader.Appendable = true; numberOfPages = reader.NumberOfPages; LOGGER.Info(String.Format("Creating a splitter for a document with {0} pages", numberOfPages)); }
static void Main(string[] args) { var text = new StringBuilder(); var pdfReader = new PdfReader(ConfigurationManager.AppSettings["RegistrationFilePath"]); for (var page = 1; page <= pdfReader.NumberOfPages; page++) { ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy(); var currentText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy); currentText = Encoding.UTF8.GetString(Encoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(currentText))); text.Append(currentText); } pdfReader.Close(); var lines = text.ToString().Split(new[] { '\n' }, StringSplitOptions.None); var csvBuilderDict = new Dictionary <char, StringBuilder>(); foreach (var line in lines) { try { var match = Regex.Match(line, RowRegex); if (match.Success) { var name = match.Groups[1].ToString(); var nameParts = name.Split(','); var lastName = nameParts[0].Trim().Replace(",", string.Empty); var firstAndMidName = nameParts[1].Trim().Split(' '); var firstName = firstAndMidName[0].Replace(",", string.Empty); var midName = firstAndMidName.Length > 1 ? firstAndMidName[1].Replace(",", string.Empty) : null; var address = match.Groups[2].ToString().Trim().Replace(",", string.Empty); var address1 = string.Empty; var address2 = string.Empty; var address3 = string.Empty; var addressMatch = Regex.Match(address, AddressRegex); if (addressMatch.Success) { address1 = addressMatch.Groups[1].ToString().Trim(); address2 = addressMatch.Groups[2].ToString().Trim(); address3 = addressMatch.Groups[3].ToString().Trim(); } var registrationDate = new string(match.Groups[3].ToString().Replace(" ", string.Empty).Reverse().ToArray()).Replace(",", string.Empty); var affiliation = match.Groups[4].ToString().Trim().Replace(",", string.Empty); var precinct = match.Groups[5].ToString().Trim().Replace(",", string.Empty); var ward = match.Groups[6].ToString().Trim().Replace(",", string.Empty); var vote0415 = match.Groups[7].ToString().Trim().Replace(",", string.Empty); var vote1114 = match.Groups[8].ToString().Trim().Replace(",", string.Empty); var vote0714 = match.Groups[9].ToString().Trim().Replace(",", string.Empty); var vote0414 = match.Groups[10].ToString().Trim().Replace(",", string.Empty); var vote0413 = match.Groups[11].ToString().Trim().Replace(",", string.Empty); var vote1112 = match.Groups[12].ToString().Trim().Replace(",", string.Empty); var smd = match.Groups[13].ToString().Trim().Replace(",", string.Empty); if (!csvBuilderDict.ContainsKey(lastName.First())) { var newSb = new StringBuilder("LastName, FirstName, MiddleInitial, FullAddress, Address1, Address2, Address3, RegistrationDate, Affiliation, Precinct, Ward, Vote0415, Vote1114, Vote0714, Vote0414, Vote0413, Vote1112, SingleMemberDistrict"); newSb.Append(Environment.NewLine); csvBuilderDict.Add(lastName.First(), newSb); } StringBuilder sb; csvBuilderDict.TryGetValue(lastName.First(), out sb); sb.AppendLine($"{lastName},{firstName},{midName},{address},{address1},{address2},{address3},{registrationDate},{affiliation},{precinct},{ward},{vote0415},{vote1114},{vote0714},{vote0414},{vote0413},{vote1112},{smd}"); } } catch (Exception e) { // Ignore and move on } } foreach (var stringBuilderEntry in csvBuilderDict) { File.WriteAllText($"registration-{stringBuilderEntry.Key}.csv", stringBuilderEntry.Value.ToString()); } }
/// <summary>Creates a PdfSigner instance.</summary> /// <remarks> /// Creates a PdfSigner instance. Uses a /// <see cref="System.IO.MemoryStream"/> /// instead of a temporary file. /// </remarks> /// <param name="reader">PdfReader that reads the PDF file</param> /// <param name="outputStream">OutputStream to write the signed PDF file</param> /// <param name="append">boolean to indicate whether the signing should happen in append mode or not</param> /// <exception cref="System.IO.IOException"/> public PdfSigner(PdfReader reader, Stream outputStream, bool append) : this(reader, outputStream, null, append) { }
protected void Page_Load(object sender, EventArgs e) { string action = Request["action"]; string filetype = Request["filetype"]; string ordercode = Request["ordercode"]; string fileid = Request["fileid"]; string userid = Request["userid"] == "null" ? "" : Request["userid"]; string json = ""; string sql = ""; DataTable dt; PdfReader pdfReader; IDatabase db = SeRedis.redis.GetDatabase(); FileInfo fi; string username = ""; DataTable dt_user = DBMgr.GetDataTable("select * from Sys_User where ID='" + userid + "'"); if (dt_user.Rows.Count > 0) { username = dt_user.Rows[0]["REALNAME"] + ""; } switch (action) { case "merge": string splitfilename = ""; string filestatus = ""; string fileids = Request["fileids"].Replace("[", "").Replace("]", ""); string[] fileidarray = fileids.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); IList <string> pathlist = new List <string>(); //如果传输到这个页面的比如订单文件大于等于两个,需要将这文件合并后再输出 if (fileidarray.Length > 1) { for (int i = 0; i < fileidarray.Length; i++) { sql = "select * from list_attachment where ID=" + fileidarray[i]; dt = DBMgr.GetDataTable(sql); if (dt.Rows.Count > 0) { if (File.Exists(@"d:\ftpserver\" + dt.Rows[0]["FILENAME"] + "")) { pathlist.Add(dt.Rows[0]["FILENAME"] + ""); } } } string orifilename = Guid.NewGuid().ToString(); splitfilename = "/" + DateTime.Now.ToString("yyyy-MM-dd") + "/" + orifilename + ".pdf"; MergePDFFiles(pathlist, @"d:\ftpserver\" + splitfilename); sql = @"insert into list_attachment (id,FILENAME,ORIGINALNAME,UPLOADTIME,FILETYPE,ORDERCODE,FILESUFFIX,uploaduserid,ISUPLOAD) values (list_attachment_id.nextval,'{0}','{1}',sysdate,'{2}','{3}','{4}','{5}','1')"; sql = string.Format(sql, splitfilename, orifilename + ".pdf", 44, ordercode, "pdf", userid); DBMgr.ExecuteNonQuery(sql); //合并完成后数据库删除原有文件,插入新的文件记录"/" + ordercode try { for (int k = 0; k < fileidarray.Length; k++) { sql = "delete from list_attachment where id= '" + fileidarray[k] + "'"; DBMgr.ExecuteNonQuery(sql); } for (int j = 0; j < pathlist.Count; j++) { File.Delete(@"d:\ftpserver\" + pathlist[j]); } } catch (Exception ex) { } } Response.Write("{success:true}"); Response.End(); break; case "loadpdf": sql = "select * from list_attachment where id='" + Request["fileid"] + "'"; dt = DBMgr.GetDataTable(sql); splitfilename = dt.Rows[0]["FILENAME"] + ""; fileid = Request["fileid"]; filestatus = dt.Rows[0]["SPLITSTATUS"] + ""; //0 未拆分 1 已拆分 if (filestatus == "" || filestatus == "0") //如果未拆分,初始化拆分明细界面内容并写入缓存 { //插入待压缩文件的记录【新的压缩方式】 因为工具端上传的文件是没有压缩日志的 sql = "select t.* from pdfshrinklog t where t.attachmentid='" + fileid + "'"; dt = DBMgr.GetDataTable(sql); if (dt.Rows.Count == 0) { sql = "insert into pdfshrinklog (id,attachmentid) values (pdfshrinklog_id.nextval,'" + fileid + "')"; DBMgr.ExecuteNonQuery(sql); } pdfReader = new PdfReader(@"d:\ftpserver\" + splitfilename); int totalPages = pdfReader.NumberOfPages; pdfReader.Close(); pdfReader.Dispose(); sql = "select * from sys_filetype where parentfiletypeid=44 order by sortindex asc"; //取该文件类型下面所有的子类型 dt = DBMgr.GetDataTable(sql); //构建页码表格数据 DataTable dt2 = new DataTable(); DataColumn dc = new DataColumn("ID"); dt2.Columns.Add(dc); for (int k = 0; k < dt.Rows.Count; k++) { dc = new DataColumn("c-" + dt.Rows[k]["FILETYPEID"] + "@" + dt.Rows[k]["FILETYPENAME"]); dt2.Columns.Add(dc); } for (int i = 1; i <= totalPages; i++) { DataRow dr = dt2.NewRow(); dr["ID"] = i; dt2.Rows.Add(dr); } json = JsonConvert.SerializeObject(dt2); //订单文件拆分明细保存至缓存数据库 并设置过期时间是24小时 db.StringSet(ordercode + ":" + fileid + ":splitdetail", json, TimeSpan.FromMinutes(1440)); } else //如果已拆分 直接读取缓存数据库 { if (db.KeyExists(ordercode + ":" + fileid + ":splitdetail")) { json = db.StringGet(ordercode + ":" + fileid + ":splitdetail"); } else { pdfReader = new PdfReader(@"d:\ftpserver\" + splitfilename); int totalPages = pdfReader.NumberOfPages; pdfReader.Close(); pdfReader.Dispose(); sql = "select * from sys_filetype where parentfiletypeid=44 order by sortindex asc"; //取该文件类型下面所有的子类型 dt = DBMgr.GetDataTable(sql); //构建页码表格数据 DataTable dt2 = new DataTable(); DataColumn dc = new DataColumn("ID"); dt2.Columns.Add(dc); for (int k = 0; k < dt.Rows.Count; k++) { dc = new DataColumn("c-" + dt.Rows[k]["FILETYPEID"] + "@" + dt.Rows[k]["FILETYPENAME"]); dt2.Columns.Add(dc); } for (int i = 1; i <= totalPages; i++) { DataRow dr = dt2.NewRow(); dr["ID"] = i; foreach (DataRow tmp in dt.Rows) //一个子类型是一列 取每一列的值 { sql = "select pages from list_attachmentdetail where ordercode='" + ordercode + "' and attachmentid=" + fileid + " and filetypeid=" + tmp["FILETYPEID"]; DataTable sub_dt = DBMgr.GetDataTable(sql); if (sub_dt.Rows.Count > 0) { string[] tmparray = sub_dt.Rows[0]["PAGES"].ToString().Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); if (tmparray.Contains <string>(i + "")) { dr["c-" + tmp["FILETYPEID"] + "@" + tmp["FILETYPENAME"]] = "√"; } else { dr["c-" + tmp["FILETYPEID"] + "@" + tmp["FILETYPENAME"]] = ""; } } } dt2.Rows.Add(dr); } json = JsonConvert.SerializeObject(dt2); db.StringSet(ordercode + ":" + fileid + ":splitdetail", json, TimeSpan.FromMinutes(1440)); } } //sql = "select * from sys_filetype where filetypeid=" + filetype; //dt = DBMgr.GetDataTable(sql); //string filetypename = dt.Rows[0]["FILETYPENAME"] + ""; //如果是已经拆分好的 需要调出所有拆分好的文件类型 filetype:'" + filetypename + "' sql = @"select a.id,a.filetypeid,b.filetypename from LIST_ATTACHMENTDETAIL a left join sys_filetype b on a.filetypeid=b.filetypeid where a.attachmentid='" + fileid + "' and a.ordercode='" + ordercode + "' order by b.sortindex asc"; dt = DBMgr.GetDataTable(sql); string json_type = JsonConvert.SerializeObject(dt); Response.Write(@"{success:true,src:'\/file\/" + splitfilename + "',rows:" + json + ",fileid:" + fileid + ",filestatus:'" + filestatus + "',result:" + json_type + "}"); Response.End(); break; case "split": int filepages = 0; string data = Request["pages"]; JArray jsonarray = JsonConvert.DeserializeObject <JArray>(data); db.StringSet(ordercode + ":" + fileid + ":splitdetail", data); sql = "select * from list_attachment where ID='" + fileid + "'"; dt = DBMgr.GetDataTable(sql); //2016-6-16压缩改用pdfshrink在后台执行 string compressname = ""; //如果pdfshrink压缩文件存在 if (File.Exists(@"d:\ftpserver\" + (dt.Rows[0]["FILENAME"] + "").Replace(".pdf", "").Replace(".PDF", "") + "-web.pdf")) { compressname = @"d:\ftpserver\" + (dt.Rows[0]["FILENAME"] + "").Replace(".pdf", "").Replace(".PDF", "") + "-web.pdf"; } else { if (File.Exists(@"d:\Compress\" + fileid + ".pdf")) //如果代码压缩的文件存在 { compressname = @"d:\Compress\" + fileid + ".pdf"; } else { fi = new FileInfo(@"D:\ftpserver\" + dt.Rows[0]["FILENAME"]); CompressPdf(fileid, fi); //不存在则生成压缩文件再进行拆分 compressname = @"d:\Compress\" + fileid + ".pdf"; } } if (File.Exists(compressname)) //如果压缩文件存在 { try { if ((new FileInfo(@"D:\ftpserver\" + dt.Rows[0]["FILENAME"])).Length / 1024 == (new FileInfo(compressname)).Length / 1024) //压缩文件根源文件大小一样 { //没压缩成功 新增压缩任务 DataTable dt_shrink = new DataTable(); dt_shrink = DBMgr.GetDataTable("select * from pdfshrinklog where attachmentid='" + fileid + "' and ISCOMPRESS=0"); if (dt_shrink.Rows.Count <= 0) { sql = "insert into pdfshrinklog (id,attachmentid) values (pdfshrinklog_id.nextval,'" + fileid + "')"; DBMgr.ExecuteNonQuery(sql); } Response.Write("{success:false}"); //没压缩成功 } else { pdfReader = new PdfReader(compressname); filepages = pdfReader.NumberOfPages; sql = "select * from sys_filetype where parentfiletypeid=" + filetype;//取该文件类型下面所有的子类型 dt = DBMgr.GetDataTable(sql); IList <Int32> pagelist; for (int i = 0; i < dt.Rows.Count; i++) { int rotation = 0; pagelist = new List <Int32>(); foreach (JObject jo in jsonarray) { if (jo.Value <string>("c-" + dt.Rows[i]["FILETYPEID"] + "@" + dt.Rows[i]["FILETYPENAME"]) == "√") { pagelist.Add(jo.Value <Int32>("ID")); //统计出该子类型下面所有的页码 } } if (pagelist.Count > 0) { string new_name = DateTimeToUnixTimestamp(DateTime.Now) + ""; if (!Directory.Exists(@"d:/ftpserver/" + dt.Rows[i]["FILETYPEID"] + @"/" + ordercode)) { Directory.CreateDirectory(@"d:/ftpserver/" + dt.Rows[i]["FILETYPEID"] + @"/" + ordercode); } string newfilename = @"d:/ftpserver/" + dt.Rows[i]["FILETYPEID"] + @"/" + ordercode + @"/" + ordercode + "_" + new_name + ".pdf"; FileStream fs = new FileStream(newfilename, FileMode.Create); Document newDocument = new Document(); PdfWriter pdfWriter = PdfWriter.GetInstance(newDocument, fs); pdfWriter.CloseStream = true; newDocument.Open(); PdfContentByte pdfContentByte = pdfWriter.DirectContent; foreach (Int32 page in pagelist) { newDocument.SetPageSize(pdfReader.GetPageSizeWithRotation(page)); newDocument.NewPage(); PdfImportedPage importedPage = pdfWriter.GetImportedPage(pdfReader, page); rotation = pdfReader.GetPageRotation(page); pdfContentByte.AddTemplate(importedPage, 0, 0); if (rotation == 90 || rotation == 270) { pdfContentByte.AddTemplate(importedPage, 0, -1f, 1f, 0, 0, pdfReader.GetPageSizeWithRotation(page).Height); } else { pdfContentByte.AddTemplate(importedPage, 1f, 0, 0, 1f, 0, 0); } } fs.Flush(); newDocument.Close(); sql = "insert into LIST_ATTACHMENTDETAIL (id,sourcefilename,filename,attachmentid,filetypeid,splitetime,ordercode,pages) values (list_attachmentdetail_id.nextval,'{0}','{1}','{2}','{3}',sysdate,'{4}','{5}')"; sql = String.Format(sql, dt.Rows[i]["FILETYPEID"] + @"/" + ordercode + @"/" + ordercode + "_" + new_name + ".pdf", ordercode + "_" + new_name + ".pdf", fileid, dt.Rows[i]["FILETYPEID"], ordercode, string.Join(",", pagelist.ToArray())); DBMgr.ExecuteNonQuery(sql); } } pdfReader.Close(); pdfReader.Dispose(); //拆分完成后更新主文件的状态,同时将拆分好的类型送到页面形成按钮便于查看 sql = "update LIST_ATTACHMENT set SPLITSTATUS=1,CONFIRMSTATUS=1,FILEPAGES=" + filepages + " where id=" + fileid; DBMgr.ExecuteNonQuery(sql); DataTable dt_list_order = DBMgr.GetDataTable("select * from LIST_ORDER where code='" + ordercode + "'"); sql = "update LIST_ORDER set FILESTATUS=1,FILESPLITTIME=sysdate,FILEPAGES=" + filepages + ",FILESPLITEUSERID='" + userid + "',FILESPLITEUSERNAME='******' where code='" + ordercode + "'"; int resultcode = DBMgr.ExecuteNonQuery(sql); if (resultcode > 0) { //若正常拆分在字段修改历史记录表中记录 sql = "insert into list_updatehistory(id,ordercode,type,userid, updatetime, oldfield,newfield,name,fieldname,code,field)" + " values(LIST_UPDATEHISTORY_ID.nextval,'" + ordercode + "','1','" + userid + "',sysdate,'" + dt_list_order.Rows[0]["FILESTATUS"] + "','1','" + username + "','业务—文件状态-WEB','" + ordercode + "','FILESTATUS')"; DBMgr.ExecuteNonQuery(sql); } sql = "select a.id,a.filetypeid,b.filetypename from LIST_ATTACHMENTDETAIL a left join sys_filetype b on a.filetypeid=b.filetypeid where a.ordercode='" + ordercode + "' order by b.sortindex asc"; dt = DBMgr.GetDataTable(sql); json = JsonConvert.SerializeObject(dt); Response.Write("{success:true,result:" + json + "}"); } } catch (Exception ex) { string error = "{\"ordercode\":\"" + ordercode + "\",\"fileid\":\"" + fileid + "\",\"error\":\"" + ex.Message + "\"}"; db.ListRightPush("spliterror", error); Response.Write("{success:false,result:[" + error + "]}"); //拆分异常 } } else { Response.Write("{success:false}"); //压缩文件不存在 } Response.End(); break; case "cancelsplit": //删除文件明细 string fileids_temp = ""; sql = "select * from list_attachmentdetail where ordercode='" + ordercode + "'"; dt = DBMgr.GetDataTable(sql); for (int i = 0; i < dt.Rows.Count; i++) { if (!fileids_temp.Contains(dt.Rows[i]["attachmentid"].ToString())) { fileids_temp = fileids_temp + dt.Rows[i]["attachmentid"].ToString() + ","; db.KeyDelete(ordercode + ":" + fileid + ":splitdetail"); } if (File.Exists(@"d:/ftpserver/" + dt.Rows[i]["SOURCEFILENAME"])) { File.Delete(@"d:/ftpserver/" + dt.Rows[i]["SOURCEFILENAME"]); } sql = "delete from list_attachmentdetail where id=" + dt.Rows[i]["ID"]; DBMgr.ExecuteNonQuery(sql); } if (fileids_temp != "") { fileids_temp = fileids_temp.Substring(0, fileids_temp.Length - 1); sql = "update LIST_ATTACHMENT set SPLITSTATUS=0 where id in(" + fileids_temp + ")"; DBMgr.ExecuteNonQuery(sql); } DataTable dt_list_order_c = DBMgr.GetDataTable("select * from LIST_ORDER where code='" + ordercode + "'"); //20160922赵艳提出 拆分完,需要更新订单表的 拆分人和时间,和文件状态 sql = "update LIST_ORDER set FILESTATUS=0,FILEPAGES=null,FILESPLITEUSERNAME=null,FILESPLITEUSERID=null,FILESPLITTIME=null where code='" + ordercode + "'"; DBMgr.ExecuteNonQuery(sql); sql = "insert into list_updatehistory(id,ordercode,type,userid, updatetime, oldfield,newfield,name,fieldname,code,field)" + " values(LIST_UPDATEHISTORY_ID.nextval,'" + ordercode + "','1','" + userid + "',sysdate,'" + dt_list_order_c.Rows[0]["FILESTATUS"] + "','0','" + username + "','业务—文件状态-WEB','" + ordercode + "','FILESTATUS')"; DBMgr.ExecuteNonQuery(sql); Response.Write("{success:true}"); Response.End(); break; case "loadfile": sql = "select * from list_attachmentdetail where id='" + fileid + "'"; dt = DBMgr.GetDataTable(sql); if (dt.Rows.Count > 0) { Response.Write(@"{success:true,src:'/file/" + dt.Rows[0]["SOURCEFILENAME"] + "'}"); Response.End(); } break; case "adjustpage": int currentPage = Convert.ToInt32(Request["currentpage"]); string direction = Request["direction"]; sql = "select * from list_attachment where ID=" + fileid; dt = DBMgr.GetDataTable(sql); if (dt.Rows.Count > 0) { if (File.Exists(@"d:\ftpserver\" + dt.Rows[0]["FILENAME"] + "")) { string newid = Guid.NewGuid().ToString(); string outFile = dt.Rows[0]["FILETYPE"] + @"/" + ordercode + @"/" + newid + ".pdf"; AdjustPage(dt.Rows[0]["FILENAME"] + "", currentPage, direction, @"d:/ftpserver/" + outFile); //删除老文件 并更新该记录的FILENAME字段 //2016-8-17测试发现调整页码顺序重新生成文件,删除时有可能文件正在使用中,故原始文件暂不需要删除 下面这句话会报错 //File.Delete(@"d:/ftpserver/" + dt.Rows[0]["FILENAME"]); sql = "update list_attachment set FileName='" + outFile + "',fileguid='" + newid + "',originalname='" + newid + ".pdf' where id=" + fileid; DBMgr.ExecuteNonQuery(sql); Response.Write(@"{success:true,src:'/file/" + outFile + "'}"); Response.End(); } } break; case "compress": string ser_path = Server.MapPath(Request["path"]); fi = new FileInfo(ser_path); CompressPdf(fileid, fi); break; case "loadform": sql = "SELECT * FROM list_order WHERE CODE = '" + ordercode + "'"; dt = DBMgr.GetDataTable(sql); if (!string.IsNullOrEmpty(dt.Rows[0]["ASSOCIATENO"].ToString())) { sql = "SELECT * FROM list_order WHERE CODE != '" + ordercode + "' and ASSOCIATENO='" + dt.Rows[0]["ASSOCIATENO"] + "'"; DataTable dt_gl = DBMgr.GetDataTable(sql); if (dt_gl.Rows.Count > 0) { dt.Rows[0]["ASSOCIATENO"] = dt_gl.Rows[0]["CODE"]; } else { dt.Rows[0]["ASSOCIATENO"] = ""; } } string result = JsonConvert.SerializeObject(dt).Replace("[", "").Replace("]", ""); sql = "select * from list_attachment where ordercode='" + ordercode + "' and filetype=44 order by uploadtime asc"; DataTable dt_file = DBMgr.GetDataTable(sql); string result_file = JsonConvert.SerializeObject(dt_file); Response.Write("{formdata:" + result + ",filedata:" + result_file + "}"); Response.End(); break; case "loadattach": sql = "select * from list_attachment where ordercode='" + ordercode + "' and filetype=44 order by uploadtime asc"; DataTable dt_attach = DBMgr.GetDataTable(sql); string result_attach = JsonConvert.SerializeObject(dt_attach); Response.Write("{filedata:" + result_attach + "}"); Response.End(); break; case "delete": //删除及明细 try { string del_fileids = Request["fileids"].Replace("[", "").Replace("]", ""); string[] del_fileidarray = del_fileids.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < del_fileidarray.Length; i++) { sql = "select * from list_attachment where ID=" + del_fileidarray[i]; dt = DBMgr.GetDataTable(sql); if (dt.Rows.Count > 0) { //删除明细 sql = "select * from list_attachmentdetail where ordercode='" + ordercode + "' and attachmentid=" + del_fileidarray[i]; DataTable dt_detail = DBMgr.GetDataTable(sql); for (int j = 0; j < dt_detail.Rows.Count; j++) { if (File.Exists(@"d:/ftpserver/" + dt_detail.Rows[j]["SOURCEFILENAME"])) { File.Delete(@"d:/ftpserver/" + dt_detail.Rows[j]["SOURCEFILENAME"]); } sql = "delete from list_attachmentdetail where id=" + dt_detail.Rows[j]["ID"]; DBMgr.ExecuteNonQuery(sql); } //删除 if (File.Exists(@"d:/ftpserver/" + dt.Rows[0]["FILENAME"])) { File.Delete(@"d:/ftpserver/" + dt.Rows[0]["FILENAME"]); } sql = "delete from list_attachment where id= '" + del_fileidarray[i] + "'"; DBMgr.ExecuteNonQuery(sql); db.KeyDelete(ordercode + ":" + del_fileidarray[i] + ":splitdetail"); } } sql = "update LIST_ORDER set FILESTATUS=0,FILEPAGES=null,FILESPLITEUSERNAME=null,FILESPLITEUSERID=null,FILESPLITTIME=null where code='" + ordercode + "'"; DBMgr.ExecuteNonQuery(sql); Response.Write("{success:true}"); } catch (Exception ex) { Response.Write("{success:false,error:\"" + ex.Message + "\"}"); } Response.End(); break; } }
/// <summary> /// Firma un documento /// </summary> /// <param name="Source">Documento origen</param> /// <param name="Target">Documento destino</param> /// <param name="Certificate">Certificado a utilizar</param> /// <param name="Reason">Razón de la firma</param> /// <param name="Location">Ubicación</param> /// <param name="AddVisibleSign">Establece si hay que agregar la firma visible al documento</param> public static void SignHashed(string Source, string Target, SysX509.X509Certificate2 Certificate, string Reason, string Location, bool AddVisibleSign) { X509CertificateParser objCP = new X509CertificateParser(); X509Certificate[] objChain = new X509Certificate[] { objCP.ReadCertificate(Certificate.RawData) }; PdfReader objReader = new PdfReader(Source); PdfStamper objStamper = PdfStamper.CreateSignature(objReader, new FileStream(Target, FileMode.Create), '\0'); PdfSignatureAppearance objSA = objStamper.SignatureAppearance; if (AddVisibleSign) { objSA.SetVisibleSignature(new Rectangle(50, 50, 150, 100), 2, null); } objSA.SignDate = DateTime.Now; objSA.SetCrypto(null, objChain, null, null); objSA.Reason = Reason; objSA.Location = Location; objSA.Acro6Layers = true; objSA.Render = PdfSignatureAppearance.SignatureRender.NameAndDescription; PdfSignature objSignature = new PdfSignature(PdfName.ADOBE_PPKMS, PdfName.ADBE_PKCS7_SHA1); objSignature.Date = new PdfDate(objSA.SignDate); objSignature.Name = PdfPKCS7.GetSubjectFields(objChain[0]).GetField("CN"); if (objSA.Reason != null) { objSignature.Reason = objSA.Reason; } if (objSA.Location != null) { objSignature.Location = objSA.Location; } objSA.CryptoDictionary = objSignature; int intCSize = 4000; Hashtable objTable = new Hashtable(); objTable[PdfName.CONTENTS] = intCSize * 2 + 2; objSA.PreClose(objTable); HashAlgorithm objSHA1 = new SHA1CryptoServiceProvider(); Stream objStream = objSA.RangeStream; int intRead = 0; byte[] bytBuffer = new byte[8192]; while ((intRead = objStream.Read(bytBuffer, 0, 8192)) > 0) { objSHA1.TransformBlock(bytBuffer, 0, intRead, bytBuffer, 0); } objSHA1.TransformFinalBlock(bytBuffer, 0, 0); byte[] bytPK = SignMsg(objSHA1.Hash, Certificate, false); byte[] bytOut = new byte[intCSize]; PdfDictionary objDict = new PdfDictionary(); Array.Copy(bytPK, 0, bytOut, 0, bytPK.Length); objDict.Put(PdfName.CONTENTS, new PdfString(bytOut).SetHexWriting(true)); objSA.Close(objDict); }
private void CompressPdf(string fileId, FileInfo fi) { //ITextSharp是一个生成Pdf文件的开源项目 PdfReader reader = new PdfReader(fi.FullName); if (File.Exists(@"D:\Compress\" + fileId + ".pdf"))//先判断对应文件ID的压缩文件是否存在 如果存在,将其删除 { File.Delete(@"D:\Compress\" + fileId + ".pdf"); } string newPath = @"D:\Compress\" + fileId + ".pdf"; using (FileStream fs = new FileStream(newPath, FileMode.Create, FileAccess.Write, FileShare.None)) { using (PdfStamper stamper = new PdfStamper(reader, fs)) { #region for (int i = 1; i <= reader.NumberOfPages; i++) { PdfDictionary page = reader.GetPageN(i); PdfDictionary resources = (PdfDictionary)PdfReader.GetPdfObject(page.Get(PdfName.RESOURCES)); PdfDictionary xobject = (PdfDictionary)PdfReader.GetPdfObject(resources.Get(PdfName.XOBJECT)); if (xobject != null) { PdfObject obj; foreach (PdfName name in xobject.Keys) { obj = xobject.Get(name); if (obj.IsIndirect()) { //Get the current key as a PDF object PdfDictionary imgObject = (PdfDictionary)PdfReader.GetPdfObject(obj); //See if its an image if (imgObject.Get(PdfName.SUBTYPE).Equals(PdfName.IMAGE)) { //NOTE: There's a bunch of different types of filters, I'm only handing the simplest one here which is basically raw JPG, you'll have to research others if (imgObject.Get(PdfName.FILTER).Equals(PdfName.DCTDECODE)) { //Get the raw bytes of the current image byte[] oldBytes = PdfReader.GetStreamBytesRaw((PRStream)imgObject); //Will hold bytes of the compressed image later byte[] newBytes; //Wrap a stream around our original image using (MemoryStream sourceMS = new MemoryStream(oldBytes)) { //Convert the bytes into a .Net image using (System.Drawing.Image oldImage = Bitmap.FromStream(sourceMS)) { //Shrink the image to 90% of the original using (System.Drawing.Image newImage = ShrinkImage(oldImage, 40 / 100f)) { //Convert the image to bytes using JPG at 85% newBytes = ConvertImageToBytes(newImage, 35); } } } //Create a new iTextSharp image from our bytes iTextSharp.text.Image compressedImage = iTextSharp.text.Image.GetInstance(newBytes); //Kill off the old image PdfReader.KillIndirect(obj); //Add our image in its place stamper.Writer.AddDirectImageSimple(compressedImage, (PRIndirectReference)obj); } } } } } } #endregion } } reader.Close(); reader.Dispose(); }
/** * Creates a new PDF based on the one in the reader * @param reader a reader with a PDF file * @throws IOException * @throws DocumentException */ private void ManipulateWithStamper(PdfReader reader) { PdfStamper stamper = new PdfStamper(reader, new MemoryStream()); stamper.Close(); }
protected void AdjustPage(string filename, int currentPage, string direction, string outFile) { PdfReader reader; Document document = new Document(); // Define the output place, and add the document to the stream PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outFile, FileMode.Create)); // Open document document.Open(); // PDF ContentByte PdfContentByte cb = writer.DirectContent; // PDF import page PdfImportedPage newPage; reader = new PdfReader(@"d:\ftpserver\" + filename); int iPageNum = reader.NumberOfPages; for (int j = 1; j <= iPageNum; j++) { if (direction == "down") { if (currentPage == j) { document.NewPage(); newPage = writer.GetImportedPage(reader, j + 1); cb.AddTemplate(newPage, 0, 0); document.NewPage(); newPage = writer.GetImportedPage(reader, j); cb.AddTemplate(newPage, 0, 0); j++; } else { document.NewPage(); newPage = writer.GetImportedPage(reader, j); cb.AddTemplate(newPage, 0, 0); } } if (direction == "up") { if (currentPage == j + 1) { document.NewPage(); newPage = writer.GetImportedPage(reader, j + 1); cb.AddTemplate(newPage, 0, 0); document.NewPage(); newPage = writer.GetImportedPage(reader, j); cb.AddTemplate(newPage, 0, 0); j++; } else { document.NewPage(); newPage = writer.GetImportedPage(reader, j); cb.AddTemplate(newPage, 0, 0); } } //if (direction == "delete") by panhuaguo 2016-4-19 梁总决定不让删除原始文件的某一页 //{ // if (currentPage != j) // { // document.NewPage(); // newPage = writer.GetImportedPage(reader, j); // cb.AddTemplate(newPage, 0, 0); // } //} } document.Close(); }
static void Main() { const string watermark = "PDFsharp"; const int emSize = 150; // Get a fresh copy of the sample PDF file. const string filename = "Portable Document Format.pdf"; var file = Path.Combine(Directory.GetCurrentDirectory(), filename); File.Copy(Path.Combine("../../../../assets/PDFs/", filename), file, true); // Remove ReadOnly attribute from the copy. File.SetAttributes(file, File.GetAttributes(file) & ~FileAttributes.ReadOnly); // Create the font for drawing the watermark. var font = new XFont("Times New Roman", emSize, XFontStyle.BoldItalic); // Open an existing document for editing and loop through its pages. var document = PdfReader.Open(filename); // Set version to PDF 1.4 (Acrobat 5) because we use transparency. if (document.Version < 14) { document.Version = 14; } for (var idx = 0; idx < document.Pages.Count; idx++) { var page = document.Pages[idx]; switch (idx % 3) { case 0: { // Variation 1: Draw a watermark as a text string. // Get an XGraphics object for drawing beneath the existing content. var gfx = XGraphics.FromPdfPage(page, XGraphicsPdfPageOptions.Prepend); // Get the size (in points) of the text. var size = gfx.MeasureString(watermark, font); // Define a rotation transformation at the center of the page. gfx.TranslateTransform(page.Width / 2, page.Height / 2); gfx.RotateTransform(-Math.Atan(page.Height / page.Width) * 180 / Math.PI); gfx.TranslateTransform(-page.Width / 2, -page.Height / 2); // Create a string format. var format = new XStringFormat(); format.Alignment = XStringAlignment.Near; format.LineAlignment = XLineAlignment.Near; // Create a dimmed red brush. XBrush brush = new XSolidBrush(XColor.FromArgb(128, 255, 0, 0)); // Draw the string. gfx.DrawString(watermark, font, brush, new XPoint((page.Width - size.Width) / 2, (page.Height - size.Height) / 2), format); } break; case 1: { // Variation 2: Draw a watermark as an outlined graphical path. // NYI: Does not work in Core build. // Get an XGraphics object for drawing beneath the existing content. var gfx = XGraphics.FromPdfPage(page, XGraphicsPdfPageOptions.Prepend); // Get the size (in points) of the text. var size = gfx.MeasureString(watermark, font); // Define a rotation transformation at the center of the page. gfx.TranslateTransform(page.Width / 2, page.Height / 2); gfx.RotateTransform(-Math.Atan(page.Height / page.Width) * 180 / Math.PI); gfx.TranslateTransform(-page.Width / 2, -page.Height / 2); // Create a graphical path. var path = new XGraphicsPath(); // Create a string format. var format = new XStringFormat(); format.Alignment = XStringAlignment.Near; format.LineAlignment = XLineAlignment.Near; // Add the text to the path. // AddString is not implemented in PDFsharp Core. path.AddString(watermark, font.FontFamily, XFontStyle.BoldItalic, 150, new XPoint((page.Width - size.Width) / 2, (page.Height - size.Height) / 2), format); // Create a dimmed red pen. var pen = new XPen(XColor.FromArgb(128, 255, 0, 0), 2); // Stroke the outline of the path. gfx.DrawPath(pen, path); } break; case 2: { // Variation 3: Draw a watermark as a transparent graphical path above text. // NYI: Does not work in Core build. // Get an XGraphics object for drawing above the existing content. var gfx = XGraphics.FromPdfPage(page, XGraphicsPdfPageOptions.Append); // Get the size (in points) of the text. var size = gfx.MeasureString(watermark, font); // Define a rotation transformation at the center of the page. gfx.TranslateTransform(page.Width / 2, page.Height / 2); gfx.RotateTransform(-Math.Atan(page.Height / page.Width) * 180 / Math.PI); gfx.TranslateTransform(-page.Width / 2, -page.Height / 2); // Create a graphical path. var path = new XGraphicsPath(); // Create a string format. var format = new XStringFormat(); format.Alignment = XStringAlignment.Near; format.LineAlignment = XLineAlignment.Near; // Add the text to the path. // AddString is not implemented in PDFsharp Core. path.AddString(watermark, font.FontFamily, XFontStyle.BoldItalic, 150, new XPoint((page.Width - size.Width) / 2, (page.Height - size.Height) / 2), format); // Create a dimmed red pen and brush. var pen = new XPen(XColor.FromArgb(50, 75, 0, 130), 3); XBrush brush = new XSolidBrush(XColor.FromArgb(50, 106, 90, 205)); // Stroke the outline of the path. gfx.DrawPath(pen, brush, path); } break; } } // Save the document... document.Save(filename); // ...and start a viewer Process.Start(filename); }
public static void InspectDocs( SearchOption a_so = SearchOption.AllDirectories) { string sCorePath = AppCfg.ArchivePath_Core; DirectoryInfo di_Cor = new DirectoryInfo(sCorePath); var fi_Coll_Core_0 = di_Cor.GetFiles("*.corPdf", //SearchOption.AllDirectories); a_so); if (fi_Coll_Core_0.Length == 0) { return; } var fi_Coll_Core = fi_Coll_Core_0.OrderBy(f => f.Name); DataTable tbl_Docs = null; { string stmt = " SELECT Document_ID, IsInspected " + " FROM dbo.Documents " + " WHERE (IsInspected = 0) " + " Order by Document_ID "; tbl_Docs = DataHelper.ExecuteSqlCmd(stmt); } SqlBatchMgr sbm1 = new SqlBatchMgr( SqlBatchMgr.ExecutionType.ExecNonQuery); int nIdx_Row = 0; foreach (FileInfo fi in fi_Coll_Core) { int nDocument_ID = int.Parse( fi.Name.Substring(0, 10)); for (; nIdx_Row < tbl_Docs.Rows.Count; nIdx_Row++) { int nDocID_Row = (int)tbl_Docs.Rows[nIdx_Row]["Document_ID"]; if (nDocID_Row < nDocument_ID) { continue; } else if (nDocID_Row > nDocument_ID) { break; } //if (nIdx_Row >= tbl_Docs.Rows.Count) //break; // hthm tmp //if (nDocument_ID < 394) //continue; int nofPages = -1; bool bIsCorrupted = true; PdfReader pdfReader = null; try { pdfReader = new PdfReader(fi.FullName); nofPages = pdfReader.NumberOfPages; bIsCorrupted = false; //pdfReader.Close(); } catch (Exception exp) { } finally { if (pdfReader != null) { pdfReader.Close(); } } { string stmt = " update Documents set " + " NofPages = %NofPages, " + " IsCorrupted = '%IsCorrupted', " + " IsInspected = 'True' " + " where Document_ID = %Document_ID "; stmt = stmt.Replace("%NofPages", nofPages.ToString()); stmt = stmt.Replace("%IsCorrupted", bIsCorrupted.ToString()); stmt = stmt.Replace("%Document_ID", nDocument_ID.ToString()); sbm1.AddStatment(stmt); } } } sbm1.ExecuteNonQuery(); }
private void InputDir(string srcPath) { string fullName, paperName, paperXiangduiPath, paperTextXiangduiPath; try { DirectoryInfo dir = new DirectoryInfo(srcPath); FileSystemInfo[] fileinfo = dir.GetFileSystemInfos(); //返回目录中所有文件和子目录 foreach (FileSystemInfo i in fileinfo) { if (i is DirectoryInfo) //判断是否文件夹 { DirectoryInfo subdir = new DirectoryInfo(i.FullName); //subdir.Delete(true); //删除子目录和文件 InputDir(subdir.FullName); } else { if (i.Extension == ".pdf" || i.Extension == ".PDF" || i.Extension == ".txt" || i.Extension == ".TXT") { fullName = i.FullName; paperName = i.Name.Substring(0, i.Name.Length - 4); //判断文章表中是否有该名称的文件 var data = (from wz in wz_dt where wz.文章名 == paperName select wz).ToList(); if (data.Count == 0) { //如果文章表中没有,则在文章表中创建新的记录 DataRow newRow; newRow = wz_dt.NewRow(); newRow["文章名"] = paperName; //将绝对路径改为相对路径 MatchCollection mc; List <Regex> regex_list = new List <Regex>(); regex_list.Add(new Regex("科学研究")); regex_list.Add(new Regex("社会科学")); regex_list.Add(new Regex("文学艺术")); regex_list.Add(new Regex("应用科学")); regex_list.Add(new Regex("哲学")); regex_list.Add(new Regex("自然科学")); for (int regex_int = 0; regex_int < regex_list.Count; regex_int++) { Regex r = regex_list[regex_int]; mc = r.Matches(fullName); if (mc.Count != 0) { int index = mc[0].Index; //正则表达式位置 int qian_location = 1; //正则表达式的前一字符位置 int hou_location; //正则表达式的后一字符位置 if (mc[0].Value == "哲学") { hou_location = 2; } else { hou_location = 4; } int houZhui_length = 4; //扩展名长度 char qian = fullName[index - qian_location]; char hou = fullName[index + hou_location]; if ((qian == '/' || qian == '\\') & (hou == '/' || hou == '\\')) { if (i.Extension == ".pdf" || i.Extension == ".PDF") { paperXiangduiPath = ".\\" + fullName.Substring(index); newRow["文件"] = paperXiangduiPath; } string hh = fullName.Substring(index); string kk = hh.Substring(0, hh.Length - houZhui_length); paperTextXiangduiPath = ".\\" + kk + ".txt"; newRow["text文件"] = paperTextXiangduiPath; wz_dt.Rows.Add(newRow); wz_ta.Update(wz_dt); //将pdf文件内容写入txt文件 if (i.Extension == ".pdf" || i.Extension == ".PDF") { string text = ""; try { string pdffilename = fullName; PdfReader pdfReader = new PdfReader(pdffilename); int numberOfPages = pdfReader.NumberOfPages; text = string.Empty; for (int j = 1; j <= numberOfPages; ++j) { iTextSharp.text.pdf.parser.ITextExtractionStrategy strategy = new iTextSharp.text.pdf.parser.SimpleTextExtractionStrategy(); text += iTextSharp.text.pdf.parser.PdfTextExtractor.GetTextFromPage(pdfReader, j, strategy); } pdfReader.Close(); } catch (Exception ex) { StreamWriter wlog = File.AppendText(System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "\\mylog.log"); wlog.WriteLine("出错文件:" + "原因:" + ex.ToString()); wlog.Flush(); wlog.Close(); } string ss = fullName.Substring(0, fullName.Length - houZhui_length) + ".txt"; StreamWriter fileWriter = new StreamWriter(ss, true); fileWriter.Write(text); fileWriter.Close(); } } } } } } } } } catch (Exception e) { MessageBox.Show(e.Message); } }
/** * Return the XFA Object, could be an array, could be a Stream. * Returns null f no XFA Object is present. * @param reader a PdfReader instance * @return the XFA object * @since 2.1.3 */ public static PdfObject GetXfaObject(PdfReader reader) { PdfDictionary af = (PdfDictionary)PdfReader.GetPdfObjectRelease(reader.Catalog.Get(PdfName.ACROFORM)); if (af == null) { return null; } return PdfReader.GetPdfObjectRelease(af.Get(PdfName.XFA)); }
private void MergeWorkerDoWork(object sender, DoWorkEventArgs e) { object[] args = (object[])e.Argument; ObservableCollection <PdfFile> pdfFiles = (ObservableCollection <PdfFile>)args[0]; string destinationPath = (string)args[1]; bool overwriteFile = (bool)args[2]; string errorMsg = string.Empty, progressStatus = string.Empty; int rotation = 0, totalNrOfPages = 0, progress = 0; int fileIndex = 0, pageNumber = 0; FileStream outFileStream = null; Document destinationDoc = null; PdfImportedPage page = null; PdfWriter writer = null; PdfReader pdfReader = null; totalNrOfPages = pdfFiles.Sum(pdfFile => pdfFile.Reader.NumberOfPages); if (totalNrOfPages > 0 && FileHelpers.FileIsAvailable(destinationPath, overwriteFile, out outFileStream, out errorMsg) == Define.Success) { destinationDoc = new Document(); writer = PdfWriter.GetInstance(destinationDoc, outFileStream); destinationDoc.Open(); PdfContentByte cb = writer.DirectContent; while (fileIndex < pdfFiles.Count && !mergeBackgroundWorker.CancellationPending) { progressStatus = string.Format("Processing PDF file: {0}.", pdfFiles[fileIndex].Info.FullName); mergeBackgroundWorker.ReportProgress(progress * 100 / totalNrOfPages, progressStatus); pdfReader = pdfFiles[fileIndex].Reader; pdfReader.RemoveUnusedObjects(); pageNumber = 1; while (pageNumber <= pdfFiles[fileIndex].Reader.NumberOfPages && !mergeBackgroundWorker.CancellationPending) { destinationDoc.SetPageSize(pdfReader.GetPageSizeWithRotation(pageNumber)); destinationDoc.NewPage(); page = writer.GetImportedPage(pdfReader, pageNumber); rotation = pdfReader.GetPageRotation(pageNumber); if (rotation == 90) { cb.AddTemplate(page, 0, -1f, 1f, 0, 0, pdfReader.GetPageSizeWithRotation(pageNumber).Height); } else if (rotation == 180) { cb.AddTemplate(page, -1f, 0, 0, -1f, pdfReader.GetPageSizeWithRotation(pageNumber).Width, pdfReader.GetPageSizeWithRotation(pageNumber).Height); } else if (rotation == 270) { cb.AddTemplate(page, 0, 1f, -1f, 0, pdfReader.GetPageSizeWithRotation(pageNumber).Width, 0); } else { cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0); } pageNumber++; mergeBackgroundWorker.ReportProgress(++progress * 100 / totalNrOfPages); } fileIndex++; } progressStatus = string.Format("Closing PDF file: {0}.", destinationPath); mergeBackgroundWorker.ReportProgress(progress * 100 / totalNrOfPages, progressStatus); } if (destinationDoc != null && !mergeBackgroundWorker.CancellationPending) { destinationDoc.Close(); destinationDoc.Dispose(); destinationDoc = null; } if (writer != null && !mergeBackgroundWorker.CancellationPending) { writer.Close(); writer.Dispose(); writer = null; } if (outFileStream != null) { outFileStream.Close(); outFileStream.Dispose(); outFileStream = null; } if (mergeBackgroundWorker.CancellationPending) { e.Cancel = true; } e.Result = errorMsg; }
/** * A constructor from a <CODE>PdfReader</CODE>. It basically does everything * from finding the XFA stream to the XML parsing. * @param reader the reader * @throws java.io.IOException on error * @throws javax.xml.parsers.ParserConfigurationException on error * @throws org.xml.sax.SAXException on error */ public XfaForm(PdfReader reader) { this.reader = reader; PdfObject xfa = GetXfaObject(reader); if (xfa == null) { xfaPresent = false; return; } xfaPresent = true; MemoryStream bout = new MemoryStream(); if (xfa.IsArray()) { PdfArray ar = (PdfArray)xfa; for (int k = 1; k < ar.Size; k += 2) { PdfObject ob = ar.GetDirectObject(k); if (ob is PRStream) { byte[] b = PdfReader.GetStreamBytes((PRStream)ob); bout.Write(b, 0, b.Length); } } } else if (xfa is PRStream) { byte[] b = PdfReader.GetStreamBytes((PRStream)xfa); bout.Write(b, 0, b.Length); } bout.Seek(0, SeekOrigin.Begin); XmlTextReader xtr = new XmlTextReader(bout); domDocument = new XmlDocument(); domDocument.PreserveWhitespace = true; domDocument.Load(xtr); ExtractNodes(); }
/// <summary> /// Extracts a text from a PDF file. /// </summary> /// <param name="inFileName">the full path to the pdf file.</param> /// <param name="outFileName">the output file name.</param> /// <returns>the extracted text</returns> public bool ExtractText(string inFileName, string outFileName) { StreamWriter outFile = null; try { // Create a reader for the given PDF file var reader = new PdfReader(inFileName); //outFile = File.CreateText(outFileName); outFile = new StreamWriter(outFileName, false, System.Text.Encoding.UTF8); Console.Write("Processing: "); int totalLen = 68; float charUnit = ((float)totalLen) / (float)reader.NumberOfPages; int totalWritten = 0; float curUnit = 0; for (int page = 1; page <= reader.NumberOfPages; page++) { outFile.Write(ExtractTextFromPDFBytes(reader.GetPageContent(page)) + " "); // Write the progress. if (charUnit >= 1.0f) { for (int i = 0; i < (int)charUnit; i++) { Console.Write("#"); totalWritten++; } } else { curUnit += charUnit; if (curUnit >= 1.0f) { for (int i = 0; i < (int)curUnit; i++) { Console.Write("#"); totalWritten++; } curUnit = 0; } } } if (totalWritten < totalLen) { for (int i = 0; i < (totalLen - totalWritten); i++) { Console.Write("#"); } } return(true); } catch { return(false); } finally { if (outFile != null) { outFile.Close(); } } }
/** * Retrieves the page labels from a PDF as an array of String objects. * @param reader a PdfReader object that has the page labels you want to retrieve * @return a String array or <code>null</code> if no page labels are present */ public static String[] GetPageLabels(PdfReader reader) { int n = reader.NumberOfPages; PdfDictionary dict = reader.Catalog; PdfDictionary labels = (PdfDictionary)PdfReader.GetPdfObjectRelease(dict.Get(PdfName.PAGELABELS)); if (labels == null) return null; String[] labelstrings = new String[n]; Hashtable numberTree = PdfNumberTree.ReadTree(labels); int pagecount = 1; String prefix = ""; char type = 'D'; for (int i = 0; i < n; i++) { if (numberTree.ContainsKey(i)) { PdfDictionary d = (PdfDictionary)PdfReader.GetPdfObjectRelease((PdfObject)numberTree[i]); if (d.Contains(PdfName.ST)) { pagecount = ((PdfNumber)d.Get(PdfName.ST)).IntValue; } else { pagecount = 1; } if (d.Contains(PdfName.P)) { prefix = ((PdfString)d.Get(PdfName.P)).ToUnicodeString(); } if (d.Contains(PdfName.S)) { type = ((PdfName)d.Get(PdfName.S)).ToString()[1]; } } switch (type) { default: labelstrings[i] = prefix + pagecount; break; case 'R': labelstrings[i] = prefix + RomanNumberFactory.GetUpperCaseString(pagecount); break; case 'r': labelstrings[i] = prefix + RomanNumberFactory.GetLowerCaseString(pagecount); break; case 'A': labelstrings[i] = prefix + RomanAlphabetFactory.GetUpperCaseString(pagecount); break; case 'a': labelstrings[i] = prefix + RomanAlphabetFactory.GetLowerCaseString(pagecount); break; } pagecount++; } return labelstrings; }
/** Entry point to encrypt a PDF document. The encryption parameters are the same as in * <code>PdfWriter</code>. The userPassword and the * ownerPassword can be null or have zero length. In this case the ownerPassword * is replaced by a random string. The open permissions for the document can be * AllowPrinting, AllowModifyContents, AllowCopy, AllowModifyAnnotations, * AllowFillIn, AllowScreenReaders, AllowAssembly and AllowDegradedPrinting. * The permissions can be combined by ORing them. * @param reader the read PDF * @param os the output destination * @param strength <code>true</code> for 128 bit key length, <code>false</code> for 40 bit key length * @param userPassword the user password. Can be null or empty * @param ownerPassword the owner password. Can be null or empty * @param permissions the user permissions * @param newInfo an optional <CODE>String</CODE> map to add or change * the info dictionary. Entries with <CODE>null</CODE> * values delete the key in the original info dictionary * @throws DocumentException on error * @throws IOException on error */ public static void Encrypt(PdfReader reader, Stream os, bool strength, String userPassword, String ownerPassword, int permissions, Hashtable newInfo) { PdfStamper stamper = new PdfStamper(reader, os); stamper.SetEncryption(strength, userPassword, ownerPassword, permissions); stamper.MoreInfo = newInfo; stamper.Close(); }
/// <summary> /// Parses a stream object and removes OCGs. </summary> /// <param name="stream"> a stream object </param> /// <param name="resources"> the resources dictionary of that object (containing info about the OCGs) </param> public virtual void Parse(PRStream stream, PdfDictionary resources) { baos = new MemoryStream(); properties = resources.GetAsDict(PdfName.PROPERTIES); xobj = new HashSet2 <PdfName>(); PdfDictionary xobjects = resources.GetAsDict(PdfName.XOBJECT); if (xobjects != null) { // remove XObject (form or image) that belong to an OCG that needs to be removed foreach (PdfName name in xobjects.Keys) { PRStream xobject = (PRStream)xobjects.GetAsStream(name); PdfDictionary oc = xobject.GetAsDict(PdfName.OC); if (oc != null) { PdfString ocname = oc.GetAsString(PdfName.NAME); if (ocname != null && ocgs.Contains(ocname.ToString())) { xobj.Add(name); } } } foreach (PdfName name in xobj) { xobjects.Remove(name); } } // parse the content stream byte[] contentBytes = PdfReader.GetStreamBytes(stream); PRTokeniser tokeniser = new PRTokeniser(new RandomAccessFileOrArray(contentBytes)); PdfContentParser ps = new PdfContentParser(tokeniser); List <PdfObject> operands = new List <PdfObject>(); while (ps.Parse(operands).Count > 0) { PdfLiteral @operator = (PdfLiteral)operands[operands.Count - 1]; ProcessOperator(this, @operator, operands); if ("BI".Equals(@operator.ToString())) { int found = 0; int ch; bool immediateAfterBI = true; while ((ch = tokeniser.Read()) != -1) { if (!immediateAfterBI || !PRTokeniser.IsWhitespace(ch)) { baos.WriteByte((byte)ch); } immediateAfterBI = false; if (found == 0 && PRTokeniser.IsWhitespace(ch)) { found++; } else if (found == 1 && ch == 'E') { found++; } else if (found == 1 && PRTokeniser.IsWhitespace(ch)) { // this clause is needed if we have a white space character that is part of the image data // followed by a whitespace character that precedes the EI operator. In this case, we need // to flush the first whitespace, then treat the current whitespace as the first potential // character for the end of stream check. Note that we don't increment 'found' here. } else if (found == 2 && ch == 'I') { found++; } else if (found == 3 && PRTokeniser.IsWhitespace(ch)) { break; } else { found = 0; } } } } baos.Flush(); baos.Close(); stream.SetData(baos.GetBuffer()); }
/** Entry point to encrypt a PDF document. The encryption parameters are the same as in * <code>PdfWriter</code>. The userPassword and the * ownerPassword can be null or have zero length. In this case the ownerPassword * is replaced by a random string. The open permissions for the document can be * AllowPrinting, AllowModifyContents, AllowCopy, AllowModifyAnnotations, * AllowFillIn, AllowScreenReaders, AllowAssembly and AllowDegradedPrinting. * The permissions can be combined by ORing them. * @param reader the read PDF * @param os the output destination * @param userPassword the user password. Can be null or empty * @param ownerPassword the owner password. Can be null or empty * @param permissions the user permissions * @param strength128Bits <code>true</code> for 128 bit key length, <code>false</code> for 40 bit key length * @throws DocumentException on error * @throws IOException on error */ public static void Encrypt(PdfReader reader, Stream os, byte[] userPassword, byte[] ownerPassword, int permissions, bool strength128Bits) { PdfStamper stamper = new PdfStamper(reader, os); stamper.SetEncryption(userPassword, ownerPassword, permissions, strength128Bits); stamper.Close(); }
public void AddDocument(PdfReader pdfDocument) { documents.Add(pdfDocument); }
/** * Parses a string with structured content. * * @param reader * the PdfReader that has access to the PDF file * @param os * the Stream to which the resulting xml will be written */ virtual public void ConvertToXml(PdfReader reader, Stream os) { ConvertToXml(reader, os, Encoding.Default); }
/// <summary> /// Parsing data of pdf-file from tables /// </summary> internal void ParsingFile() { stream.Position = 0; using (var reader = new PdfReader(stream)) using (var pdf = new PdfDocument(reader)) { reader.SetCloseStream(false); PageCount = pdf.GetNumberOfPages(); // get every page for analyse PdfPage[] pages = Enumerable .Range(0, PageCount) .Select(t => pdf.GetPage(t + 1)) .ToArray(); // data of every page (two diferent variants) HeadInfo = ParsingHeader(pages[0]); // find the limits { Regex regex = new Regex(@"З(\s*)а(\s*)д(\s*)а(\s*)н(\s+)д(\s*)и(\s*)а(\s*)п(\s*)а(\s*)з(\s*)о(\s*)н(\s+)т(\s*)е(\s*)м(\s*)п(\s*)е(\s*)р(\s*)а(\s*)т(\s*)у(\s*)р(\s+)м(\s*)е(\s*)ж(\s*)д(\s*)у(\s*):(\s+[+-]?\d+)°C и(\s+[+-]?\d+)°C", RegexOptions.IgnoreCase | RegexOptions.Compiled); Match match = regex.Match(HeadInfo.ToString()); string findS = match.Value; regex = new Regex(@"([+-]?\d+)", RegexOptions.Compiled); MatchCollection matches = regex.Matches(findS); List <float> results = new List <float>(); foreach (Match m in matches) { float.TryParse(m.Value, out float res); results.Add(res); } // save data LimitMin = results.Min(); LimitMax = results.Max(); } //TODO: delete last row for last page, when we will be create new pdf-file // data of names every columns ColumnInfo = ParsingColumns(pages[0]); // data from tables DataInfo = new StringBuilder[PageCount - 1]; // analyse tables all page without last using multithreading Parallel.For(0, DataInfo.Length, i => DataInfo[i] = ParsingTables(pages[i])); // convert string data to real data TableData = ExtractTableData(DataInfo); // save data TableDataBlock = new KeyValuePairTable <int, DateTime, float, bool> [TableData.Length]; TableData.CopyTo(TableDataBlock, 0); // data of Oy axis OyAxisInfo = ParsingOyAxis(pages[PageCount - 1]); // convert string data to real data DataOyAxis = ExtractOyAxis(OyAxisInfo); // data of Ox axis OxAxisInfo = ParsingOxAxis(pages[PageCount - 1]); // convert string data to real data DataOxAxis = ExtractOxAxis(OxAxisInfo); pdf.Close(); } }
/* ----------------------------------------------------------------- */ /// /// GetContentParser /// /// <summary> /// PdfReaderContentParser オブジェクトを取得します。 /// </summary> /// /// <param name="src">PdfReader オブジェクト</param> /// /// <returns>PdfReaderContentParser オブジェクト</returns> /// /* ----------------------------------------------------------------- */ public static PdfReaderContentParser GetContentParser(this PdfReader src) => new PdfReaderContentParser(src);
public static string AddCommentsToFile(string fileName, string outfilepath, string userComments, PdfPTable newTable) { string outputFileName = outfilepath; //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.HELVETICA , 15 , iTextSharp.text.Font.BOLD , Color.BLACK ); Chunk titleChunk = new Chunk("Comments", titleFont); paragraph.Add(titleChunk); document.Add(paragraph); paragraph = new Paragraph(); Font textFont = new Font(iTextSharp.text.Font.HELVETICA , 12 , iTextSharp.text.Font.NORMAL , Color.BLACK ); Chunk textChunk = new Chunk(userComments, textFont); paragraph.Add(textChunk); document.Add(paragraph); document.Add(newTable); } catch (Exception e) { throw e; } finally { document.Close(); } return(outputFileName); }
/** * Sets the XFA key from a byte array. The old XFA is erased. * @param form the data * @param reader the reader * @param writer the writer * @throws java.io.IOException on error */ public static void SetXfa(XfaForm form, PdfReader reader, PdfWriter writer) { PdfDictionary af = (PdfDictionary)PdfReader.GetPdfObjectRelease(reader.Catalog.Get(PdfName.ACROFORM)); if (af == null) { return; } PdfObject xfa = GetXfaObject(reader); if (xfa.IsArray()) { PdfArray ar = (PdfArray)xfa; int t = -1; int d = -1; for (int k = 0; k < ar.Size; k += 2) { PdfString s = ar.GetAsString(k); if ("template".Equals(s.ToString())) { t = k + 1; } if ("datasets".Equals(s.ToString())) { d = k + 1; } } if (t > -1 && d > -1) { reader.KillXref(ar.GetAsIndirectObject(t)); reader.KillXref(ar.GetAsIndirectObject(d)); PdfStream tStream = new PdfStream(SerializeDoc(form.templateNode)); tStream.FlateCompress(writer.CompressionLevel); ar[t] = writer.AddToBody(tStream).IndirectReference; PdfStream dStream = new PdfStream(SerializeDoc(form.datasetsNode)); dStream.FlateCompress(writer.CompressionLevel); ar[d] = writer.AddToBody(dStream).IndirectReference; af.Put(PdfName.XFA, new PdfArray(ar)); return; } } reader.KillXref(af.Get(PdfName.XFA)); PdfStream str = new PdfStream(SerializeDoc(form.domDocument)); str.FlateCompress(writer.CompressionLevel); PdfIndirectReference refe = writer.AddToBody(str).IndirectReference; af.Put(PdfName.XFA, refe); }
/* ----------------------------------------------------------------- */ /// /// GetMetadata /// /// <summary> /// Metadata オブジェクトを取得します。 /// </summary> /// /// <param name="src">PdfReader オブジェクト</param> /// /// <returns>Metadata オブジェクト</returns> /// /* ----------------------------------------------------------------- */ public static Metadata GetMetadata(this PdfReader src) => new Metadata
/** * Retrieves the page labels from a PDF as an array of {@link PdfPageLabelFormat} objects. * @param reader a PdfReader object that has the page labels you want to retrieve * @return a PdfPageLabelEntry array, containing an entry for each format change * or <code>null</code> if no page labels are present */ public static PdfPageLabelFormat[] GetPageLabelFormats(PdfReader reader) { PdfDictionary dict = reader.Catalog; PdfDictionary labels = (PdfDictionary)PdfReader.GetPdfObjectRelease(dict.Get(PdfName.PAGELABELS)); if (labels == null) return null; Hashtable numberTree = PdfNumberTree.ReadTree(labels); int[] numbers = new int[numberTree.Count]; numberTree.Keys.CopyTo(numbers, 0); Array.Sort(numbers); PdfPageLabelFormat[] formats = new PdfPageLabelFormat[numberTree.Count]; String prefix; int numberStyle; int pagecount; for (int k = 0; k < numbers.Length; ++k) { int key = numbers[k]; PdfDictionary d = (PdfDictionary)PdfReader.GetPdfObjectRelease((PdfObject)numberTree[key]); if (d.Contains(PdfName.ST)) { pagecount = ((PdfNumber)d.Get(PdfName.ST)).IntValue; } else { pagecount = 1; } if (d.Contains(PdfName.P)) { prefix = ((PdfString)d.Get(PdfName.P)).ToUnicodeString(); } else { prefix = ""; } if (d.Contains(PdfName.S)) { char type = ((PdfName)d.Get(PdfName.S)).ToString()[1]; switch (type) { case 'R': numberStyle = UPPERCASE_ROMAN_NUMERALS; break; case 'r': numberStyle = LOWERCASE_ROMAN_NUMERALS; break; case 'A': numberStyle = UPPERCASE_LETTERS; break; case 'a': numberStyle = LOWERCASE_LETTERS; break; default: numberStyle = DECIMAL_ARABIC_NUMERALS; break; } } else { numberStyle = EMPTY; } formats[k] = new PdfPageLabelFormat(key + 1, numberStyle, prefix, pagecount); } return formats; }
/** * Parses a string with structured content. * * @param reader * the PdfReader that has access to the PDF file * @param os * the Stream to which the resulting xml will be written */ virtual public void ConvertToXml(PdfReader reader, Stream os) { ConvertToXml(reader, os, Encoding.UTF8); }
/** * Switches to the previous revision. * @throws IOException * @throws GeneralSecurityException */ virtual public void SwitchToPreviousRevision() { LOGGER.Info("Switching to previous revision."); latestRevision = false; dss = reader.Catalog.GetAsDict(PdfName.DSS); DateTime cal = pkcs7.TimeStampDate; if (cal == DateTime.MaxValue) cal = pkcs7.SignDate; // TODO: get date from signature signDate = cal; List<String> names = fields.GetSignatureNames(); if (names.Count > 1) { signatureName = names[names.Count - 2]; reader = new PdfReader(fields.ExtractRevision(signatureName)); fields = reader.AcroFields; names = fields.GetSignatureNames(); signatureName = names[names.Count - 1]; pkcs7 = CoversWholeDocument(); LOGGER.Info(String.Format("Checking {0}signature {1}", pkcs7.IsTsp ? "document-level timestamp " : "", signatureName)); } else { LOGGER.Info("No signatures in revision"); pkcs7 = null; } }
/** * Signs a PDF where space was already reserved. * @param reader the original PDF * @param fieldName the field to sign. It must be the last field * @param outs the output PDF * @param externalSignatureContainer the signature container doing the actual signing. Only the * method ExternalSignatureContainer.sign is used * @throws DocumentException * @throws IOException * @throws GeneralSecurityException */ public static void SignDeferred(PdfReader reader, String fieldName, Stream outs, IExternalSignatureContainer externalSignatureContainer) { AcroFields af = reader.AcroFields; PdfDictionary v = af.GetSignatureDictionary(fieldName); if (v == null) throw new DocumentException("No field"); if (!af.SignatureCoversWholeDocument(fieldName)) throw new DocumentException("Not the last signature"); PdfArray b = v.GetAsArray(PdfName.BYTERANGE); long[] gaps = b.AsLongArray(); if (b.Size != 4 || gaps[0] != 0) throw new DocumentException("Single exclusion space supported"); IRandomAccessSource readerSource = reader.SafeFile.CreateSourceView(); Stream rg = new RASInputStream(new RandomAccessSourceFactory().CreateRanged(readerSource, gaps)); byte[] signedContent = externalSignatureContainer.Sign(rg); int spaceAvailable = (int)(gaps[2] - gaps[1]) - 2; if ((spaceAvailable & 1) != 0) throw new DocumentException("Gap is not a multiple of 2"); spaceAvailable /= 2; if (spaceAvailable < signedContent.Length) throw new DocumentException("Not enough space"); StreamUtil.CopyBytes(readerSource, 0, gaps[1] + 1, outs); ByteBuffer bb = new ByteBuffer(spaceAvailable * 2); foreach (byte bi in signedContent) { bb.AppendHex(bi); } int remain = (spaceAvailable - signedContent.Length) * 2; for (int k = 0; k < remain; ++k) { bb.Append((byte)48); } bb.WriteTo(outs); StreamUtil.CopyBytes(readerSource, gaps[2] - 1, gaps[3] + 1, outs); }
internal void ExtractMetaData() { stream.Position = 0; using (var reader = new PdfReader(stream)) using (var pdf = new PdfDocument(reader)) using (var doc = new Document(pdf)) { reader.SetCloseStream(false); PageCount = pdf.GetNumberOfPages(); #region Another variant of load all page (simple but longer) #if false { List <PdfPage> pages = new List <PdfPage>(); for (int i = 0; i < PageCount; i++) { pages.Add(pdf.GetPage(i + 1)); } } #endif #endregion // get every page for analyse PdfPage[] pages = Enumerable .Range(0, PageCount) .Select(t => pdf.GetPage(t + 1)) .ToArray(); // create array for save information about every page Pages = new PageInfo[pages.Length]; for (int i = 0; i < pages.Length; i++) { Pages[i].Id = i + 1; Pages[i].Rotation = pages[i].GetRotation(); Pages[i].Size = new SizeInfo { X = pages[i].GetPageSize().GetX(), Y = pages[i].GetPageSize().GetY(), Height = pages[i].GetPageSize().GetHeight(), Width = pages[i].GetPageSize().GetWidth(), HeightUU = iTextSharp.text.Utilities .PointsToMillimeters(pages[i].GetPageSize().GetHeight()), WidthUU = iTextSharp.text.Utilities .PointsToMillimeters(pages[i].GetPageSize().GetWidth()), Top = pages[i].GetPageSize().GetTop(), Bottom = pages[i].GetPageSize().GetBottom(), Left = pages[i].GetPageSize().GetLeft(), Right = pages[i].GetPageSize().GetRight(), }; } Margin = new MarginInfo { Top = doc.GetTopMargin(), Bottom = doc.GetBottomMargin(), Left = doc.GetLeftMargin(), Right = doc.GetRightMargin() }; var data = pdf.GetDocumentInfo(); Metadata = new MetaData { Title = data.GetTitle(), Author = data.GetAuthor(), Subject = data.GetSubject(), Keywords = data.GetKeywords(), Creator = data.GetCreator(), Producer = data.GetProducer(), Version = pdf.GetPdfVersion(), CreationDate = data.GetMoreInfo(PdfName.CreationDate.GetValue()), ModificationDate = data.GetMoreInfo(PdfName.ModDate.GetValue()), }; } }
public static string pdfText(string path) { PdfReader reader = new PdfReader(path); string text = string.Empty; for(int page = 1; page <= reader.NumberOfPages; page++) { text += PdfTextExtractor.GetTextFromPage(reader,page); } reader.Close(); return text; }