מספר עמודים בPDF קיים
-
אני רוצה למצוא את מספר עמודים בקובץ PDF קיים רק על ידי נתינת הPath.
לא רציתי להשתמש בספריות אחרות מכמה טעמים [למרות שיתכן שלא תהיה בררה].
הקוד שמצאתי לזה הוא:public static int getNumberOfPdfPages(string pathDocument) { using (StreamReader sr = new StreamReader(File.OpenRead(pathDocument))) { int my = new Regex(@"/Type\s*/Page[^s]").Matches(sr.ReadToEnd()).Count; sr.Dispose(); return my; }
שזה בעצם לפתוח את הקובץ לקריאת טקסט, ומחפשים את הביטוי המתאים שמסמן שיש כאן מעבר עמוד, ולפי המנין שלו יודעים כמה דפים יש.
אבל במבחן המציאות זה לא כל כך עובד באופן חלק. פעמים שהוא מראה מספר שגוי. או שקובץ שהוספתי לו דף אחד פתאום הוא מראה כאילו נוספו לו 300 עמודים. האם זו הדרך או שצריך להוסיף משהו בקוד.
ועוד שאלה - האם פתיחת הקובץ לקריאה משאירה את הקובץ באותה איכות ויכולות כמו שהיו לו מקודם? כי היה קובץ אחד כזה, שאחרי שעבר דרך הפונקציה לא הסכים למחוק דפים והתנהג בצורה מוזרה ולא אופינית.
האם בסופו של דבר הדרך היא בספריות צד שלישי?פורסם במקור בפורום CODE613 ב29/07/2016 00:58 (+03:00)
-
מאוד פשוט. פתח את הקובץ בעורך טקסט (npp למשל), וחפש את הביטוי הרגלורי הזה.
כנראה שזה לא נכון לכל PDF.השאלה הנוספת, פתיחת הקובץ לקריאה לא משנה אותו במאומה. לא שהיא מחזירה אותו לכפי שהיה אלא שהיא בכלל לא נוגעת בו.
כעת תורך לפרט מה הבעיה בספריות צד ג'.
פורסם במקור בפורום CODE613 ב29/07/2016 01:15 (+03:00)
-
יש כמה ענינים. ראשית צריך ללמוד אותם וזה דבר חדש, אבל אפשר להתרגל לזה וזה בסדר.
דבר שני, אני רוצה לשקע אותם בפרויקטים שלי, והטובים בתשלום, אמנם יש חינמיים טובים ג"כ ואם משהו יודע בבקשה יאמר לי המלצה למשהו, וגם אם זה אפשר להסתדר.
והכי חשוב מבחינתי זה שאני רוצה לשחרר ללקוח קובץ EXE פשוט ונייד, בלי ספריות והתקנות וכו', ובלי חיבור לענן שיקח משם את הספריה, וזאת משום שמדובר בסוג כזה של סקריפטים שהנהוג בזה הוא שזה קובץ אחד בדרך כלל [לאינדיזיין], והמתשמשים מצפים למשהו בסגנון.פורסם במקור בפורום CODE613 ב29/07/2016 01:29 (+03:00)
-
א. ללמוד, זה יותר קל מהקוד שהבאת פה.
ב. הטובים בתשלום - רק למשימות רציניות. לכל דבר פשוט בסגנון הזה יש משהו חינמי. לעניין PDF, אז בלי ספק ITextSharp
דוגמה למה שביקשת במחלקה הזו:int PagesCount(string path) { using (var pdfReader = new PdfReader(path)) return pdfReader.NumberOfPages; }
תדביק את הקוד הזה + תוסיף את ITextSharp דרך מנהל החבילות של נוגט (קליק ימני על הפרוייקט > nuget package manager...) וזהו.
ג. אפשר להטמיע את הספריות בתוך קובץ הרצה יחיד. פשוט מוסיפים את כל הDLL כמשאבים - resource ומחלצים אותם בזמן הרצה. אבל גם לזה כדאי להשתמש בספריה מוכנה: Costura.Fody, גם אותה תתקין דרך נוגט ואתה פטור מכל פעולה אחרת.פורסם במקור בפורום CODE613 ב29/07/2016 13:07 (+03:00)