/// <summary> /// 根据文件名进行分类 /// </summary> /// <param name="fileName"></param> /// <returns>0:正常,1:加密,2:异常</returns> public static int ClassifyByWjm(string fileDir, string fileName) { if (fileName == null || "".Equals(fileName)) return 2; //文件名为空,不存在全文 //文件原来所在目录 string fullFileName = fileDir; fullFileName += ConstructFilePath(fileName, 1); fullFileName += fileName; if (!File.Exists(fullFileName)) return 2; //有文件名,但是文件不存在 if (File.ReadAllBytes(fullFileName).Length == 0) return 2; //文件大小为0 try { PdfReader reader = new PdfReader(fullFileName); if (reader.IsEncrypted()) return 1; //文件加密 } catch { return 2;//PDF文件损坏 } //正常 return 0; }
// --------------------------------------------------------------------------- /** * Inspect a PDF file and write the info to a txt file * @param writer StringBuilder * @param pdf PDF file bytes * @param fileName PDF filename */ public static void Inspect(StringBuilder sb, byte[] pdf, string fileName) { PdfReader reader = new PdfReader(pdf); sb.Append(fileName); sb.Append(Environment.NewLine); sb.Append("Number of pages: "); sb.Append(reader.NumberOfPages); sb.Append(Environment.NewLine); Rectangle mediabox = reader.GetPageSize(1); sb.Append("Size of page 1: ["); sb.Append(mediabox.Left); sb.Append(','); sb.Append(mediabox.Bottom); sb.Append(','); sb.Append(mediabox.Right); sb.Append(','); sb.Append(mediabox.Top); sb.Append("]"); sb.Append(Environment.NewLine); sb.Append("Rotation of page 1: "); sb.Append(reader.GetPageRotation(1)); sb.Append(Environment.NewLine); sb.Append("Page size with rotation of page 1: "); sb.Append(reader.GetPageSizeWithRotation(1)); sb.Append(Environment.NewLine); sb.Append("Is rebuilt? "); sb.Append(reader.IsRebuilt().ToString()); sb.Append(Environment.NewLine); sb.Append("Is encrypted? "); sb.Append(reader.IsEncrypted().ToString()); sb.Append(Environment.NewLine); sb.Append(Environment.NewLine); }
public static SourceTestResult TestSourceFile(string fileName) { try { PdfReader reader = new PdfReader(fileName); bool ok = !reader.IsEncrypted() || (reader.Permissions & PdfWriter.AllowAssembly) == PdfWriter.AllowAssembly; reader.Close(); return ok ? SourceTestResult.Ok : SourceTestResult.Protected; } catch { return SourceTestResult.Unreadable; } }
/// <summary> /// Retrieves the following properties as <see cref="Dictionary<String,String>"/> key/value pairs: /// Page Count, Encrypted, Pdf Version, Rebuilt /// </summary> /// <param name="filename">The PDF file</param> /// <returns>A <see cref="Dictionary<String, String>"/> object</returns> /// <exception cref="ArgumentNullException"></exception> /// <remarks></remarks> public Dictionary <String, String> RetrieveBasicProperties(String filename) { Dictionary <String, String> basicProperties = new Dictionary <string, string>(); if (!String.IsNullOrEmpty(filename) && !String.IsNullOrWhiteSpace(filename)) { var documentReader = new iTextSharpPDF.PdfReader(new iTextSharpPDF.RandomAccessFileOrArray(filename), null); basicProperties.Add("Page Count", documentReader.NumberOfPages.ToString()); basicProperties.Add("Encrypted", documentReader.IsEncrypted().ToString()); basicProperties.Add("Pdf Version", documentReader.PdfVersion.ToString()); basicProperties.Add("Rebuilt", documentReader.IsRebuilt().ToString()); documentReader.Close(); } else { throw new ArgumentNullException("filename", exceptionArgumentNullOrEmptyString); } return(basicProperties); }
public static void Test_ReadPdf_01(string file) { PdfReader reader = null; try { reader = new PdfReader(file); Trace.WriteLine("read pdf : \"{0}\"", file); Trace.WriteLine("number of pages : {0}", reader.NumberOfPages); Rectangle mediabox = reader.GetPageSize(1); Trace.WriteLine("size of page 1 : [ {0}, {1}, {2}, {3} ]", mediabox.Left, mediabox.Bottom, mediabox.Right, mediabox.Top); Trace.WriteLine("rotation of page 1 : {0}", reader.GetPageRotation(1)); Trace.WriteLine("page size with rotation of page 1 : {0}", reader.GetPageSizeWithRotation(1)); Trace.WriteLine("file length : {0}", reader.FileLength); Trace.WriteLine("is rebuilt ? : {0}", reader.IsRebuilt()); Trace.WriteLine("is encrypted ? : {0}", reader.IsEncrypted()); } finally { if (reader != null) reader.Close(); } }
/** Creates new PdfStamperImp. * @param reader the read PDF * @param os the output destination * @param pdfVersion the new pdf version or '\0' to keep the same version as the original * document * @param append * @throws DocumentException on error * @throws IOException */ internal protected PdfStamperImp(PdfReader reader, Stream os, char pdfVersion, bool append) : base(new PdfDocument(), os) { if (!reader.IsOpenedWithFullPermissions) throw new BadPasswordException(MessageLocalization.GetComposedMessage("pdfreader.not.opened.with.owner.password")); if (reader.Tampered) throw new DocumentException(MessageLocalization.GetComposedMessage("the.original.document.was.reused.read.it.again.from.file")); reader.Tampered = true; this.reader = reader; file = reader.SafeFile; this.append = append; if (reader.IsEncrypted() && (append || PdfReader.unethicalreading)) { crypto = new PdfEncryption(reader.Decrypt); } if (append) { if (reader.IsRebuilt()) throw new DocumentException(MessageLocalization.GetComposedMessage("append.mode.requires.a.document.without.errors.even.if.recovery.was.possible")); pdf_version.SetAppendmode(true); if (pdfVersion == 0) { pdf_version.PdfVersion = reader.PdfVersion; } else { pdf_version.PdfVersion = pdfVersion; } byte[] buf = new byte[8192]; int n; while ((n = file.Read(buf)) > 0) this.os.Write(buf, 0, n); prevxref = reader.LastXref; reader.Appendable = true; } else { if (pdfVersion == 0) base.PdfVersion = reader.PdfVersion; else base.PdfVersion = pdfVersion; } if (reader.IsTagged()) { this.SetTagged(); } base.Open(); pdf.AddWriter(this); if (append) { body.Refnum = reader.XrefSize; marked = new IntHashtable(); if (reader.IsNewXrefType()) fullCompression = true; if (reader.IsHybridXref()) fullCompression = false; } initialXrefSize = reader.XrefSize; ReadColorProfile(); }
/** Creates new PdfStamperImp. * @param reader the read PDF * @param os the output destination * @param pdfVersion the new pdf version or '\0' to keep the same version as the original * document * @param append * @throws DocumentException on error * @throws IOException */ internal PdfStamperImp(PdfReader reader, Stream os, char pdfVersion, bool append) : base(new PdfDocument(), os) { if (reader.Tampered) throw new DocumentException("The original document was reused. Read it again from file."); reader.Tampered = true; this.reader = reader; file = reader.SafeFile; this.append = append; if (append) { if (reader.IsRebuilt()) throw new DocumentException("Append mode requires a document without errors even if recovery was possible."); if (reader.IsEncrypted()) crypto = new PdfEncryption(reader.Decrypt); pdf_version.SetAppendmode(true); file.ReOpen(); byte[] buf = new byte[8192]; int n; while ((n = file.Read(buf)) > 0) this.os.Write(buf, 0, n); file.Close(); prevxref = reader.LastXref; reader.Appendable = true; } else { if (pdfVersion == 0) base.PdfVersion = reader.PdfVersion; else base.PdfVersion = pdfVersion; } base.Open(); pdf.AddWriter(this); if (append) { body.Refnum = reader.XrefSize; marked = new IntHashtable(); if (reader.IsNewXrefType()) fullCompression = true; if (reader.IsHybridXref()) fullCompression = false; } initialXrefSize = reader.XrefSize; }
private Boolean lockPDF(String r_password, String w_password) { string rp = null, wp = null; //////////////////////////////////////////////////// // PDF施錠 //////////////////////////////////////////////////// if (avaPDF) { // 一時ファイル取得 String tmpFilePath = Path.GetTempFileName(); // パスワードなしで読み込み可能かチェック try { pdfReader = new PdfReader(dataGridView1.Rows[0].Cells[3].Value.ToString()); } catch { label2.Text = WindowsFormsApplication1.Properties.Resources.pdf1; // "This document has been password-protected."; return(false); } // オーナーパスワードが掛っているかチェック if (pdfReader.IsEncrypted()) { label2.Text = WindowsFormsApplication1.Properties.Resources.pdf2; // "This document has been password-protected."; return(false); } pdfDoc = new iTextSharp.text.Document(pdfReader.GetPageSize(1)); os = new FileStream(tmpFilePath, FileMode.OpenOrCreate); pdfCopy = new PdfCopy(pdfDoc, os); // 出力ファイルにパスワード設定 // rp:ユーザーパスワード // wp:オーナーパスワード(空の場合はユーザーパスワードと同じ値を設定) pdfCopy.Open(); if (r_password.Length == 0) { rp = null; } else { rp = r_password; } if (w_password.Length == 0) { wp = r_password; pdfCopy.SetEncryption( PdfCopy.STRENGTH128BITS, rp, wp, PdfCopy.markAll); } else { wp = w_password; // AllowPrinting 印刷 // AllowCopy 内容のコピーと抽出 // AllowModifyContents 文書の変更 // AllowModifyAnnotations 注釈の入力 // AllowFillIn フォーム・フィールドの入力と署名 // AllowScreenReaders アクセシビリティのための内容抽出 // AllowAssembly 文書アセンブリ pdfCopy.SetEncryption( PdfCopy.STRENGTH128BITS, rp, wp, PdfCopy.AllowScreenReaders | PdfCopy.AllowPrinting); } try { // 出力ファイルDocumentを開く pdfDoc.Open(); // アップロードPDFファイルの内容を出力ファイルに書き込む pdfCopy.AddDocument(pdfReader); // 出力ファイルDocumentを閉じる pdfDoc.Close(); pdfCopy.Close(); os.Close(); pdfReader.Close(); // オリジナルファイルと一時ファイルを置き換える File.Delete(dataGridView1.Rows[0].Cells[3].Value.ToString()); File.Move(tmpFilePath, dataGridView1.Rows[0].Cells[3].Value.ToString()); } catch (Exception eX) { label2.Text = WindowsFormsApplication1.Properties.Resources.error1 + eX.Message; // "Saving failed." + eX.Message; return(false); } } return(true); }
private Boolean unlockPDF(String r_password, String w_password) { Boolean NOPASS = true; //////////////////////////////////////////////////// // PDF解錠 //////////////////////////////////////////////////// if (avaPDF) { // 一時ファイル取得 String tmpFilePath = Path.GetTempFileName(); Boolean isRP = false; Boolean isWP = false; // パスワードなしで読み込めるかチェック try { pdfReader = new PdfReader(dataGridView1.Rows[0].Cells[3].Value.ToString()); isRP = false; // ユーザーパスワードなし // オーナーパスワードが掛っているかチェック isWP = (pdfReader.IsEncrypted()) ? true : false; NOPASS = !(isRP || isWP); pdfReader.Close(); pdfReader.Dispose(); } catch { isRP = true; NOPASS = false; } if (NOPASS) { // パスワードがかかっていない label2.Text = WindowsFormsApplication1.Properties.Resources.pdf2; //"This document is not applied password."; pdfReader.Close(); pdfReader.Dispose(); return(false); } if (isRP && (r_password.Length == 0)) { // ユーザーパスワードが掛っているが、入力されていない label2.Text = WindowsFormsApplication1.Properties.Resources.pdf3; // "This document has been user password-protected."; return(false); } if (isWP && (w_password.Length == 0)) { // オーナーパスワードが掛っているが、入力されていない label2.Text = WindowsFormsApplication1.Properties.Resources.pdf4; //"This document has been owner password-protected."; return(false); } String rp = (r_password.Length == 0) ? null : r_password; String wp = (w_password.Length == 0) ? r_password : w_password; try { pdfReader = new PdfReader(dataGridView1.Rows[0].Cells[3].Value.ToString(), (byte[])System.Text.Encoding.ASCII.GetBytes(wp)); } catch { label2.Text = WindowsFormsApplication1.Properties.Resources.message2; // "Password is incorrect."; return(false); } try { pdfDoc = new iTextSharp.text.Document(pdfReader.GetPageSize(1)); os = new FileStream(tmpFilePath, FileMode.OpenOrCreate); pdfCopy = new PdfCopy(pdfDoc, os); pdfCopy.Open(); pdfDoc.Open(); pdfCopy.AddDocument(pdfReader); pdfDoc.Close(); pdfCopy.Close(); pdfReader.Close(); pdfReader.Dispose(); // オリジナルファイルと一時ファイルを置き換える System.IO.File.Copy(tmpFilePath, dataGridView1.Rows[0].Cells[3].Value.ToString(), true); System.IO.File.Delete(tmpFilePath); } catch (Exception eX) { label2.Text = WindowsFormsApplication1.Properties.Resources.error1 + eX.Message; // "Saving failed." + eX.Message; return(false); } } return(true); }
/// <summary> /// Retrieves the following properties as <see cref="Dictionary<String,String>"/> key/value pairs: /// Page Count, Encrypted, Pdf Version, Rebuilt /// </summary> /// <param name="filename">The PDF file</param> /// <returns>A <see cref="Dictionary<String, String>"/> object</returns> /// <exception cref="ArgumentNullException"></exception> /// <remarks></remarks> public Dictionary<String, String> RetrieveBasicProperties(String filename) { Dictionary<String, String> basicProperties = new Dictionary<string, string>(); if (!String.IsNullOrEmpty(filename) && !String.IsNullOrWhiteSpace(filename)) { var documentReader = new iTextSharpPDF.PdfReader(new iTextSharpPDF.RandomAccessFileOrArray(filename), null); basicProperties.Add("Page Count", documentReader.NumberOfPages.ToString()); basicProperties.Add("Encrypted", documentReader.IsEncrypted().ToString()); basicProperties.Add("Pdf Version", documentReader.PdfVersion.ToString()); basicProperties.Add("Rebuilt", documentReader.IsRebuilt().ToString()); documentReader.Close(); } else { throw new ArgumentNullException("filename", exceptionArgumentNullOrEmptyString); } return basicProperties; }
private void pocketmodstyle() { PdfReader pr = new PdfReader(ofd.FileName); if (pr.IsEncrypted()) { MessageBox.Show(ofd.FileName + " is protected.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } try { var dst = PageSize.GetRectangle(comboBox1.SelectedItem.ToString()); var doc = new Document(dst); var pw = PdfWriter.GetInstance(doc, new FileStream(sfd.FileName, FileMode.Create)); doc.Open(); for (var page = 1; page <= pr.NumberOfPages; page++) { if (page % 8 == 1) doc.NewPage(); var pcb = pw.DirectContent; var src = pr.GetPageSize(page); int rot = pr.GetPageRotation(page); bool isLandscape = (src.Width > src.Height) ? true : false; float scale; float offset; if (isLandscape) { scale = dst.Height / (src.Height * 4); offset = (dst.Width / 2 - (scale * src.Width)) / 2; } else { scale = dst.Height / (src.Width * 4); offset = (dst.Width / 2 - (scale * src.Height)) / 2; } // For scaling and rotation var transRotate = new iTextSharp.awt.geom.AffineTransform(); transRotate.SetToIdentity(); transRotate.Scale(scale, scale); // For position var transAdjust = new iTextSharp.awt.geom.AffineTransform(); transAdjust.SetToIdentity(); // Affine translation of PocketMod style. if (isLandscape || (rot == 90 || rot == 270)) { var px = dst.Width / 2; var py = dst.Height / 4; var rads = 180 * Math.PI / 180; switch (page % 8) { // LEFT SIDE // Rotate 180 degrees case 1: transAdjust.Translate(px - offset, py * 4); transRotate.Rotate(-rads); break; case 0: // as 8 transAdjust.Translate(px - offset, py * 3); transRotate.Rotate(-rads); break; case 7: transAdjust.Translate(px - offset, py * 2); transRotate.Rotate(-rads); break; case 6: transAdjust.Translate(px - offset, py); transRotate.Rotate(-rads); break; // RIGHT SIDE // no rotation case 2: transAdjust.Translate(px + offset, py * 3); break; case 3: transAdjust.Translate(px + offset, py * 2); break; case 4: transAdjust.Translate(px + offset, py); break; case 5: transAdjust.Translate(px + offset, 0); break; } } else { var px = dst.Width / 2; var py = dst.Height / 4; var rads = 90 * Math.PI / 180; switch (page % 8) { // LEFT SIDE // Rotate counterclockwise 90 degrees case 1: transAdjust.Translate(px - offset, py * 3); transRotate.Rotate(rads); break; case 0: // as 8 transAdjust.Translate(px - offset, py * 2); transRotate.Rotate(rads); break; case 7: transAdjust.Translate(px - offset, py); transRotate.Rotate(rads); break; case 6: transAdjust.Translate(px - offset, 0); transRotate.Rotate(rads); break; // RIGHT SIDE // Rotate clockwise 90 degrees case 2: transAdjust.Translate(px + offset, py * 4); transRotate.Rotate(-rads); break; case 3: transAdjust.Translate(px + offset, py * 3); transRotate.Rotate(-rads); break; case 4: transAdjust.Translate(px + offset, py * 2); transRotate.Rotate(-rads); break; case 5: transAdjust.Translate(px + offset, py); transRotate.Rotate(-rads); break; } } var finalTrans = new iTextSharp.awt.geom.AffineTransform(); finalTrans.SetToIdentity(); finalTrans.Concatenate(transAdjust); finalTrans.Concatenate(transRotate); var importedPage = pw.GetImportedPage(pr, page); pcb.AddTemplate(importedPage, finalTrans); if ((page % 8 == 0)||(page == pr.NumberOfPages)) { // Draw guide line for folding. pcb.SetLineWidth(0.01f); // Outside frame if (checkBox1.Checked) { pcb.MoveTo(0f, 0f); pcb.LineTo(dst.Width, 0f); pcb.LineTo(dst.Width, dst.Height); pcb.LineTo(0f, dst.Height); pcb.LineTo(0f, 0f); pcb.Stroke(); } pcb.MoveTo(0f, dst.Height * 3 / 4f); pcb.LineTo(dst.Width, dst.Height * 3 / 4); pcb.Stroke(); pcb.MoveTo(0f, dst.Height * 2 / 4f); pcb.LineTo(dst.Width, dst.Height * 2 / 4); pcb.Stroke(); pcb.MoveTo(0f, dst.Height * 1 / 4f); pcb.LineTo(dst.Width, dst.Height * 1 / 4); pcb.Stroke(); pcb.MoveTo(dst.Width / 2, 0f); pcb.LineTo(dst.Width / 2, dst.Height * 1 / 4); pcb.Stroke(); pcb.MoveTo(dst.Width / 2, dst.Height * 3 / 4); pcb.LineTo(dst.Width / 2, dst.Height); pcb.Stroke(); pcb.SetLineDash(3f, 3f); pcb.MoveTo(dst.Width / 2, dst.Height * 1 / 4); pcb.LineTo(dst.Width / 2, dst.Height * 3 / 4); pcb.Stroke(); pcb.SetLineDash(0); } } doc.Close(); pw.Close(); pr.Close(); } catch (Exception e) { Console.WriteLine("{0} Exception caught.", e); } }