מישהו מכיר ספרייה חיניית להמרת קבצי ורד ל-pdf? (ללא צורך בהתקנת וורד במחשב)...
ב- C#
תודה מראש
pcinfogmach
-
ספרייה להמרת קבצי ורד ל- C# pdf -
בעיה | אדובי רידר גרסה בעברית - שפת התפריטים רק באנגלית@חייםיודלביץ
אתה יכול להתשמש עם pdfxchange זוהי תוכנה משולבת של קריאה ועריכת pdf עובדת ממש נפלא
החלק של העריכה בתשלום וא מתשמשים בו אז הוא מוסיף סימנים למסמך שקשה להסיר אבל אתה יכול פשוט לככוץ את סרגל הכלים ויהיה לך קורא pdf נפלא עם ביצועים מדהימים
וזה תומך גם בעברית מלאה -
C# ב-multiplatform?אשמח לעזרתכם בשאלה בנושא פיתוח מרובה פלטפורמות בשפת C#.
נתקלתי במספר מסגרות עבודה (Frameworks) התומכות בפיתוח מרובה פלטפורמות ב-C#. עם זאת, אני תוהה כיצד נושא הקריאה והכתיבה של קבצים מטופל בספריות השונות. האם גם ספריות אלו תומכות בפיתוח מרובה פלטפורמות?
הספריות שמעניינות אותי במיוחד הן:
Lucene.NET TikaOnDotNet Docnet
לטענת ChatGPT, התשובה חיובית, אך אני מעוניין לדעת כיצד אוכל לוודא זאת לפני שאני מתחיל ללמוד ולהשקיע בפריימוורק מסוים.
בנוסף, אשמח לשמוע על המלצות לפריימוורק שכדאי לי לשקול.
-
מחשב מומלץ לרכישה...אבא שלי קנה כזה מחשב והיה נצרך לתיקון די מהר הבעיה לא הייתה בפלסטיקה אלא במטען שנהרסו לו הפינים. מה הקטע שלהם לעשות כזה דבר חלש בדור שלנו אין לי מושג.
בכל אופן יש מעלה לdell מצד האחריות הם באמת עומדים בדיבור שלהם. ומכיון שמדובר במחשב פשוט לשימוש יום יומי שהם לא שורדים הרבה אז באמת האחריות משדרג את כל העסק.
רק לוודא שבאמת העיסקה כוללת את האחריות הזו של שלוש שנים כי לפעמים הם מוכרים עם אחריות של שנה.מצד הביצעים לא יהיה לך בעיות עם הדל יש לו ביצועים יפים למה שאתה צריך.
בהצלחה
עריכה:
שאלתי את באב שלי שוב אם הוא מרוצה מהמחשב הזה הוא אמר לי שהוא ממש לא מרוצה המחשב לא זורם לו....
הפליסטיקה העיצוב הכל לא נעשה טוב.... -
רג'קס להסרת גרשיים מטקסט מלבד ר"תאינני בקי ברגקס של JS
אבל ב-C# הייתי עושה כך:^"|"$|" | "
ההחלפה קצת יותר מורכבת כי אתה צריך להיזהר לא להחליף את הרווח. ולכן ייתכן שה-lookahead וה-lookbehind עדיף במקרה הזה כמו שצדיק תמים כתב
https://regex101.com/r/CajTc0/1 -
איך לתקשר בין חלקים שונים של תוכנה ב-C# wpf?מצאתי כתבה שבעצם מתארת את הבעיה בצורה יפה ומציעה פתרון שלכאורה אפשר ליישם ב-c#
הייתי שמח לשמוע אם זה הכוון הנכוןhttps://betulnecanli.medium.com/how-to-pass-data-between-viewmodels-f8be320de7ab
-
איך לתקשר בין חלקים שונים של תוכנה ב-C# wpf?@קומפיונט
לא כל כך הבנתי את הפתרון שלך אסביר:
נגיד יש לי viewmodel א' שבו יש נתונים מה-db ויש לי את ה-viewmodel ב' שהוא אחראי על נתונים אחרים אבל שקשורים בעקיפין ל-נתונים ב-viewmodel א'
אני רוצה ליידע את viewmodel ב' כאשר הנתונים ב-viewmodel א' משתנים. איך אני עושה זאת?אגב תודה על ההערה החשובה עם ה-dependencyproperties עשית לי מוטיבציה ללמוד על הנושא.
-
תוכנה לאנשי קשר@שוקי-הרשלר
נשמע שאתה מחפש משהו מאוד ספיציפי אולי תפרט קצת יותר מה אתה מחפש -
איך לתקשר בין חלקים שונים של תוכנה ב-C# wpf?יש לי שני חלקים בתוכנה
- פקד שאחראי להציג מידע מתוך db
- פקד שאחראי להציג מידע שקשור למידע בפקד א' אבל רק בצורה עקיפה
מה בעצם הצורה הכי טובה לעשות את הקוד שמגשר ביניהם
מה שעולה לי בראש לבינתיים הם כמה אפשרויות
- ליצור ViewModel שיקושר לשני הפקדים.
- שימוש ב-delgates ו-events
- שימוש באירועים ולהעביר instance של פקד א' לפקד ב' או הפוך
- ראיתי מישהו שכתב להשתמש ב-Dependency Properties (אין לי מושג מה זה).
עד היום כמתכנת מתחיל התשמשתי עם אפשרות 3. כעת אני שוקל את הדברים מחדש.
אשמח לשמוע מהמומחים. תודה מראש. -
איך להסיר ניקוד וטעמים מטקסט בc#@dovid
פשוט אין מילים!
אפשר לשאול איך עשית את הבדיקות? זה נראה שהתשמשת באיזשהו תוכנה לא visual studioכמו"כ אפשר לשאול למה בעצם על ידי string builder הוא הכי מהיר מכולם?
-
מדריך בסיסי עבור מנוע החיפוש הפופולרי lucene ב-C#Lucene .NET היא ספרייה המשמשת ליצירת מנועי חיפוש חזקים ויעילים בתוך התוכנה שלכם.
הקודים דלהלן נכתבו מתוך נסיון ולכן גם במקום שנראה לכם שלא צריך לעשות כמו שאמרתי תשקלו זאת פעמיים או יותר טוב תשאלו למה עשיתי ככה.כדי להשתמש בספרייה זו תצטרכו להתקין דרך ממשק ה-nuget ב-Visual Studio כמה ספריות. הספרייה הנוכחית של Lucene עדיין בשלבי בטא ולכן תצטרכו לסמן בחלונית ה-nuget את האפשרות "Include prerelease".
להלן הספריות שתצטרכו:
Lucene.Net Lucene.Net.QueryParser
שלב א' - יצירת analyzer
כל מנוע חיפוש בנוי על אינדקס, כלומר הוא מפרק את הטקסט לחלקים ובונה לעצמו אינדקס בו רשום היכן כל מילה נמצאת. Lucene משתמש במחלקה שנקראת Analyzer בכדי לפרק את הטקסט.
לכן, שלב ראשון עלינו לייצר Analyzer:
Analyzer analyzer = new StandardAnalyzer(LuceneVersion.LUCENE_48);
בגרסה 4.8 הפירוק גם בעברית נעשה בצורה טובה. אם אתם רוצים משהו יותר מתקדם תוכלו לנסות את HebMorph, אבל הוא לא מעודכן לגרסה הנוכחית של Lucene ולכן במדריך זה לא נתמקד בו.
אם ברצונכם לתמוך בחיפוש גם בטקסט מנוקד תצטרכו לייצר analyzer משלכם שמסיר את הניקוד כדלהלן:
public class DiacriticsAnalyzer : Analyzer { LuceneVersion version; public DiacriticsAnalyzer(LuceneVersion luceneVersion) { version = luceneVersion; } protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) { var tokenizer = new StandardTokenizer(version, reader); TokenStream filter = new HebrewTokenFilter(tokenizer); filter = new LowerCaseFilter(version, filter); filter = new StopFilter(version, filter, StopAnalyzer.ENGLISH_STOP_WORDS_SET); return new TokenStreamComponents(tokenizer, filter); } sealed class HebrewTokenFilter : TokenFilter { private readonly ICharTermAttribute termAttr; public HebrewTokenFilter(TokenStream input) : base(input) { this.termAttr = AddAttribute<ICharTermAttribute>(); } public sealed override bool IncrementToken() { if (m_input.IncrementToken()) { string token = termAttr.ToString(); string cleanedToken = Regex.Replace(token, @"\p{M}", ""); if (!string.Equals(token, cleanedToken)) { termAttr.SetEmpty().Append(cleanedToken); } return true; } return false; } } }
אפשר להוסיף עוד פונצינליות ל-analyzer כמו פתיחת ראשי תיבות או מילים נרדפות. כאן תוכלו למצוא דוגמא מיושמת כמו"כ הכותב שם יצר תוכנה קטנה שמציגה איך analyzer עובד.
שלב ב' - יצירת האינדקס
להלן קוד דוגמא ליצירת אינדקס מתוך מערך של קבצי טקסט
public void IndexFiles(List<string> files) { using (var directory = FSDirectory.Open(new DirectoryInfo(indexPath))) { var indexConfig = new IndexWriterConfig(LuceneVersion.LUCENE_48, analyzer); using (var writer = new IndexWriter(directory, indexConfig)) { foreach (string file in files) { string content = File.ReadAllText(file); var doc = new Document { new StringField("Path", file, Field.Store.YES), new TextField("Content", content, Field.Store.YES) }; var term = new Term("Path", file); // Create a term to search for the existing document by its path writer.UpdateDocument(term, doc); // Update the document if it exists, otherwise add it } writer.Flush(triggerMerge: true, applyAllDeletes: true); } } }
מאוד חשוב להקפיד על ה-using כדי למנוע מצב בו האינדקס נשאר נעול במצב כתיבה.
כדי למחוק קבצים מהאינדקס תוכלו להתמש עם הקוד דלהלן:
public void RemoveFiles(List<string> files) { using (var directory = FSDirectory.Open(new DirectoryInfo(indexPath))) { var indexConfig = new IndexWriterConfig(Lucene.Net.Util.LuceneVersion.LUCENE_48, analyzer); using (var writer = new IndexWriter(directory, indexConfig)) { var parser = new QueryParser(Lucene.Net.Util.LuceneVersion.LUCENE_48, "Path", analyzer); foreach (string file in files) { Query query = parser.Parse(file); writer.DeleteDocuments(query); } writer.Flush(triggerMerge: false, applyAllDeletes: false); } } }
שלב ג' חיפוש באינדקס
כדי לחפש באינדקס קודם כל תצטרכו ליישם QueryParser אשר תפקידו לעשות parsing למחרוזת הטקסט של החיפוש.
ישנם כמה וכמה סוגים של QueryParsers תלוי מאוד מה הצורך שלכם תוכלו לקרוא על כך בהרחבה בלינק שהבאתי בתחלילת הפוסט, עבור חיפוש עם אפשרויות מגוונות אני ממליץ לכם להתשמש עם ComplexPhraseQueryParser מה שיאפשר למשתמש אפשרויות חיפוש מגווונות כגון חיפוש טבלאי וחיפוש עם wildcards חיפוש מטושטש ועוד ועוד. תוכלו לקרוא על הסינטקס של חיפוש lucene בקישור שבתחילת הפוסט.Analyzer analyzer = new StandardAnalyzer(LuceneVersion.LUCENE_48); ComplexPhraseQueryParser queryParser = new ComplexPhraseQueryParser(LuceneVersion.LUCENE_48, "Content", analyzer);
שימו לב! חיפוש מילה עם ראשי תיבות יחזיר שגיאה יש להזין את הראשי תיבות בתוספת slash ככה
אא\"כ
כעת תוכלו לערוך חיפוש עם ה-QueryParser. בדוגמא דלהלן החיפוש מחזיר את שדה השמות של הקבצים שנמצאו תואמים מתוך האינדקס.
public List<string> Search(string queryText, List<string> checkedTreeNodes) { using (var directory = FSDirectory.Open(new DirectoryInfo(indexPath))) { var searcher = new IndexSearcher(DirectoryReader.Open(directory)); var parser = new CostumeQueryParser(Lucene.Net.Util.LuceneVersion.LUCENE_48, "Content", analyzer); var query = parser.Parse(queryText); var topDocs = searcher.Search(query, int.MaxValue); List<string> results = new List<string>(); foreach (var scoreDoc in topDocs.ScoreDocs) { var path = searcher.Doc(scoreDoc.Doc).Get("Path"); results.Add(path); } return results; } }
שלב ג' -2 איך לייצר גזירים
כדי לייצר גזירים תצטרכו להתקין את חבילת ה-nuget
Lucene.Net.Highlighterלאחמ"כ תוכלו להשתמש עם הקוד הזה
string[] GetFragments(int docId, IndexSearcher searcher, Query query) { //create fragmenter var reader = searcher.IndexReader; var scorer = new QueryScorer(query); var fragmenter = new SimpleSpanFragmenter(scorer, 250); // 250 is the fragment size // create highlighter var formatter = new SimpleHTMLFormatter("<", ">"); //define how to mark found keywords if left empty <b> tags is the default var highlighter = new Highlighter(formatter, scorer); highlighter.TextFragmenter = fragmenter; //extract snippets var content = searcher.Doc(docId).Get("Content"); var tokenStream = TokenSources.GetAnyTokenStream(reader, docId, "Content", analyzer); var fragments = highlighter.GetBestTextFragments(tokenStream, content, false, 10); // 10 is the number of snippets // return filters the list and converts to string filtering is needed only if number of fragments is set to more then 1 return fragments.Where(fragment => fragment.Score > 0).Select(fragment => fragment.ToString()).ToList().ToArray(); }
הקוד הזה מקבל שלוש משתנים מפונציית החיפוש שהבאנו למעלה. פונקציית החיפוש בעצם מזהה אלו מסמכים מכילים את טקסט החיפוש ומחזירה רשימה של מספר הזיהוי של כל מסמך שיש בו תוצאה תואמת
הקוד של הגזירים מקבל את מספר הזיהוי של המסמך שקבילנו בתוצאות + השאילתא שהתשמשנו בה + הגדרות השאילתא -
איך להסיר ניקוד וטעמים מטקסט בc#איך להסיר ניקוד וטעמים מטקסט בc#
מצאתי שני דרכים אשמח לקבל המלצות איזה עדיף ולמה.
# אפשרות א על ידי רגקס
public static string RemoveDiactricts(string input) { return Regex.Replace(input, @"\p{M}", ""); }
# אפשרות ב על ידי ספריית Diactricts
דרך ה-NuGet התקינו את ספריית Diactricts
לאחמ"כ תוכלו להתשמש עם ה-class דלהלןpublic class HebrewDiacriticsMapping : IAccentMapping { private readonly Dictionary<char, MappingReplacement> mappings; public HebrewDiacriticsMapping() { mappings = CreateMappings(); } public IDictionary<char, MappingReplacement> Mapping => mappings; private Dictionary<char, MappingReplacement> CreateMappings() { var mappings = new Dictionary<char, MappingReplacement>(); // Remove all Hebrew diacritics by mapping them to an empty string // Diacritics in Hebrew range from U+0591 to U+05BD, U+05C1, U+05C2, U+05C4, U+05C5 // U+0591 - U+05AF (excluding U+05BE - U+05C0, which are vowels and other symbols) // U+05B0 - U+05BD, U+05C1, U+05C2, U+05C4, U+05C5 (including additional diacritics) for (int i = 0x0591; i <= 0x05AF; i++) { char diacriticChar = (char)i; mappings[diacriticChar] = new MappingReplacement(); } for (int i = 0x05B0; i <= 0x05BD; i++) { char diacriticChar = (char)i; mappings[diacriticChar] = new MappingReplacement(); } mappings['\u05C1'] = new MappingReplacement(); mappings['\u05C2'] = new MappingReplacement(); mappings['\u05C4'] = new MappingReplacement(); mappings['\u05C5'] = new MappingReplacement(); return mappings; } } public static class HebrewDiacriticsRemover { private static readonly DiacriticsMapper mapper = new DiacriticsMapper(new HebrewDiacriticsMapping()); public static string RemoveHebrewDiacritics(this string input) { return mapper.RemoveDiacritics(input); } }
-
רשימה מדורגת בוורד@שואף-לדעת
הוראות לשימוש בשדה SEQ דרך רצועת הכלים ב-Word:- מקם את הסמן במקום שבו אתה רוצה שהמספר הממוספר יופיע.
- עבור ללשונית "הוספה" (Insert) ברצועת הכלים.
- לחץ על "חלקים מהירים" (Quick Parts).
- בחר "שדה" (Field) מהרשימה.
- בחלון שנפתח, בחר "SEQ" מהרשימה "שמות שדות" (Field names).
- בתיבת הטקסט "קוד שדה" (Field codes) הוסף את שם הרצף. לדוגמה:
SEQ דוגמה
לחץ על "אישור" (OK).
הוספת שדות SEQ נוספים:
חזור על שלב 1 עבור כל מקום בו אתה רוצה להוסיף את השדה SEQ, והשתמש באותו שם רצף ("דוגמה" הינו שם הרצף שהתמשנו בו במדריך זה אתה יכול גם לבחור שם רצף אחר).
אם אתה מעונין במשהו קצת יותר מתקדם עיין כאן
https://www.techrepublic.com/article/10-steps-to-creating-inline-numbering-in-a-word-document/
הכתבה באנגלית אבל תוכל הלריץ על זה תרגום דפדפן די בקלות -
רשימה מדורגת בוורד@שואף-לדעת
אתה יוכל להשמש עם שדה SEQ כלומר שדה מספור אוטומטי.
אם תרצה שיהיה ממש מובנה ואטומטי תוכל להקליט מאקרו שעושה גם את המעבר שורה והכל ולעשות לו קיצור מקשים. -
תוכנה לאנשי קשראולי זה יכול להיות התחלה טובה בשבילך?
https://tchumim.com/topic/16090/ספר-טלפונים-ב-html/9 -
שני גלמודות מסכנות - האם ישנם ארגונים שיכולים להתערב ולעזור במקרים כאלה?@Whenever כתב בשני גלמודות מסכנות - האם ישנם ארגונים שיכולים להתערב ולעזור במקרים כאלה?:
אני חושב שאפשר לפנות למחקלת רווחה בעירייה.
סליחה על הבורות איך פונים למחלקת הרווחה?
-
שני גלמודות מסכנות - האם ישנם ארגונים שיכולים להתערב ולעזור במקרים כאלה?אינני יודע אם זה מקום טוב לשאול את השאלה שלי, בכל אופן אני רוצה לשתף אתכם במצב קשה שמתרחש בבניין שלנו, בתקווה שאולי למישהו כאן יש מידע או ידע כיצד לעזור.
בבניין שלנו מתגוררות שתי נשים מבוגרות ועריריות, שאין להן כל מקור פרנסה. הן חיות בתנאים קשים מאוד, בדירה שהפכה לגרוטאה, ואינן מקבלות כל עזרה או תמיכה מגורם כלשהו.
מצבן הכלכלי קשה מאוד והן מתקשות לנהל את חיי היום-יום. בנוסף, השכנים סובלים מהמצב בגלל צעקות עסיסיות שהן מפנות לכל מי שמנסה לתקשר איתן.
כבר מזמן שהן לא משלמות שכירות, והסיבה שבעלת הבית לא גירשה אותן היא רק בגלל חוק הגנת הדייר. כתגובה, בעלת הבית מנסה להתנקם בהן בכל דרך אפשרית. למשל, לאחרונה הייתה נזילה בדירה ובעלת הבית הביאה פועלים לתקן את הבעיה, אך הם השאירו את כל הרצפה פתוחה והלכו.
האם ישנם ארגונים, עמותות או גורמים ממשלתיים שיכולים להתערב ולעזור במקרים כאלה? כל מידע או הכוונה יתקבלו בברכה.
-
הצגת מספר חלונות גם שהמחשב נעול@אביי
תלוי באיזה גירסה של וונידוס כמדומני שמ-10 ומעלה צריך להגדיר את זה במקום אחר -
הצגת מספר חלונות גם שהמחשב נעולאם מדובר באתר מסוים או אפילו כמה אתרים, אפשר לבנות אפליקציה בקלות יחסית שתשתלט על המסך ותציג את האתרים הללו. אם מדובר גם בתוכנות, זה כבר יותר מורכב (לפי מה שקראתי כאן נראה שזה גם אפשרי אבל זה קצת יותר התעסקות), אלא אם כן מדובר בהצגת מידע בלבד, שלזה אפשר כמובן ג"כ לבנות תוכנה די בקלות.
בקיצור, אם זה מתאים לך, הייתי מציע לך לשקול לשלם למישהו שיבנה לך תוכנה ייעודית. זה לא אמור לעלות יותר מדי.